金九银十都在讨论跳槽面试,Java外包4年,要不要跳?

前言

“金九银十”指的是在9月、10月,尤其是9月是应届生求职、也是在职人员跳槽到更满意职位的黄金时期。求职、跳槽,说到底,本质上就是职场人员和工作职位匹配的过程,一个萝卜一个坑,此坑不适合,自有留爷处。
Java核心面试知识点整理,分享给大家。
但是,金九已到末尾,银十即将开启,时间不等人,机会错失不再,好好把握,争取一举拿下春招,顺利跳槽涨个薪。那么今天小编就分享一份“秋招JAVA面试手册”,望助正在准备面试的你一臂之力!

本册共分为七大面试专栏,分别是性能优化、微服务、并发编程、开源框架、分布式等。

下面我们开始进入正文:

一、性能调优面试专栏

JVM面试题

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-线程共享)-运行时数据区

MySQL面试题

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、列的字符串类型可以是什么?

Tomcat调优面试题

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工作模式?

Nginx调优面试题

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]
/* 线程状态:阻塞(

你可能感兴趣的:(Java面试真题合集,java,面试,jvm,java面试,秋招)