“金九银十”指的是在9月、10月,尤其是9月是应届生求职、也是在职人员跳槽到更满意职位的黄金时期。求职、跳槽,说到底,本质上就是职场人员和工作职位匹配的过程,一个萝卜一个坑,此坑不适合,自有留爷处。
Java核心面试知识点整理,分享给大家。
但是,金九已到末尾,银十即将开启,时间不等人,机会错失不再,好好把握,争取一举拿下春招,顺利跳槽涨个薪。那么今天小编就分享一份“秋招JAVA面试手册”,望助正在准备面试的你一臂之力!本册共分为七大面试专栏,分别是性能优化、微服务、并发编程、开源框架、分布式等。
下面我们开始进入正文:
1、Java中会存在内存泄漏吗,请简单描述。
2、64位JVM中,int的长度是多数?
3、Serial与Parallel GC之间的不同之处?
4、32位和64位的JVM,int类型变量的长度是多数?
5、Java中WeakReference与SoftReference的区别?
6、JVM选项-XX:+UseCompressedOops有什么作用?为什么要使用?
7、怎样通过Java程序来判断JVM是32位还是64位?
8、32位JVM和64位JVM的最大堆内存分别是多数?
9、JRE、JDK、JVM及JIT之间有什么不同?
10、解释Java堆空间及GC?
11、JVM内存区域
答:
JVM内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。
线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而创建/销毁(在HotspotVM内, 每个线程都与操作系统的本地线程直接映射, 因此这部分内存区域的存/否跟随本地线程的生/死对应)线程共享区域随虚拟机的启动/关闭而创建/销毁。
直接内存并不是JVM运行时数据区的一部分, 但也会被频繁的使用: 在JDK1.4引入的NIO提供了基于Channel与Buffer的IO方式, 它可以使用Native函数库直接分配堆外内存, 然后使用DirectByteBuffer对象作为这块内存的引用进行操作(详见: Java I/O扩展)这样就避免了在Java堆和Native堆中来回复制数据, 因此在一些场景中可以显著提高性能。
12、程序计数器(线程私有)
13、虚拟机栈(线程私有)
14、本地方法区(线程私有)
15、你能保证GC执行吗?
16、怎么获取Java程序使用的内存?堆使用的百分比?
17、Java中堆和栈有什么区别?
18、描述一下JVM加载class文件的原理机制
19、GC是什么?为什么要有GC?
20、堆(Heap-线程共享)-运行时数据区
1、MySQL中有哪几种锁?
2、MySQL中有哪些不同的表格?
3、简述在MySQL数据库中MyISAM和InnoDB的区别
4、MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
5、CHAR和VARCHAR的区别?
6、主键和候选键有什么区别?
7、myisamchk是用来做什么的?
8、如果一个表有一列定义为TIMESTAMP,将发生什么?
9、你怎么看到为表格定义的所有索引?
10、LIKE声明中的%和_是什么意思?
答:%对应于0个或更多字符,_只是LIKE 语句中的一个字符。
11、列对比运算符是什么?
12、BLOB和TEXT有什么区别?
13、MySQL_fetch_array和MySQL_fetch_object的区别是什么?
14、MyISAM表格将在哪里存储,并且还提供其存储格式?
15、MySQL如何优化DISTINCT?
16、如何显示前50行?
17、可以使用多少列创建索引?
18、NOW()和 CURRENT_DATE()有什么区别?
19、什么是非标准字符串类型?
20、什么是通用SQL函数?
21、MySQL支持事务吗?
答:
在缺省模式下,MySQL是autocommit 模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,MySQL是不支持事务的。
但是如果你的MySQL表类型是使用InnoDB Tables 或 BDB tables 的话,你的MySQL就可以使用事务处理,使用SETAUTOCOMMIT=0 就可以使 MySQL允许在 autocommit 模式,在非autocommit 模式下,你必须使用COMMIT 来提交你的更改,或者用ROLLBACK来回滚你的更改。
22、MySQL里记录货币用什么字段类型好?
23、MySQL有关权限的表都有哪几个?
24、列的字符串类型可以是什么?
1、Tomcat的缺省端口是多少,怎么修改?
2、tomcat 有哪几种Connector 运行模式(优化)?
3、Tomcat有几种部署方式?
4、tomcat容器是如何创建servlet类实例?用到了什么原理?
5.tomcat如何优化?
6.内存调优
7.垃圾回收策略调优
7.共享session处理
8.添加JMS远程监控
9.专业点的分析工具有
10.关于Tomcat的session数目
11.监视Tomcat的内存使用情况
12.打印类的加载情况及对象的回收情况
13.Tomcat一个请求的完整过程
14.Tomcat工作模式?
1.在x Nginx中,解释如何在L URL中保留双斜线? ?
2.请解释e ngx_http_upstream_module的作用是什么?
3.请解释什么是K C10K问题?
4.请陈述s stub_status和 和r sub_filter指令的作用是什么?
5.解释x Nginx是否支持将请求压缩到上游?
6.解释如何在x Nginx中获得当前的时间?
7.用x Nginx服务器解释s-s的目的是什么?
8.解释如何在x Nginx服务器上添加模块?
9.请解释是否有可能将x Nginx的错误替换为2 502错误?
10.请解释你如何通过不同于0 80的端口开启Nginx?
11.请解释x Nginx服务器上的r Master和 和r Worker进程分别是什么?
12.请列举x Nginx服务器的最佳用途。
13.使用 “ 反向代理服务器 ”
14.在x Nginx 中,如何使用未定义的服务器名称来阻止处理请求?
15.请解释x Nginx如何处理P HTTP请求。
16.请列举x Nginx和Apache之间的不同点。
17.请列举x Nginx的一些特性。
1、在Java中守护线程和本地线程区别?
2、线程与进程的区别?
3、什么是多线程中的上下文切换?
4、死锁与活锁的区别,死锁与饥饿的区别?
5、Java 中用到的线程调度算法是什么?
6、什么是线程组,为什么在Java中不推荐使用?
7、为什么使用Executor框架?
8、在Java中Executor和Executors的区别?
9、如何在Windows和Linux上查找哪个线程使用的CPU时间最长?
10、什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?
11、Java Concurrency API中的Lock接口(Lock interface)是什么?对比同步它有什么优势?
12、什么是Executors框架?
13、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?
14、什么是Callable和Future?
15、什么是FutureTask?使用ExecutorService启动任务。
16、什么是并发容器的实现?
17、多线程同步和互斥有几种实现方法,都是什么?
18、什么是竞争条件?你怎样发现和解决竞争?
19、你将如何使用thread dump?你将如何分析Thread dump?
答:
1.新建状态(New)
用new语句创建的线程处于新建状态,此时它和其他Java对象一样,仅仅在堆区中被分配了内存。
2.就绪状态(Runnable)
当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态,Java虚拟机会为它创建方法调用栈和程序计数器。处于这个状态的线程位于可运行池中,等待获得CPU的使用权。
3.运行状态(Running)
处于这个状态的线程占用CPU,执行程序代码。只有处于就绪状态的线程才有机会转到运行状态。
4.阻塞状态(Blocked)
阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU。直到线程重新进入就绪状态,它才有机会转到运行状态。
阻塞状态可分为以下3种:
1.位于对象等待池中的阻塞状态(Blocked in object’s wait pool):
当线程处于运行状态时,如果执行了某个对象的wait()方法,Java虚拟机就会把线程放到这个对象的等待池中,这涉及到“线程通信”的内容。
2.位于对象锁池中的阻塞状态(Blocked in object’s lock pool):
当线程处于运行状态时,试图获得某个对象的同步锁时,如果该对象的同步锁已经被其他线程占用,Java虚拟机就会把这个线程放到这个对象的锁池中,这涉及到“线程同步”的内容。
3.其他阻塞状态(Otherwise Blocked):
当前线程执行了sleep()方法,或者调用了其他线程的join()方法,或者发出了I/O请求时,就会进入这个状态。
5.死亡状态(Dead)
当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。
我们运行之前的那个死锁代码SimpleDeadLock.java,然后尝试输出信息:
/* 时间,jvm 信息 */
2017-11-01 17:36:28
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.144-b01 mixed
mode):
/* 线程名称:DestroyJavaVM
编号:#13
优先级:5
系统优先级:0
jvm 内部线程 id:0x0000000001c88800
对应系统线程 id(NativeThread ID):0x1c18
线程状态: waiting on condition [0x0000000000000000] (等待某个条件)
线程详细状态:java.lang.Thread.State: RUNNABLE 及之后所有*/
"DestroyJavaVM" #13 prio=5 os_prio=0 tid=0x0000000001c88800
nid=0x1c18 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Thread-1" #12 prio=5 os_prio=0 tid=0x0000000018d49000
nid=0x17b8 waiting for monitor entry [0x0000000019d7f000]
/* 线程状态:阻塞(