Java面试——专业技能
目录
一、简单讲下 Java 的跨平台原理
由于各个操作系统(Windows,Linux等)支持的指令集不是完全一致的。就会让我们程序在不同的操作系统上要执行不同的程序代码。Java 开发了适用于不同操作系统及位数的 Java 虚拟机来屏蔽系统之间的差异,提供统一的接口(Java API)。对于 Java 开发者而言,只需要在不同的操作系统上安装对应的 Java 虚拟机即可。这时我们的程序只需要遵循 Java 规范,就可以在所有的操作系统上运行 Java 代码。如果我们需要将系统部署到不同的环境时,只需要在系统上安装对应版本的 Java 虚拟机(JVM)即可。
二、装箱与拆箱
装箱:把基本数据类型转换成对应的包装类型(Integer i = 1:自动装箱,源码中通过 Integer.valueOf(1)方法进行装箱)。
拆箱:把包装类型转换为基本数据类型(int j = i:自动拆箱,手动拆箱:int j = i.intVaule()也是自动拆箱的源码中所使用的方法)。
为什么有了基本数据类型,还需要包装类型:因为Java是面向对象的语言,而基本数据类型不具备现象对象的特性(null等)。
三、实现一个拷贝文件的工具类使用字节流还是字符流
我们拷贝的文件不确定是只包含字符流,有可以能有字节流(图片、声音、图像等),为考虑到通用性,要使用字节流。
四、介绍下线程池
JDK5 中增加了并发库,为 Java 线程的管理和使用提供了强大的便利性。java.util.current 包中提供了对线程的优化和管理的各项操作,该包提供了线程的运行,线程池的创建,线程声明周期的控制。
Java 通过 Executors提供四个静态方法创建四种线程池,分别是:
【1】newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需求,可灵活回收空闲线程,若无可回收,则创建新线程。
【2】newFixedThreadPool:创建一个定长线程池,可以控制最大线程并发数,超出的线程会在队列中等待。
【3】newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。
【4】newSingleThreadExecutor:创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行。
线程池(数据库连接池类似)的作用?
【1】限定线程的个数,不会导致由于线程过多导致系统运行缓慢或者崩溃。
【2】线程池不需要每次都去创建和销毁,节约资源。
【3】线程池不需要每次都去创建,提高响应时间。
五、JSP和 Servlet 有哪些相同点和不同点
Jsp 继承了 HttpServlet 所以 Jsp 是 Servlet 技术的扩展,所有的 Jsp 文件编译就是一个 Servlet,JVM 只识别 Java 的类,不能识别 Jsp 代码,Web 容器将 Jsp 的代码编译成 JVM 能够识别的 Java 类。Servlet 如果要实现 Html 功能,必须使用 Writer 输出对应的 Html 标签,比较麻烦。而 Jsp 的情况是 Java 和 Html 可以组合成一个名为 .jsp 的文件,做界面展示比较方便而嵌入逻辑比较复杂。
Jsp 与 Servlet 主要的不同点在于 Jsp 侧重于视图,Servlet 主要用于控制逻辑。Servlet 中没有内置对象,Jsp 中的内置对象必须通过 HttpServletRequst 对象、HttpServletResponse 对象以及 HttpServlet 对象得到。
六、简单介绍一下关系数据库三范式
范式就是规范,就是关系型数据库在设计表时,要遵循的三个规范。要想满足第二范式必须先满足第一范式,要满足第三范式必须先满足第二范式。
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。列数据的不可分割
第二范式(2NF)要求数据库表中的每个行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。(主键)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。(外键)
反三范式,有的时候为了效率,可以设置重复或者可以推导出的字段。例如:订单(总价)和订单项(单价)
七、Mysql 数据库的默认的最大连接数
为什么需要最大连接数?特定服务器上面的数据库只能支持一定数目同时连接,这时候我们一般都会设置最大连接数(最多同时服务多少连接)。在数据库安装时都会有一个默认的最大连接数为100。
【1】可以通过设置 my.ini 配置文件中的如下属性进行设置:
max_connections=100
【2】可以通过命令进行设置:这种方式有个问题,就是设置的最大连接数只在 Mysql 当前服务进程有效,一旦 Mysql 重启,又会恢复到初始状态。因为 Mysql 启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。
mysql>show variables like 'max_connections';(查可以看当前的最大连接数)
msyql>set global max_connections=1000;(设置最大连接数为1000,可以再次查看是否设置成功)
八、说一下 Mysql 和 Oracle 的分页
Mysql是使用关键字 limit 来进行分页的 limit offset,size 表示从多少索引去多少位。Oracle 的分页,使用三层嵌套查询。
// MySql 分页语句
String sql = "select * from students order by id limit " + pageSize*(pageNumber-1) + "," + pageSize;
// Oracle 分页语句
String sql =
"select * from " +
"(select *,rownum rid from (select * from students order by postime desc)
where rid<=" + pagesize*pagenumber + ") as t" +
"where t>" + pageSize*(pageNumber-1);
九、简单讲一下数据库的触发器的使用场景
触发器语法:
CREATE [OR REPLACE] TRIGGER 触发器名称 {BEFORE|AFTER} {DELETE|INSERT|UPDATE[OF 列名]} ON 表名 [FOR EACH ROW [WHEN(条件)]] PLSQL块
触发器分类:
● 行级触发器:行级触发器作用的每一条记录,都会被触发,在行级触发器上使用 :old和 :new伪记录变量识别值的状态
● 语句级触发器:在指定的操作之前或者操作之后执行一次,不管这条语句影响了多少行,只执行一次。
语句实操:
-- 1、:old和:new 代表同一条记录
-- 2、:old 表示操作该行之前,这一行的值。
-- :new 表示操作改行之后,这一行的值。
--创建触发器
create or replace trigger checksalary
before update
on temp
for each row
begin
if :new.sal < :old.sal then
raise_application_error("将薪");
end if;
end;
十、简单讲一下数据库的存储过程的使用场景
我们可以将存储过程理解为编程中的方法,存储过程和方法一样有参数和返回值。是为了完成特定功能的SQL指令集,经编译后存储在数据库中,用户通过指定存储过程的名字并给指定参数来调用执行它。
存储过程语法:
CREATE
[
OR REPLACE]
PROC[EDURE] 存储过程名
@参数1 [数据类型]=[默认值] [OUTPUT]
@参数2 [数据类型]=[默认值] [OUTPUT]
AS
SQL语句
EXEC 过程名[参数]
存储过程的优点:
【1】存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度。
【2】通常,复杂的业务逻辑需要多条 SQL 语句。这些语句要分别地从客户机发送到服务器,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载。
【3】存储过程创建一次便可以重复使用,从而可以减少数据库开发人员的工作量。
【4】安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用 EXECUTE 权限调用存储过程,无需拥有访问底层数据库对象的显式权限。
语句实操:
--1)、带输入输出参数
create or replace procedure proc_office --存储名称
@id int,@name varchar(20) output --(参数名 参数类型 [传出值:output]
as
begin
select @name=name from db where id=@id --sql语句
end
declare @houseName varchar(20) --声明一个变量,获取存储过程传过来的值
execute proc_office 4,@houseName output --执行 存储名称 输入参数 输出参数带有output
select @houseName --显示值
--2)、带返回值
create or replace procedure proc_office_info --存储名称
@id int
as
begin
if(select name from db where id=@id)=null --sql语句
begin
return -1
end
else
begin
return 1
end
end
declare @houseName varchar(20)
exec @houseName=proc_office_info 2
print @houseName
十一、简单介绍一下 Activiti
Activiti 是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速,稳定的 BPMN2流程引擎。它易于与 Spring集成使用。主要要在OA中,把线下流程放到线上。 把现实生活中一些流程固话定义到系统中,然后通过输入表单数据完成业务。例如:他可用在OA系统的流程管理中:请假流程 小于三天,一级主管审批,大于三天二级才能审批。
十二、编写一个 Servlet
【1】Servlet 与普通的 Java 程序的区别:Servlet 本质上就是一个 Java 类;Servlet 类必须实现接口 javax.servlet.Servlet 接口;运行在 Web 容器中,Tomcat 就是一个 Web 容器;能够接收浏览器发送的请求,并且做出响应给浏览器;
【2】编写 Servlet 的步骤:写一个类继承于 HttpServlet,HttpServlet 是个抽象类它已经实现了 Servlet 接口; 重写 doGet 或doPost 方法,分别处理表单的 get 或 post 请求;如果直接在浏览器输入地址访问,使用的是 get 方法;编写 web.xml 配置文件,对 Servlet 进行配置或者通过 @WebServlet("/xxx"),才能通过浏览器来访问。
//如果web.xml中没有配置时,就添加此注解
@WebServlet("/xxx")
public class DemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
如果使用 web.xml 配置,配置信息如下:
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.spring.web.servlet.DemoServlet </servlet-class><!--我的的servlet类-->
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern><!--请求连接-->
</servlet-mapping>
【3】 也可以实现最基本的 Servlet 接口。
public class servlet implements Servlet
//初始化方法,创建时加载
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//调用时加载 里面对 doPost doGet 等进行处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
//销毁时加载
@Override
public void destroy() {
}
}
----关注公众号,获取更多内容----
Java面试——专业技能的更多相关文章
- Java面试系列
如果你的面试简历是如下这样写的,请务必准备回答下面的所有问题. 面试职位:Java高级工程师 专业技能: (1)牢固掌握Java基础知识,如集合.并发.I/O等,并对Java源码有一定的研究. (2) ...
- Java面试总结(面试流程及核心面试题)
Java面试流程及核心面试题 面试整体流程 1.1 简单的自我介绍 我是xxxx,工作xxx年.我先后在xxxx公司.yyyy公司工作.先后做个xxxx项目.yyyy项目. 1.2 你简单介 ...
- java面试①整体流程
http://www.toutiao.com/i6463396763549041166/ 1.1 简单的自我介绍 我是xxx工作了xx年,在xx公司,做过xx项目, 1.2你简单介绍一下xxx项目 为 ...
- 作为一名Java开发工程师需要掌握的专业技能
在学习Java编程完之后,学员们面临的就是就业问题.作为一名Java开发工程师,企业在招聘的时候,也是有一定的标准的. 为了帮助大家更好的找到适合自己的工作,在这里分享了作为一名Java开发工程师需要 ...
- JAVA面试精选【Java基础第一部分】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...
- java 面试
115个Java面试题和答案——终极列表(上) 本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一 ...
- JAVA面试精选
JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对 ...
- Java面试指导
Java面试指导 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊 ...
- Java面试 32个核心必考点完全解析
目录 课程预习 1.1 课程内容分为三个模块 1.2 换工作面临问题 1.3 课程特色 课时1:技术人职业发展路径 1.1 工程师发展路径 1.2 常见技术岗位划分 1.3 面试岗位选择 1.4 常见 ...
- Java 面试-- 1
JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了 ...
随机推荐
- 20202411 2020-2021-2 《Python程序设计》实验一报告
20202411 2020-2021-2 <Python程序设计>实验一报告 课程:<Python程序设计> 班级: 2024 姓名: 陈书桓 学号:20202411 实验教师 ...
- mumu模拟器pin码忘记,如何找回
1.进入mumu安装目录:D:\Program Files (x86)\MuMu\emulator\nemu\vmonitor\bin 2.通过cmd进入mumu的bin目录,输入命令:adb_ser ...
- mysql安装及可视化界面
Mysql下载安装 官网下载链接 https://dev.mysql.com/downloads/mysql/ 可以选择之前的版本 我一开始下的8.0.21但安装的时候报错说找不到VCRUNTIME1 ...
- Hadoop编程——Java编写MapReduce:WordCount案例
一.MapReduce简介 MapReduce是一种面向大数据平台的分布式并行计算框架,它允许使用人员在不会分布式并行编程的情况下,将程序运行在分布式系统上.它提供的并行计算框架,能自动完成计算任务的 ...
- Leetcode61
!!Given the head of a linked list, rotate the list to the right by k places.!! # Definition for si ...
- ActiveMQ的基本使用
优点:消息中间件主要解决了各个模块异步调动问题,解除了模块之间的耦合,提高了运行的性能.一.点对点方式生产者1.创建连接工厂ActiveMQConnectionFactory 基于TCP协议Activ ...
- xShell执行js脚本
var CMD = 'ls'; var INTERVAL = 1; var MAX = 5; var CR = String.fromCharCode(13); var LF = String.fro ...
- 人森第一个iOS app,写给我家baby的!纪念一下
用python写的,对于非专业iOS开发来说,py是个不错的选择,使用beeware框架,感觉和写前端差不多
- 小梅哥课程学习——串口发送应用之发送数据(适用于板级验证,时间间隔位100ms)
//此代码的注意事项,首先这个代码不能仿真成功会出现一定的时间延迟, //因为在做板级验证的时候把时间改成了100ms发送一次,要想仿真成功,把时间改成499999 //使用上一节课设计的发送模块,设 ...
- Hbase操作与编程使用
1.任务: 列出HBase所有的表的相关信息,例如表名: 3. 编程完成以下指定功能(教材P92下): (1)createTable(String tableName, String[] fields ...