java面经~
Java找工作主要就是考察网络、数据库、操作系统、数据结构和算法、Java基础相关知识、Java虚拟机、Javaweb相关知识、spring、设计模式、项目、场景设计等等。针对每个方面多看书、多思考、多动手,掌握扎实了找工作就不是问题。
建议多看书,结合项目和实际场景去理解、分析和思考,不要死记硬背,否则面试时候面试官让灵活分析实际情况的话就蒙圈了。
推荐书籍
网络是怎样连接的_户根勤
TCP /IP协议族
图解HTTP
图解TCP/IP
数据库
建议看书结合实践,多看底层原理实现,多动手实践。会分析比较并设计几种常用数据库的实际使用场景,熟练写各种SQL语句。
推荐书籍
高性能MySQL
Redis设计与实现
MySQL技术内幕InnoDB存储引擎
操作系统
原理方面随便找一本书就可以了,积累多了,做过一些项目之后会加深对操作系统的理解。
看书 刷题,刷题对于笔试和面试都是十分重要的,楼主也比较菜,毕竟跨专业。牛客网模考每次都参加了,当然前几次的模考简直惨不忍睹,惨到怀疑人生,后来静下心刷题,在牛客网刷题300多,lintcode刷题100多,还有刷了左神书里的题目,面试中遇到的手写算法几乎都写出来了。
推荐书籍
Java数据结构和算法
算法导论
程序员代码面试指南
Java考察的无非就是基础知识和JDK源码,基础知识要扎实,JDK源码常用的部分好好读一读,深入思考并理解一下人家的设计思想。Java虚拟机要是会调优的话是加分项。
推荐书籍:
Java编程思想
Java核心技术卷一卷二
深入理解Java虚拟机
Java并发编程实战
Effective Java
JavaWeb
推荐书籍
深入分析Java Web技术内幕
大型网站技术架构
大型网站系统与Java中间件实践
从Paxos到Zookeeper分布式一致性原理与实践
Spring
整体都有啥 IOC AOP思想 bean如何初始化 生命周期 动态*** 等等细节的实现,能看源码最好。如果没时间都看完的话,建议IOC和AOP部分看看源码了解一下底层实现。
熟悉集中常用的设计模式,尤其单例模式,各种都要会手写,线程安全的、不安全的、各种实现方式之间的区别等等。
推荐书籍
大话设计模式
面试
面试的时候别紧张,自信从容一些,如果遇到了不会的就说不会,不要不懂装懂,真诚一些,找机会把会的都展现出来,会的问题回答的深入一点。
推荐书籍
王道程序员面试宝典
Java程序员面试笔试宝典
建议不管是什么项目,一定要深入去做,每个细节都要好好把握,要知道项目的扩展点,对于扩展要有设计思路。
场景设计
现在的面试都会考察一些实际场景的设计题,建议有时间的话多看看开源什么的,理解一下人家的设计思路,积累的多了,遇到这种问题也不会完全没有思路。
下面是我的面经:
百度
一面
1.自我介绍 跨专业问题 是否学过操作系统 数据结构 等等 是否有实习
2.项目介绍
3.操作系统 信号量 管道 管程 网络也问了一些 都是基础的
4.String 如何垃圾回收 、 String创建对象的方式 分别存储在哪里等等,都是细节问题。
5.Redis和MySQL区别 各自的应用场景
6.讲讲KMP
7.哈希表
8.spring源码
9.开源中间件
10.手写算法 坐标系中一系列点,只可以向下、向上、向左走,求距离 不可以向左走 不可以改变坐标顺序
11.有什么想问的
二面
1.面试官上来就说二面不问基础和算法 只问工程设计题
2.介绍项目 问的很细很细 每部分的实现都问了 画系统架构图
3.redis出现故障怎么办 redis集群如何设计
4.分布式了解多少 CAP BASE理论等 分布式设计有的想不起来了 只记得这么多
5.主从复制设计方案
6.设计可用性和容错性都满足的系统 画图
7.写SQL 一个表行变列
8.TCP窗口
9.linux
10.http cookie
11.异步
12. hytrix
13.多线程hashmap执行put会发生什么 为什么 仔细说 发生在哪个环节 hashmap链表如果不采用头插***怎样 JDK1.8如何解决
14.手写代码 spring AOP实现拦截器,写出代码以及XML配置
15.full gc 调优过程 如何排错
三面
1.手写算法 找出一个字符串中所有有效的IP地址
2.手写算法 读两个文件写到第三个中
3.手写算法 从日志中找出同一秒内 记录多少行
4.手写SQL 查一个学生表中所有成绩大于80分的全部信息并且按照id降序排序
5.有offer吗
6.写代码 socket 基于TCP CS都写
7.手写算法 实现生产者消费者模型
8.TCP拥塞控制
9.Linux命令问了一些
10.多线程
11.异步
12.智力题
四面
1.手写算法 二叉树后序遍历 非递归
2.手写算法 一个数组中找出连续c个数字不超过T的组数有多少 用队列实现的 注意边界条件
3.手写算法 归并排序
4.MySQL和redis区别 redis不同数据结构的应用场景
5.主从同步设计
6.智力题 9个硬币 一个轻 如何用最少次数称重
7.MySQL有哪些索引
8.对Python的了解 Python有哪些数据结构 除了java 会c吗
9.爬虫怎么做的
10.redis掉电怎么办
11.讲项目
12.了解图吗?有哪几种图,区别 遍历方式
13.智力题
经理面
问了问项目 实验室的项目 剩下的时间就是谈人生 谈理想 谈行业情况 谈offer选择 等等。。。。。
阿里巴巴
1.自我介绍
2.项目
3.线程安全
4.集合类
5.ArrayList如何快速排序
6.排序算法有哪些?排序算法
7.看过什么书
8.讲深入理解java虚拟机这本书
9.问问题
腾讯
1.愿不愿意来深圳,家是哪里的,是不是独生子女,跨专业的,愿不愿意C
对linux的了解
2.用过什么数据库
3.MySQL引擎及区别,项目用的哪个,为什么
4.innodb聚集索引底层实现
5.B 树实现,和二叉树的区别
6.数据库隔离级别,项目中用到哪个,有什么好处
7.数据库ACID
8.分布式事务CAP理论
9.知道一致性哈希吗?底层实现
10.HTTPS请求过程
11.对称加密和非对称加密区别
12.什么是虚函数
13.机械硬盘组成
14.项目中redis事务的应用 如何测试原子性的
15.HTTP 301 302区别
16.会不会前端,JavaScript闭包
17.字典树
蘑菇街
1.项目问了很多,很多,很细 如何学习新技术
2.Java hashmap hashtable concurrenthashmap特点 区别 底层原理
3.class.forname classloader区别
4.object中hashcode和equals的区别
5.队列相关的源码有没有了解过
6.blokingqueue底层原理
7.又聊到项目
好未来
一面
1.gc 什么时候垃圾回收 垃圾回收算法
2.手写算法 快排 求二叉树的深度 递归非递归
3.java基本数据类型 对应包装类
4.string stringbuffer stringbuilder区别
5. 常见的异常类型
只记得这些了
最后.为什么跨专业学计算机 ,操作系统 网络有没有学习过
二面
跨专业,为什么 如何学习
1.concurrenthashmap hashmap区别 底层
2.前缀树
3.设计线程安全的hashmap
4.项目问了很多 问的很细
5.最小堆得到最小元素 时间复杂度
6.gc算法有哪些
7.闲聊了一些 为什么来好未来
还有一些设计题,但是也想不起来了
一面:
1.手写算法,求二叉树的节点个数
2.java集合类有哪些,区别
3.MySQL有哪些存储引擎,区别
4.论文和专利很多,你觉得你写的论文和专利对工作有哪些帮助
5.为什么跨专业,如何学习
二面:
1.sleep和wait区别
2.volatile关键字
3.JVM启动时候注意哪些
4.频繁fullgc原因
hr面:
跨专业问题
1.项目如何从0到1,遇到困难如何解决
2.找工作看中企业哪些方面
3.去哪儿薪资福利介绍 培训介绍
人人
一面
跨专业问题
1.手写算法,用数组实现一个stack,不允许使用函数库
2.看项目,问项目 问的很细
3.MySQL和Redis区别
4.get和post区别
5.post数据存在http什么地方
6.threadlocal底层实现
7.如何实现拦截器
8.time_wait和close_wait
9.Linux 如何查看内存使用情况 如何查看哪些端口被占用 如何查看IP等等
二面
跨专业问题
1.项目 问的很多很细 还有项目的扩展
2.synchronized和volatile区别
3.什么是指令重排序
4.waiting和blocked区别 CPU是否占用
5.手写算法 顺时针打印矩阵
6.http状态码有哪些,501 502区别
7.项目用什么工具测试的 QPS经过测试是多少
8.cookie有哪些属性参数
9.Linux使用情况
10.项目在什么环境下搭建的 Linux or Windows
三面
1.跨专业问题 为什么跨专业 为什么要学计算机 如何自学的
2.讲项目 从头开始讲,讲项目由哪些内容,如何做的,遇到问题如何解决
3.手写算法:一个字符串将*放在左边,其他字符放在右边,不允许改变元素之前的相对位置
写出不同思路,不断优化,空间复杂度要求O(1)
4.手写算法:如何找出一个数组中出现次数超过数组长度一半的数,空间复杂度为O(1)列出所有可能的方案,讲出优化过程
美团
一面
1.自我介绍
2.项目 从头到尾问了一遍 问的很细 谈了一下项目扩展和一些细节问题
3.JVM内存模型
4.堆栈 存的是啥 string创建对象存在哪里 Integer存哪 int 存哪
5.hashmap原理 resize过程
6.手写单例模式 两种方式实现线程安全的单例模式 对static的理解
7.Redis底层数据结构
8.spring事务 如何实现
9.两个事务同时操作 如何保证数据一致性
10.数据库隔离级别
11.TCP窗口是什么 一个计算TCP的题
12.HTTP
13.spring初始化哪个方法
14.bean如何加载 生命周期
15.aop 切面 动态***
16. @service如何加载的
二面
1.项目 从头到尾 问的很细 问的很多 很多实际问题的设计 问了一些拓展 如何设计
2.Redis集群如何设计
3.长连接的设计题
4.手写算法 求两个字符串的最长公共子串
5.HTTP 长连接
6.java内存模型
7.多线程 锁
8.数据库隔离级别 什么是脏读 MySQL默认隔离级别 什么是可重复读
9.HTTP有哪些方法 post和put区别
10.linux vim命令
11.如何学习新技术 项目中的困难如何解决
12.对美团的了解 有什么问题
#阿里巴巴##腾讯##百度##人人网##去哪儿##美团##Java工程师#