Java最全面试题

模块一:

常用的java-api包。
答:java.lang ;Java.util ; java.io ;java.math 
String类中常用的方法。
答:length charAt subtring  equals
API接口开发的注意事项。
答:1.通用的数据交换格式
    2.安全问题
    3.良好的接口说明文档和测试程序
    4.接口、参数命名准确
    5.接口数据、状态
    6.安全问题
    7.良好的响应速度

模块二:集合和线程相关(重点)

HashMap、TreeMap、Hashtable、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的实现和区别。

答:(下次补充)


List、Map、Set三个接口,存取元素时,各有什么特点。
答:
1、list--可以有重复,有先后顺序,可以插队;存:add(Object)或者add(index,Object) 取:可以去第n个 get(n)或 迭代 所有元素;
2、set--不可以有重复,没有顺序之说;存:add()返回true表示插入成功,返回false表示插入失败 ;取: 只能 迭代 所有元素;
3、Map--双列,Map 保存key-value值,value可多值,key 不能重复,key比较使用equals;存:put(key,value) ;取:get(key),可以key的集合,也可以获取所有value的集合;

创建线程的几种方式。
https://blog.csdn.net/weixin_42228950/article/details/90312024
线程同步的方法。
https://blog.csdn.net/scgyus/article/details/79499650

wait和sleep区别。
答:   
1、sleep()方法属于Thread类,而wait()方法属于Object类;
2、sleep()方法会让程序暂停执行制定的时间,让出cpu给其他线程。但是它依然保持着监控状态,当制定的时间到了之后又会自动恢复运行状态;
3、调用sleep()方法的过程中,线程不会释放对象锁。
4、调用wait()方法时,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后此线程才会进入对象锁定池准备,获取对象锁进入运行状态;

Runnable接口和Callable接口的区别。
答:
1、Callable可以返回一个类型V,而Runnable不可以;
2、Callable能够抛出checked exception,而Runnable不可以;
3、Runnable是自从java1.1就有了,而Callable是1.5之后才加上去的;
4、Callable和Runnable都可以应用于executors。而Thread类只支持Runnable;
5、都是接口;
6、都可以编写多线程程序;
7、都采用Thread.start()启动线程;
如何实现线程安全。
三种方式:
第一种:同步代码块
第二种:同步方法
第三种:lock

模块三:框架相关(下次补充)

Mybatis#和$的区别

答:${}Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver#{}sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql?号占位符设置参数值,比如ps.setInt(0, parameterValue)#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()

Hibernate和Mybatis的区别。

Spring MVC和Struts2的区别。

为什么要用spring?
答:1.spring能够很好的和各大框架整合
2.spring通过IOC容器管理了对象的创建和销毁  工厂模式(设计模式)
3.在使用hiberna丶mybatis的时候,不用每次都编写提交事务的代码,可以使用spring的AOP来管理事务
 

模块四:

&和&&的区别。
答:
&是位运算符。&&是布尔逻辑运算符。
在运行上,&两边的条件都要判断(不管前面的是ture还是false),而&&先判断前面的,若为false,则后面的不再判断。

==和equals的区别。
答:
1、==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同 
2、==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
3、==指引用是否相同, equals()指的是值是否相同

int和Integer的自动拆箱/装箱相关问题。
答:
1、自动装箱实际就是基本数据类型自动转换为包装数据类型
2、自动拆箱实际就是包装数据类型自动转换为基本数据类型


IO(同步阻塞)和NIO(同步非阻塞)区别
答:
1、阻塞是指处于阻塞状态的时候,无法进行其他任务,只有等待当前任务完成的时候才能进行下一个任务,
例如当serverSocket创建好之后。非阻塞的话是不管当前任务完成没有,直接将其返回,然后进行下一个任务。
2、当实行一个同步IO的时候,使用线程池来完成同步操作,这时候线程直接需要来回切换(因为它是阻塞的)。所以如果用NIO的slecter的实现同步非阻塞的时候,slecter会根据一个key值去找寻相应执行的线程,避免了线程之间来回切换时候造成的开销
final、finally、finalize的区别
答:
1、final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。
2、finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
3、finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System的gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾。?
重载(Overload)和重写(Override)的区别。
答:
1、重载是类中发生,有多个方法名相同,形参列表不同的方法。与修饰符返回值无关。
2、重写是子类继承父类,子类对父类的方法进行重写,方法名返回值形参列表相同,方法体不同,方法修饰符的权限大于等于父类,返回值类型必须小于等于父类;
3、子类不能重写父类中的final修饰的方法;静态方法不能被重写为非静态方法。

String、StringBuffer和StringBuilder的区别。
答:
https://blog.csdn.net/weixin_42228950/article/details/91402632

单例模式的实现以及最优
答:
https://blog.csdn.net/weixin_42228950/article/details/90484720
排序的实现(冒泡、选择)
答:
https://blog.csdn.net/weixin_42228950/article/details/90171645

你可能感兴趣的:(框架)