感受面试仍是主要围绕简从来问的,因此不熟悉的东西最好不要随便写上去。项目和基础都很重要,总体的基础知识的框架能够参考GitHub 上 CYC2018的博客,分类很全,可是深刻的学习仍是要本身去看书,写demo。项目中最好有难点,可以体现本身解决问题的过程和思路。算法方面剑指offer + LeetCode 200左右吧。投了10+公司,进行面试大概就这几家,其余没结果或者笔试被刷了。nginx
一面:web
讲一讲异常, throwable, exception, error面试
try- catchredis
手写单例模式——很生疏,GG算法
volatile ,做用,底层, lock 前缀的指令, 多CPU的嗅探机制,多处理器下的缓存一致性协议spring
synchronized数据库
JVM 内存划分, 堆内存分代编程
redis, 源码,数组
spring bean的实例化过程。——不熟悉的地方不要写上去。缓存
AOP
使用redis来实现单点登陆,那么当单个redis节点内存不够的时候,怎么办?集群化,redis-Cluster
比较偏底层
一面:
自我介绍
项目中的可用性,性能,扩展性 如何提高
nginx是如何实现反向代理的,哪一层的方向代理?应用层
如何向外提供HTTPS协议的服务, 在内网使用http协议, 经过nginx配置来进行实现
设计一个网络的时候,须要考虑的因素
虚拟网络
自我介绍
单点登陆
JVM内存划分, 堆内存为何要进行分代回收, 生命周期不一样
redis,主从,哨兵,集群,分布式锁。
redis的对象类型, 每种对象类型对应的底层的数据结构,参考redis设计与实现。
string, list, hash, set, sortedset.
每种对象都至少有2中数据结构, SDS, linkedlist, ziplist, intset, ziplist, skiplist
ISN, TCP协议为何要随机初始化一个序列号——安全性, 防止和上一次会话滞留的报文冲突
把九亿三千零五万五千三百 转化为 对应的数字,
给了一个长度为n的 值的范围为0 到 n-1的数组,而后判断是否有重复的元素出现的问题。
leetcode 42 雨水收集问题
一面:
自我介绍,redis,分布式锁, redlock算法,zookeeper分布式锁,分布式锁的问题
手写一个随机选择算法的变种
二面:
说明一下缺页中断, 虚拟内存
JVM中的内存区域划分,堆的分代,为何分代, 垃圾回收算法,垃圾回收器
Linux进程间的通讯方式, 管道,有名管道,socket,共享内存,消息队列
如何实现进程间特定场景下的高效通讯, 问了存储相关的问题。
MySQL索引类型, 底层的数据结构
手写一个双链表的插入和删除,查找方法
HR:
为何换专业
有没有其余公司的offer,
职业规划
你认为本身转专业和科班出身相比差距在哪里,咱们为何要录用你 555
学习的过程, 如何去学习
电话简历面:
自我介绍
事务的特性 ACID , 数据库的死锁发生的情景
死锁的四个必要特性, 非共享, 持有并等待, 非抢占, 循环等待
死锁避免 死锁预防
线程的状态 , 新建,就绪,running, wait, blocked, terminated
sleep 和 wait 的区别, 类的不一样,是否会释放持有的锁,monitor
JDK 可重入锁, 读写锁 , 底层 AQS,抽象队列同步器的机制
悲观锁和乐观锁, 概念上,JDK 中的类, CAS的缺点, 空转,ABA问题。使用pause指令, AtomicStampedReference
讲一讲Servlet, web.xml 配置路径到servlet的映射, init, service, destroy
能够看一看Tomcat容器的过程 ,Connector和 Context容器两大部分。完成从socket到 request和Response对象的构造
SpringMVC的 dispatcher-servlet的请求解析过程
redis介绍, 系统中的角色,做为缓存, 分布式session服务器
redis的 性能,可用性,主从复制+哨兵, redis缓存访问有网络上的消耗。
redis事务, 分布式事务, 2PC, 本地消息表等, 3PC
一面:
自我介绍, 项目
收获最大的一个项目, 着重介绍, 项目的演进过程, 从提升系统可用性的来进行演进,例如redis的可用性,
分布式锁(项目), redlock,持久化机制,主从复制过程, redis知道的都说出来
redis解决分布式Session问题, 单点登陆, Session一致性问题,描述,如何实现
IOC 的实例化过程,原理,
AOP, JDK代理, Proxy, InvocationHandler
一个循环链表进行是否为空判断
树的遍历, 层序,先、中、后的递归非递归实现
操做系统 P/V Semaphore类,
CAS, AQS 实现
看哪些书, 论坛,如何学习Java
智力题 喝汽水问题, 2个空瓶换一瓶汽水,1元1瓶,能够买多少瓶汽水 问题,(恰好看过,经过借一瓶来最后再多喝一瓶)
二面:
自我介绍
在校,学习状况,参与项目(介绍一下业务方面,架构方面的过程)
hosts文件
乐观锁, 悲观锁, 举例, 能够顺便说一下, CAS,volatile, synchronized
事务,分布式事务, 如何实现分布式事务, 两阶段提交,(过程)
JVM堆划分,方法区,
执行了 system.gc()触发的GC机制,FGC, 如何进行回收的, 分代回收
系统周期性卡顿,如何定位问题,结合GC日志, YGC,FGC, 调整分代的大小, 减少FGC时间
产生FGC的缘由
三面:
自我介绍,学习过程,项目中的难点,如何解决,
如何去提高系统的可用性,性能,扩展性,伸缩性,等等, LVS,反向代理,集群,异步,缓存等等
开放性的系统设计,一个车票查询系统,对最短期,最短开销进行求解,相似于12306的火车票购票系统,。
亿万流量网站架构和新技术, 这本书能够参考一下
四面:
自我介绍
学习过程, 难点——
synchronized关键字做用与静态方法和普通方法的区别,经过不一样的对象的监视器来进行并发控制,monitorenter, monitorexit
服务器CPU使用率很高,如何排查, top 定位进程, 若是是Java,经过jstack进行线程快照分析,jmap,jhat 等等,
智力题
红黑树的优缺点
AOP 动态代理
HR面:
自我介绍 学习过程
为何选择转专业
项目中遇到的难点,
对部门的理解
我的的职业发展,城市的选择,职业方向,有没有其余公司的offer
下面是本身的一点自学和准备面试的过程,但愿能够对其余人转行的人有帮助。
大体就是下面这几个方面要进行学习:
计算机基础:计网,OS,算法和数据结构必须熟悉;组成原理,编译原理等等看了更好
语言基础:Java的一些语言特性,多线程,JVM
数据库:基础概念,SQL,数据库的设计等
web基础:Servlet,JSP, HTTP协议, Cookie, Session等进行一下了解,能够本身用servlet写个demo
web框架:SpringMVC, Spring, Mybatis, 在项目实践中学习,先会用,而后深刻。SpringCloud, SpringBoot等也能够进行学习
中间件:Redis, 消息队列这些也能够了解一下
开发工具:Maven ,Git等等
系统设计:如何提高系统并发,保证可用性,伸缩性,扩展性,安全性这几个方面的考虑。
本身在学习的大体就是上述的过程,也不是颇有计划性,基本都是边学习边修改本身的计划。
面试准备和阅读书籍:
大致的建议仍是平时多coding,多看书,多思考,多总结,不要在面试前依赖面经总结,或者背面试问题这种途径,由于须要作到的是真正对某个问题理解了,知道解决方案,而不仅是背过了答案。面经总结应该当作一种对本身进行查漏补缺的测验,而不是背诵的题库,功夫积累仍是在平时。
看书的一点小建议:
若是在某个阶段看书看不进去的时候,多是本身其余方面的积累还不够,也多是要本身静下心去深刻分析,判断是哪一种就须要本身去感受了。例如我看完《Head First Java》直接开始看《Java编程思想》,就感到十分痛苦,大部分都不懂,不知所云。
可是在使用Java进行必定程度的编码以后,对Java多线程有必定了解以后,再开始看《Java编程思想》的时候,就比以前好多了。可是在看《Java并发编程的艺术》的时候,看不懂,就须要啃着硬骨头,静心看下去。最重要的感受就是不断地实践,看书,看博客,总结,不断反复。
转载:https://mp.weixin.qq.com/s/MIgdbabIJrX64h0IWPEIHg