欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面试问题汇总 面试java

程序员文章站 2022-03-31 23:33:09
...
   好久没有面试,前天面试一家it企业,一上来部门老大接连问技术问题,无非是一些常用技术点,由于我生小孩之前一直做的讲师职业(有两年多),现在带小孩休息了好长时间,好些问题没用就遗忘了,反正就是感觉技术落了很久,一时想捡起来有些困难,然后,然后就没有然后了,总之被血洗了很惨,总的来说也是一次经历吧,成长的一部分,以后多总结吧
     突然觉得,有了小孩之后自己的时间更少了,不知道这一次的选择是否正确,想要坚持走编程这条路,不知道自己是否有好的机遇,遇到自己想要的工作状态
     废话不多说了,再过会 宝宝又醒了


1、 java中创建对象有哪几种方式
四种方式 
New关键字
运用反射手段,调用java.lang.Class()或者java.lang.reflect.Constructor类的newInstance()实例方法
调用对象的clone方法
运用反序列化手段,调用java.io.ObjectInputStream的readObject方法

问题扩展:java的反射中有几种创建对象的方法
1、 通过Class对象的newInstance方法(getClass()或。Class),但只能去默认的构造方法
2、 通过class对象的getConstructor()取得构造对象,在通过Constructor类调用newInstance方法
3、 通过Array.newInstance(),不过仅限于数组对象

2、 抽象类与接口有什么区别,接口能继承抽象类吗
接口是公开的,不能有私有的方法,全部都是抽象方法,抽象类可以有私有方法,可以有抽象方法和非抽象方法
实现接口要实现所有的方法,继承抽象类可以有选择性的重写方法
一般的应用,最顶层是接口,然后是抽象类,其次才是实现类
接口可以实现多重继承(一个类可以实现多个接口,但是一个类只能继承一个类)
Java是单继承,多实现的机制

接口不能继承抽象类,因为接口中全是抽象方法,抽象类中有非抽象方法,这一点上有冲突

3、 序列化如何实现,有什么好处
序列化就是一种用来处理对象流的机制,对象流就是将对象的内容进行流话,方便网络传输,可以对流进行读写操作
实现序列化,首先将对象类实现Serializable接口(标注该对象可被序列化), 使用一个输出流FileOutPutStream构造出 ObjectOutPutStream ,其中有一个writeObject(obj)文件写入方法,如果是读对象流则被称做反序列化,FileInputStream,构造ObjectInputStream,readObject
方便在网络传输时,对象之前的传输,例如 网络传输时可以直接传字符串,但是如果传对象就需要用到序列化和反序列化,首先通过对象序列化将对象转成字节流,进行传输,接收方得到字节流之后,再反序列化转成对象

4、 Oracle中的分页如何实现,写sql语句
Select * from (
Select tb1.* ,rownum rn (
Select * from table1   --该处写查询条件 where 1=1
     )  tb1 where rownum<=20
  ) where rn>=10

SELECT* FROM
(
SELECTA.*, ROWNUM RN
FROM(SELECT* FROMTABLE_NAME) A
WHEREROWNUM <= 40
)
WHERERN >= 21
5、 文件递归表字段设计
常规应用,文件夹及文件的操作,菜单操作(从属关系)
表1 :id, parentid(父级id *菜单为空) level (节点级别) path (菜单路径),remark  备注

6、 说出JQuery中有哪些选择器,至少说5种
# 根据id获取元素
. 根据class样式获取元素
* 选择所有元素
+ 相邻元素
》子元素
~ 同胞元素 例如$("#prev ~ div")       同胞选择器,该选择器返回的为id为prev的标签元素的所有的属于同一个父元素的div标签


   $("#main > *")          选择id值为main的所有的子元素
基本过滤选择器  :
$("tr:first")               选择所有tr元素的第一个

$("tr:last")                选择所有tr元素的最后一个

$("input:not(:checked) + span") 

过滤掉:checked的选择器的所有的input元素
$("tr:even")               选择所有的tr元素的第0,2,4... ...个元素(注意:因为所选择的多个元素时为数组,所以序号是从0开始)

$("tr:odd")                选择所有的tr元素的第1,3,5... ...个元素

$("td:eq(2)")             选择所有的td元素中序号为2的那个td元素

$("td:gt(4)")             选择td元素中序号大于4的所有td元素

$("td:lt(4)")              选择td元素中序号小于4的所有的td元素

$(":header")            选择h1、h2、h3之类的
内容过滤选择器:

$("div:contains('John')") 选择所有div中含有John文本的元素

$("td:empty")           选择所有的为空(也不包括文本节点)的td元素的数组

$("div:has(p)")        选择所有含有p标签的div元素

$("td:parent")          选择所有的以td为父节点的元素数组

可视化过滤选择器:

$("div:hidden")        选择所有的被hidden的div元素

$("div:visible")        选择所有的可视化的div元素
属性过滤选择器:

$("div[id]")              选择所有含有id属性的div元素

$("input[name='newsletter']")    选择所有的name属性等于'newsletter'的input元素

$("input[name!='newsletter']") 选择所有的name属性不等于'newsletter'的input元素

$("input[name^='news']")         选择所有的name属性以'news'开头的input元素

$("input[name$='news']")         选择所有的name属性以'news'结尾的input元素

$("input[name*='man']")          选择所有的name属性包含'news'的input元素

$("input[id][name$='man']")    可以使用多个属性进行联合选择,该选择器是得到所有的含有id属性并且那么属性以man结尾的元素

子元素过滤选择器:

$("ul li:nth-child(2)"),$("ul li:nth-child(odd)"),$("ul li:nth-child(3n + 1)")

$("div span:first-child")          返回所有的div元素的第一个子节点的数组

$("div span:last-child")           返回所有的div元素的最后一个节点的数组

$("div button:only-child")       返回所有的div中只有唯一一个子节点的所有子节点的数组

表单元素选择器:

$(":input")                  选择所有的表单输入元素,包括input, textarea, select 和 button

$(":text")                     选择所有的text input元素

$(":password")           选择所有的password input元素

$(":radio")                   选择所有的radio input元素

$(":checkbox")            选择所有的checkbox input元素

$(":submit")               选择所有的submit input元素

$(":image")                 选择所有的image input元素

$(":reset")                   选择所有的reset input元素

$(":button")                选择所有的button input元素

$(":file")                     选择所有的file input元素

$(":hidden")               选择所有类型为hidden的input元素或表单的隐藏域

表单元素过滤选择器:

$(":enabled")             选择所有的可操作的表单元素

$(":disabled")            选择所有的不可操作的表单元素

$(":checked")            选择所有的被checked的表单元素

$("select option:selected") 选择所有的select 的子元素中被selected的元素



7、 Hibernate与mybatis的区别?
Mybatis是半自动框架,主要思想是 sql mapping,而Hibernate是全自动,主要思想是OR Mapping
Mybatis对于sql调优更灵活,能直观看到sql,而Hibernate是通过对象自动生成sql,调优不方便,个人觉得mybatis好用一些
Hibernate优点 移植数据库比较方便,Mybatis麻烦,


8、 Struts2与springMVC的区别?

A、 Struts2是类级别的拦截 (由于Struts2的拦截器比较多,这块比较耗时),而springMVC是方法级别的拦截
B、 SpringMVC比Struts2稍快,Struts2是基于类,每一次请求都实例化一个Action,每个Action都注入属性,SpringMVC是方法级别拦截,每次拦截方法之后根据参数上的注解把request数据注入
C、 参数传递,Struts2在接受参数时,是用属性接受参数,说明参数让方法共享
D、 Struts更加符合OOP的思想,SpringMVC比较谨慎,是在servlet上扩展
E、 拦截器的实现机制,Struts是配置自己的拦截器,SpringMVC使用AOP的思想,Struts配置上多一些,SpringMVC更容易实现restful方式
F、 SpringMVC验证是个亮点,支持JSR303 ,处理Ajax请求更方便,只需一个注解@ResponseBody

@RequestMapping(value="/whitelists")
public String index(ModelMap map) {
Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId());
List<Group> groupList = groupManager.findAllGroup(account.getId());
map.put("account", account);
map.put("groupList", groupList);
return "/group/group-index";
}

// @ResponseBody ajax响应,处理Ajax请求也很方便
@RequestMapping(value="/whitelist/{whiteListId}/del")
@ResponseBody
public String delete(@PathVariable Integer whiteListId) {
whiteListManager.deleteWhiteList(whiteListId);
return "success


9、 Struts 在处理请求时,每次请求都重新创建对象(多例)还是只创建一个(单例)?
每次请求都创建一个新对象

10、 Spring中有哪些设计模式,你用过哪些?
最典型的 工厂模式,*类是BeanFactory
单例模式
适配器模式 Adapter
包装器
代理模式
观察者模式Observer
策略
    
11、 Spring中如何实现代理模式(AOP)?
12、 Spring中如何配置事务?


13、 分层中,事务是在哪一层,在service层吗,如果service层中有A,B两个方法,都是有事务的,A方法调用B方法,在Action中调用A方法,那么整个过程是几个事务
14、 Hibernate中能写sql语句吗,hql语句与sql语句有什么区别

Hql操作的是对象,Sql操作的是表字段,在Hibernate中也可以写sql语句
15、 数组和链表(List集合)有什么区别,哪个效率高?
数组 定义简单 是连续的变量存储,使用时必须分配实际大小,有可能浪费内存空间  删除 和添加 麻烦
链表 内部定西复杂 不连续存储,动态分配内存 随时加入或删除变量

16、 Map是有序的吗?Map中线程安全的是哪个?
Map是无序的,HashMap线程不安全  是Map接口的实现类
Hashtable是线程安全,是Collections的子类

17、 StringBuffer与StringBuilder的区别?
执行速度上StringBuilder》StringBuffer
StringBuilder是线程不安全的   StringBuffer是线程安全的

18、 什么是注解,注解有什么好处,如何使用?
19、 get和post提交方式的区别,当用get提交时,如何解决中文乱码问题
       能回答上
20、 数据结构中 二分法查找有一个什么特点?
注意 被查找的对象必须是有序的
相关标签: 面试 java