java递归生成树结构_Java面试知识点总结

da0d6558b651f6184c33a80cd59c638b.png

面试知识点总结

一:Java

集合:

hashmap和concurrenthashmap源码一般必问,最好看1.8版本的,ArrayList和LinkedList区别,TreeMap和LinkedHashMap区别以及原因(就是问底层用的什么数据结构实现的)?

还有一些juc下的,queue,stack等十几种常见的接口或实现类要了解实现原理以及使用场景

异常:

了解整个异常体系Throwable,error,exception,RuntimeExceptiion,以及检查时异常。

一个比较常见的考点:try-catch-finally(1,finally一定会执行,2,返回值是在finally之前确定的然后会存起来,3,return的优先级是finally > catch > try。所以finally中放return会提前退出)

多线程:

知道线程的几个状态,以及可能是什么原因从一个状态变为另一个状态

线程池几个参数以及各个意义,线程池接受一个任务为什么设计成这样?(因为在队列里不需要获取全局锁)

synchronized,理解原理,锁是加在对象上的,但是要靠monitor判断。volatile可见性,防止指令重排序(指令的happens-before要知道)

CAS,AQS原理以及在哪些地方使用了他们?深入理解一下,整个并发体系的好多实现类基本就是靠他俩了

Lock ReentrantLock Condition ReadWriteLock

原子类的实现原理,juc下的并发容器

要会使用一些并发框架,例如:Fork/Join,countDownLatch,信号量,线程屏障

《java并发编程的艺术》

JVM:

各个区是干什么的,从一个类加载,实例化,调用执行某个方法,到对象被回收整个过程要明白流程,以及涉及到的数据在各个区之间的转换

GC算法,垃圾回收过程,收集器以及区别

要知道1.7和1.8的区别,目前网上的资料大多是针对老版本的JVM

《深入理解JVM虚拟机》

NIO:

何为非阻塞IO

selector,channel,buffer

NIO用处或优势,Netty要知道,TCP或RPC框架方面可能牵扯着会问到

其他:

比如Java为什么是多态的,依靠什么来实现的?为什么要设计泛型这个东西?jdk不同版本加了哪些些东西?还有stream,枚举,序列化等等

二:数据库

InnoDB,MyISAM区别,知道索引实现原理以及为什么这么实现(例如聚簇索引是什么东西,二级索引为什么是要用B+树结构的)

了解sql执行过程(join 或 where连表 以及使用索引),这样可以更好的进行sql优化

数据库事务,比如ACID(用redo和undo机制保证原子性和持久性,锁或多版本保证隔离性,'AID'共同保证'C'一致性),其中锁(悲观)又会按照使用方式和粒度进行划分

explain

三:Spring

为什么用spring?(有什么好处)

spring启动过程(启动过程中serlvetcontext webapplicationcontext dispatcherservlet都会做什么)

生命周期(配置文件里的init-method和destroy-method方法,BeanNameWare,BeanFactoryWare,InitiazingBean,DiposableBean接口,BeanPostProceossor后置处理器实习类要知道他们的作用和执行顺序)

作用域

aop是怎么实现的,jkd代理和cglib什么区别

aop实现事务和传播机制具体配置以xml为例简单描述一下

springboot和apringmvc的对比

四:算法和数据结构

算法:常见的排序(面试的时候最好不要写冒泡这种高复杂度的),查找算法以及每种的时间空间复杂度,给你一串数要写出了接下来几步的变化

链表插入,反转,删除等

树的前序、中序遍历,或者是按照递归和非递归(那就是迭代了)方式,或者是按照深度广度优先级分。求树的最大(小)深度,查找节点等操作

五:linux

查看内存,cpu,硬盘,进程。每种命令的结果比如ps的pid id分别是什么

文件命令,权限命令

查看日志相关操作,比如grep 管道 set tail head等命令,查看多少行到多少行的?查看某个字符串个数出现个数?

或者更复杂的需要awk的,首汽约车和vipkid问了两次

linux如何开启一个任务?如何开启mysql主从复制功能?等等

六:Git,Maven等开发工具

比如常见的一些问题:rebase和merge区别?stash什么作用?你们项目是如何做代码管理的?jar包冲突怎么办?如何不加载重复的jar包?

七:各种中间件和其他技术

es肯定会问系统怎么用的,如何分词,脑裂等问题。有两家问过es实现原理

redis肯定会问怎么用的,还会一些主从分离,数据持久化,incr,实现分布式锁等问题。

rpc(包括dubbo,springcloud,grpc)至少会一样,会问怎么用的(好处以及如何配置),有一家还问了自己怎么实现一个类似dubbo的框架(实现方式:一般请求方通过动态代理,JDK里的Proxy。通过重写Proxy InvocationHandler接口里的invoke方法实现。这个环节获取方法名,参数,返回类型,并且序列化参数。之后一般使用tcp进行网络传输,服务端一般使用同步非阻塞的NIO框架例如netty进行数据接收。服务端接受到请求中的方法和参数后通过反射调用真实的方法。然后将返回值序列化封装返回给客户端。)

kafka,jekins等

八:项目

简历上出现的项目都会问

口述一下项目的业务,可能会让你画个时序图,模块图之类的,然后可能会抓住某个模块问细节实现。

项目涉及的配置也会问,比如用的什么连接redis?事务怎么配置的?隔离机制是怎么样的?db怎么备份的?es用了几个type?日志怎么配置的?日志文件放在哪等等

九:必考的两道题:

单例模式和设计一个秒杀系统。每一道都被问过多次。单例考察基础,秒杀系统考察知识面(宽度)和经验

一道由单例引发的面试经验:https://www.cnblogs.com/xiexj/p/6845029.html#4082170

面试经验

简历要认真写,不会的不要出现在简历上,不会比说错要好

好的公司一定要留在后面投,可以先面几家,面试个十几天和没面试之前差距是很大的,起码在应对面试上。这点在毕业不久同学身上最明显。

不要等到你准备好了也过了招聘季了,淡季不好找,所以一定要提前准备。尤其是毕业不久的同学,在找工作难度和准备时间都没优势。

面试收获

一:知识体系化,不要分散要打通,比如synchronized这个关键字,单独讲多线程和JVM里可能都会讲到,可以关联起来理解

二:深入理解,切记死背,要理解为什么这么设计,可以多看一些源码

三:多动手,比如几个线程框架,可以多敲几个例子验证一下

四:加深对项目的理解,不要只是了解自己负责的一个模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值