Java程序猿想超神,我来回答这些问题(java基础)

1、实例方法和静态方法有什么不一样?
实例方法是对象方法,由对象调用,在使用使用时方法才会被加载进内存
静态方法是在类被加载是被加载进内存,由类名直接进行调用
所以在静态的方法中只可以调用静态的方法或成员,因为静态方法的加载时间早于对象创建,所以在静态方法加载时,非静态方法还不存在呢,所以不可以调用
参考:https://blog.csdn.net/biaobiaoqi/article/details/6732117

2、Java中的异常有哪几类?分别怎么使用?
java标准库中见了一些通用的异常,以Throwable为顶层父类,分为两大类

错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心
这里写图片描述
根据Javac对异常的处理,可以分两类:
非检查异常:Error 和RuntimeException以及他们的子类,这些错误在编译时不会报错,一般是由于代码问题造成的
检查异常:IOException对于代码运行环境可能产生的报错
参考:https://blog.csdn.net/qq_34309305/article/details/79202929

3、常用的集合类有哪些?比如List如何排序?
List,map,set
set、list继承自Collection类,是一组对象的集合,Set是一组无序且不重复数据的集合,list是有序且允许重复的
map则是另一类集合,以键值对的形式存储
list有自己的sort()方法,允许自定义comparator接口,实现自定义排序

4、ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和各自适应的场景是什么?
ArrayList是数组实现,连续存储,适合应用于查询,修改操作更多的环境
LinkList是双向链表实现,不连续存储,适合应用于增加、删除操作更多的环境
如果是在集合末尾的增删,ArrayList会更为适合

5、内存溢出是怎么回事?
内存溢出分为三种情况:
- Permanent Generation space异常,是指方法区用来保存加来的Class的一些信息,在程序运行期间属于永久占用的,Java的GC不会对他进行释放(在一定的条件下也会GC,但是条件很苛刻,其上的GC主要针对运行常量池和已加载类的卸载),所以如果启动的程序加载的信息比较大,超出了这个空间的大小,就会发生溢出错误
- 堆溢出: 用来存放对象,由于对象太多,而造成堆溢出
- 栈溢出:用来存放方法中的变量,参数中的临时数据
参考:https://blog.csdn.net/ITzhangdaopin/article/details/78716180

6、ClassLoader有什么用?
ClassLoader是类加载器,加载类到JVM中
类加载器有三种:
- Bootstrap ClassLoader 引导类加载器,是负责加载关键的Java类
- ExtClassLoader 扩展类加载器,负责加载java的扩展库
- AppClassLoader 用来读取所有的对应在java.class.path系统属性的路径下的类
classLoader的一个关键特性是双亲委托,依我现在的理解就是一个APPClassLoader查找资源时,先看本地缓存有没有,没有则向上(父加载器)委托,若最后BootstrapClassLoader的缓存区也没有,那边从他指定的文件目录下查找,然后逐层向下(子加载器)查找,查找成功则返回,这样做避免了一个问题,是用户是无法定义一个和java核心类一样的类的,例如定义一个String类

7、==和equals的区别?
java中数据类型分为基本数据类型和复合数据类型
对于基本数据类型:byte,short,int,long,float,double,char,boolean,这样使用==是直接判断对应值是否相等
而对于复合类型:String,继承自Object的类,它在判断时使用自定义的equals方法来判断,使用==是判断地址是否相等

8、hashCode方法的作用?
hashCode的作用是判断两个元素是否相等,是equals的互补。
例如:我们在set中元素是不重复,而为了保证不重复,我们不会每次增加一个元素,都去从头用equals()检查一遍,那样太慢了,所以我们使用哈希算法(散列算法),我们使用hashcode来确定元素的位置,如果该位置没有元素则保存,如有,则调用equals方法判断,相等则不保存,不相等则散列其余位置

9、Object类中有哪些方法?列举3个以上。
equals(),hashCode(),clone()浅拷贝
参考 https://blog.csdn.net/qq_16811963/article/details/51672688

10、NIO是什么?适用于何种场景?
NIO是Java的New IO,相对于之前的Old IO,NIO适用于高并发的场景
参考 https://blog.csdn.net/qq_32635069/article/details/80216311

11、HashMap数据结构、扩展策略,Hash冲突攻击如何防范,如何实现线程安全的HashMap?
HashMap的数据结构是一个数组,数组中每个元素的类型是一个单向链表
扩展策略:hashMap有两个初始值,初始容量、加载因子(默认0.75)
hashMap的hash值冲突:通过拉链法解决,同一个hash值下对应的是一个链表,相同hash值,但是是不同key的,在next后存储,如果相同key值,则将原有的value值修改为新的value值
参考 http://www.cnblogs.com/skywang12345/p/3310835.html
https://www.cnblogs.com/chohyee/p/7404209.html
线程安全:
Hashtable
ConcurrentHashMap
Synchronized Map
参考 http://www.importnew.com/21396.html

12、JVM内存结构,GC算法,CMS、G1的原理
JVM内存结构:
这里写图片描述

参考 https://www.jianshu.com/p/e53dd878e325

13、NIO模型,select/epoll的区别,多路复用的原理
NIO的模型
这里写图片描述
多路复用的原理是:一个非阻塞IO的线程,一个轮询的selector这样来完善整个流程
select和epoll:https://www.cnblogs.com/Anker/p/3265058.html
14、Java中一个字符占多少个字节,扩展再问int, long, double占多少字节
char 2个,int 4个 long 8 个 double 4字节

15、创建一个类的实例都有哪些办法?

  • new
  • classLoader
  • clone(原型模式)

16、final/finally/finalize的区别?
final 是变量、方法修饰符,表示此方法不可被重写或变量不可以被改变值
finally 和try catch相搭配使用,表示最后要被执行的操作
finaliize 方法是在垃圾收集器删除对象之前对这个对象调用的,进行必要的清理工作

17、LinkingBlockingQueue与ArrayBlockingQueue的区别,他们的适用场景?
Linked是无界的,无界缓存等待队列
Array是有界的,有界缓存等待队列
参考 https://www.cnblogs.com/feiyun126/p/7686302.html

18、Session/Cookie的区别?
Cookie是采用客户端保持状态的方案,内容存放在客户的浏览器上,不安全,cookie,未设置过期时间一般保存在内存中,成为会话Cookie,一旦浏览器关闭,这个Cookie也就关闭;若设置了过期时间,则是保存在硬盘上,下次依然会有效
Session是采用服务器保持状态的方案,内容存放在服务器上,更为安全,当有一个客户端要与服务器建立连接时,服务器会检索请求是否包含一个session标识,若包含,则将这个session检索出来

19、String/StringBuffer/StringBuilder的区别,扩展再问他们的实现?
String 字符串常量 操作少量数据
StringBuffer是线程安全 字符串变量,适用于多线程操作大量数据
StringBuilder是线程不安全的 字符串变量,适用于单线程操作大量数据

20、Servlet的生命周期?
这里写图片描述

21、如何用Java分配一段连续的1G的内存空间?需要注意些什么?
ByteBuffer.allocateDirect(1024*1024*1024);
注意内存溢出

22、Java有自己的内存回收机制,但为什么还存在内存泄露的问题呢?
java的内存泄漏主要由个人编码不认真造成,GC自动回收符合条件的内存空间,而有时你实例化一个对象,却没有将他置为null,造成他一直存在,这边出现了内存泄漏

23、Java里面用对象作为Key需要注意些什么? 如何实现hashcode?
注意重写hashCode方法和equals方法,清楚逻辑:如果对象equals为true,则hashCode为true,而hashCode为true,equals不一定为true

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值