1.请你回答一下protected,public,private的区别
1.public:可以被所有其他类访问
2.private:只能被自己访问和修改
3.protected:自身,子类及同一个包中类可以访问
2.请你说一下封装,继承,多态
3.请你介绍一下HashMap,HashTable,ConcurrentHashMap
4.java中基本的数据类型
byte、short、int、long、float、double、char、boolean
5.Java中一个字符占多少字节,int,long,double占多少字节?
int 4, long 8 double 8个字节
6.静态方法和实例方法的区别?
静态方法在访问本类成员时,只能访问静态成员(静态成员和静态方法)不允许访问实例成员变量和实例方法。实例方法没有此限制。
7.java中异常有哪几类?分别怎么使用?
Throwable包含两类,一类 Error 一类 Exception
Error异常,是程序无法处理的,如果outOfMemoryError(虚拟机扩展栈是无法申请到足够的空间)等异常发生时,java虚拟机一般会终止线程。
Exception包含了运行时异常和非运行时异常
运行时异常也叫非检查异常,一般是在程序运行的时候会发生,所以程序可以捕捉到,也可以不捕捉,这些错误一般由程序的逻辑错误引起的,建议不要 用try 。。。catch捕捉。应该从逻辑角度去尽量避免。(运行时异常是可能被程序员避免的异常。与检查型异常相反,运行时异常可以在编译时被忽略。)
非运行异常就是检查异常, 这些异常是必须检查处理的, 否则不能编译通过,如IOEception,SQLException。(最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略。)
Error与Exception区别:
Error通常是灾难性的错误,因为发生该错误的时候,程序是无法控制的,JVM会选择终止线程;
Exception通常是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
异常处理:五个关键字:try、catch、finally、throw、throws
常见的问题与建议:
所有的异常中最常见的应该就是空指针异常NullPointerExpetion,对于空指针异常应该遵循早暴露,早修复的原则,禁止使用catch隐藏该异常
应该养成良好的习惯来降低NullPointerException的产生,例如:
// 成员变量初始化时应该使用""而不是nullprivateStringname="";// 返回数组的时候,应该返回空数组而不是nullreturnnewString[0]// 如果非要用null作为返回值,应该是用Optional.empty();returnOption.empty();//这样调用方需要使用Optional.isPresent()判断是否有结果
8.常见的集合类有哪些,比如list如何排序?
java中常用的集合类:Set,List,Map
Map是已键值对来存储的,Set,List集成collcation,collcation是对象的集合。Set是无序不重复,List有序不重复。
一般我们常见的是 hashSet,treeSet,Arraylist,Linkedlist,hashmap等,ArrayList和LinkedList是常见的集合实现类了,一个是基于数组的原理储存元素,一个是试用链表的形式储存元素。说道排序的话,可以用collections这个的方法sort来进行排序,
实现方法是,讲要排序的参数传入,此时list对象必须实现comparable接口,然后sort会已升序的形式进行排序。
第二种方式是传入list作为第一个参数,同事最佳一个comparator的实现类作为第二个蚕食,然后sort方法会根据comparetor接口的实现类逻辑,按升序排序。
19.内存溢出是怎么回事?
内存溢出通俗理解就是内存不够,在计算机程序中就是 开辟的内存空进没有得到释放。
内存溢出分为三种可能:
1.用来保护加了class一些信息发生溢出错误,解决办法无非就是增加空间分配了。(启动程序加载信息较大)
2.内存中堆区,主要存储对象,一般来说 如果定义的对象没有用到,会定时的释放空间,如果程序设计问题,导致了可达到但是没有用,会产生问题,解决办法是,1.检查程序,减少大量重复创建对象的死循环,减少内存泄漏。2.增加java虚拟机中Xms(初始堆)和Xmx(最大堆大小)参数的大小。
3.内存中的栈空间,主要用来存放方法和变量,参数等临时数据,一般情况是非配的空间小了,或者递归成数太多占用你够了太多栈帧导致溢出,解决方法是 1.可以增加线程栈大小,当然程序优化是最好的。
10.HashMap数据结构,GC算法,CMS,GI的原理
11. hashCode方法的作用?
在hashMap中使用,把一个对象变成一个整型。hashCode规范,如果两个对象的equals返回true,那他们的hashCode必须相等,但是hashCode相等,不一定equals不一定相等。
12.创建一个类的实例都有那些办法?
创建对象的方法有4种:
1.使用new 关键字
2.利用java的放射机制
3.实现cloneable接口使用的克隆方法
4.利用java程序化和反程序化 实现创建对象。
13.object类中有哪些方法?列举3个以上
1.equals方法:一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
2.wait方法:wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。调用该方法后当前线程进入睡眠状态,直到以下事件发生:
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
3.notify方法:该方法唤醒在该对象上等待的某个线程。
4.notifyAll方法:该方法唤醒在该对象上等待的所有线程。
14.==和equals的区别?
1.首先的区别是,equals是方法,而==是操作符。
2.对于==比较的是基本数据类型,那么比较的是两个基本数据类型的值是否相等。如果==是比较的两个对象,那么比较的是两个对象的引用,也就是两个对象是否为同一个对象,并不是比较对象的内容。
3.对于引用类型的变量才有equals方法,只要是用于两个对象之间,检测一个对象是否等于另一个对象。
15.final/finally/finalize 的区别?
1.final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
2.finally是异常处理语句结构的一部分,表示总是执行。
3.finalize是Object类的一个方法,使用此方法在垃圾收集器将对象从内存中清楚之前做必要的清理工作,所有类都可以继承,子类可以覆盖,来整理系统资源或者执行其他的清理工作。
16.String/StringBuffer/stringBuilder的区别,扩展再问他们的实现?
1.(本质)String是字符串常量,Stringbuffer和Stringbuilder是字符串缓冲变量,stringbuffer和stringbuilder方法和功能完全是等价的。只是stringbuffer中的方法采用的是synchronize关键字来进行修饰,因此是线程安全的,而stringbuilder没有这个关键词修饰,所以可以看成是线程不安全的。
2.(变化)string类型的字符串对象是不可变的,直到这个对象被销毁。stringbuffer和stringbuilder类型的字符串是可变的。
3.(使用场景)在字符串不经常变化的场景中可以使用string类,比如常量的声明,少量的变量运算。
在频繁进行字符串运算(拼接,替换删除),并且运行在多线程的环境中,则可以使用stringbuffer,如XML解析,HTTp参数解析和封装,如果运行在单线程环境中,可以用stringbuilder,如SQL语句的拼装,JSON封装。
17.super和this的区别?
1.super引用当前对象的父类中的成员.在子类中调用父类的构造方法,this代表当前对象名,在本类中调用本类的其他构造方法。
2.this()和super()都指的是对象,所有不能再static环境中使用,包括static的变量,方法,语句块。
3.this和super都要放在一个构造函数的第一行,并且不能同时出现。
从本质上讲,tihs是一个指向本对象的指针,super是个关键字。
18.抽象类和接口的区别:
1.抽象类可以有具体的方法和属性,接口只能有抽象方法和不变常量
2.抽象类是抽象类别,接口是抽象功能
3.抽象类可以有私有方法,接口不能有私有方法
4.抽象类只能单一集成,接口可以多重实现
5.抽象类和接口的方法必须被全部实现,否则继承者也是抽象类。
19.是怎么理解接口的?
接口就是一个程序里负责在不同模块之间传输或接收数据并做处理的类或者函数。
----------------------------------------------------------------------------------------------------------------------------------------------------
15.java里面用对象作为key需要注意些什么?如何实现hashcode?
12.linkingBlockingQueue和ArrayBlockingQueue的区别,他们的应用场景?
12.java有自己的内存机制,为什么还存在内存泄露问题呢?13.servlet的生命周期?
https://www.cnblogs.com/zgq123456/p/11105257.html