金三银四背后,一个 JAVA 程序员的面试心得

262 篇文章 5 订阅
83 篇文章 1 订阅

回顾一下自己这段时间的经历,去年十二月份的时候,公司通知了裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到 offer,我感觉今年的寒冬有点冷。后续的面试过程我做了一些准备,基本都能走到 hr 面,后面我也顺利地拿到了 offer,我给大家分享下我的求职体会,希望能给大家一些参考。

下面说一下自己面试过程遇到的一些具体题目和面试心得。

阿里面试题

多个线程同时读写,读线程的数量远远大于写线程,你认为应该如何解决并发的问题?你会选择加什么样的锁?

JAVA 的 AQS 是否了解,它是干嘛的?

除了 synchronized 关键字之外,你是怎么来保障线程安全的?

Tomcat 本身的参数你一般会怎么调整?

你有没有用过 Spring 的 AOP? 是用来干嘛的?大概会怎么使用?

如果一个接口有 2 个不同的实现,那么怎么来 Autowire 一个指定的实现?

如果想在某个 Bean 生成并装配完毕后执行自己的逻辑,可以什么方式实现?

SpringBoot 没有放到 web 容器里为什么能跑 HTTP 服务?

SpringBoot 中如果你想使用自定义的配置文件而不仅仅是 application.properties,应该怎么弄?

SpringMVC 如果希望把输出的 Object (例如 XXResult 或者 XXResponse) 这种包装为 JSON 输出,应该怎么处理?

如果有很多数据插入 MYSQL 你会选择什么方式?

如果查询很慢,你会想到的第一个方式是什么?索引是干嘛的?

查询死掉了,想要找出执行的查询进程用什么命令?找出来之后一般你会干嘛?

读写分离是怎么做的?你认为中间件会怎么来操作?这样操作跟事务有什么关系?

分库分表有没有做过?线上的迁移过程是怎么样的?如何确定数据是正确的?

你知道哪些或者你们线上使用什么 GC 策略?它有什么优势,适用于什么场景?

JAVA 类加载器包括几种?它们之间的父子关系是怎么样的?双亲委派机制是什么意思?有什么好处?

如何自定义一个类加载器?你使用过哪些或者你在什么场景下需要一个自定义的类加载器吗?

堆内存设置的参数是什么?

HashMap 和 Hashtable 的区别。

实现一个保证迭代顺序的 HashMap。

说一说排序算法,稳定性,复杂度。

说一说 GC。

JVM 如何加载一个类的过程,双亲委派模型中有哪些方法?

TCP 如何保证可靠传输?三次握手过程?

京东面试题

java 常用的数据结构有哪些?哪些是线程安全的?是怎么保证线程安全的?

Redis 中的 Lua 有没有使用过?可以用来做什么?为什么可以这么用?

线程池内部工作原理可以说一下么?

死锁是什么意思,形成条件是什么?出现死锁是可以通过什么方式去排查。

在交易过程中如何放在用户在支付时的重复支付(交叉支付),请写出你了解的方案或使用的过的方案。

数据库索引有哪几种,他们之间的区别。

程序开发时通过开发工具 DeBug 调试时,控制台显示的内容都包含什么?哪些内容可以帮助你发现问题和解决问题。

RPC 通信过程中,假设 A 系统提供了一个方法入参是一个 JavaBean,出参也是一个 JavaBean。另外两个系统 B 系统、C 系统调用接口,调用方 B 想让提供方 A 增加一个返回参数,假设服务提供方 A 增加了返回参数,请问 C 系统调用方需要做什么处理?

了解哪些设计模式,用伪代码实现一个你熟悉的设计模式。

讲一下怎么使用分布式锁。

说说 HashMap 的原理,以及 HashMap 如何扩充 bucket 的大小。

Redis 的 Pipeline 是用来干什么的?

Mysql 索引的分类 (Btree, hash),各自使用什么情况 。

说说 Myisam, Innodb 区别。

知道哪些负载均衡算法。

说一下 Btree 的查找原理。

简述三次握手,如果 c 端发起握手请求,s 端无法立刻建立连接应该回应什么?

去哪儿网面试题

自我介绍,项目介绍。

mysql 数据库调优。

sql 优化。

like 能用索引吗?

java 对象四种引用。

GC 原理。

jvm 内存结构。

说一下你学过 jvm 在书写代码上对你有什么帮助和提高。

千万数据量的查询你会怎么做?

HashMap 在 jdk1.7 和 1.8 的区别,为什么引入这个概念?hash 碰撞怎么解决,为什么 1.8 要比 1.7 更好,好在哪?

关于你的项目,如果并发很大,你会怎么改造。

方法区里什么样的对象有可能被回收。

线上 cpu 飙升 100% 你怎么处理。

频繁 FullGC 怎么处理。

线程池创建有几种,为什么创建定长的线程池个数最好是 5,10,15 这样的数字。

linux 命令。

伊甸区和幸存区可动态变化吗?

redis 和 memcached 区别。

说几个 jdk 命令,jmap 是什么意思。

如果并发很大,你对数据的正确性怎么保证。

饿了么面试题

http 和 https 的区别,https 原理,http2.0 与 1.0 的区别。

Java 的垃圾回收机制,Java 文件加载机制,tomcat 类加载机制,锁机制,jvm 原理及线上调优,jvm 内存模型。

多线程,有哪些可以保持进程同步的方法,创建线程的几种方法,对 i++ 多线程访问你会怎么做。

Java 的设计模式,单例有什么模式,懒汉为什么加 volotile,volotile 的内存屏障,如何避免死锁。

考虑单例模式的编写,要线程安全且内存消耗小(剑指 offer 原题)。

String、StringBuilder、StringBuffer 区别;String 类能被继承吗?为什么?

在白纸上手写二分法排序算法(lintcode 上原题);二分查找的思想。

查找单链表中倒数第 k 个节点的算法,手写(lintcode 上原题);最常见的排序算法你见过哪些,快排的基本思想及时间复杂度。

常见的数据结构有哪些。

hashmap、hashcode 一样,不 equals 怎么处理 ;hashcode 实现原理,currentHashMap 原理,实现细节,怎么实现同步的;类为什么要有 hascode 方法,是不是主要在集合类中都要实现 hashcode 方法;equals 方法怎么实现;两个不同的对象可能有相同的 hashcode 值吗;常用集合有哪些。

tcp 三次握手,四次挥手协议。

架构设计一个开发性问题,设计一个 Nginx 管理的中间件,怎么设计。

所有的类都继承与 object,你用过 object 类的直接子类有哪些,object 类常用的方法有哪些。

Java 会出现内存泄漏吗,如果回,在哪种情况下?

抽象类和接口的区别。

平时怎么扩展自己的专业知识水平。

百度面试题

什么是 Java 的反射机制。

Cookie 和 Session 的区别。

get 和 post 请求的区别。

IOC 的优点是什么。

IO 和 NIO 的区别,NIO 优点。

JRE、JDK、JVM 及 JIT 之间有什么不同。

Hashcode 的作用。

简述一致性 Hash 算法。

为什么在重写 equals 方法的时候需要重写 hashCode 方法?equals 与 hashCode 的异同点在哪里。

为什么 Map 接口不继承 Collection 接口。

说出几点 Java 中使用 Collections 的最佳实践?

GC 是什么?为什么要有 GC。

什么时候会导致垃圾回收。

GC 有几种方式?怎么配置。

什么时候一个对象会被 GC? 如何判断一个对象是否存活。

垃圾回收器的基本原理是什么?

Serial 与 Parallel GC 之间的不同之处。

JVM 中一次完整的 GC 流程是怎样的? 对象如何晋升到老年代。

吞吐量优先和响应优先的垃圾收集器选择。

说说你知道的几种主要的 jvm 参数。

Java 中存在内存泄漏问题吗?请举例说明。

什么是线程,多线程的优点是什么?以及简单说一下多线程的几种实现方式。

ThreadLocal 用途是什么,原理是什么,用的时候要注意什么?

线程池是什么?为什么要使用它?如何创建一个 Java 线程池?

ThreadPool 用法与优势可以说一下么?

synchronized 的原理是什么?synchronized 和 ReentrantLock 有什么不同?

有 T1,T2,T3 三个线程,怎么确保它们按顺序执行?怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行同步块内的线程抛出异常会发生什么?

什么是乐观锁(Optimistic Locking)?如何实现乐观锁?如何避免 ABA 问题。

Java 中活锁和死锁有什么区别?

Executors 类是什么? Executor 和 Executors 的区别?

什么是设计模式(Design Patterns)?你用过哪种设计模式?用在什么场合?

你能写出三种单例模式实现么?

你知道 Google 是如何在一秒内把搜索结果返回给用户?

高并发下,如何做到安全的修改同一行数据?

如何避免浏览器缓存。

大型网站在架构上应当考虑哪些问题?

最近有在看什么书么,印象最深刻的是什么?

你们线上应用的 JVM 参数有哪些?

能简单说下你对算法的理解么?

面试心得

准备要充分,知识面要尽量的广,同时深度也要够。

面试安排上,如果不着急,尽量给自己留多时间,两天一家,及时做总结和补充。

心态要放平,当做一次技术交流,面试要看一部分的运气,也要看一些眼缘,有的面试官一张嘴你就能感觉到你这次面试完了。想去的公司没有面试好,不要气馁,继续加油准备。

简历投递方面,拉勾上投了很多经常不匹配,可能是我学历问题 (自考本),有一些打击自信心,如果有同样感受的,不妨换 BOSS 或者其他平台。避免打击自信心。

写简历一定要体现自己的优势,最好能体现类似于,用到了什么技术,解决了什么问题。简历上写到的一定要胸有成竹。

类似于你的优势是什么,你觉得你项目中做的比较好的地方有哪些,你能给公司带来什么,这种问题心里要先想一些,免得临场发挥容易紧张说不好。

我所经历的面试,一般技术面最少是两轮。如果一轮后让你走了,而你还自我感觉良好,那我觉得你有必要回顾一下面试内容,并一条一条找找该问题的相关内容,大部分问题就在于你没有答到点子上,可能是深度不够,也可能是扩展不够,继续加油。

现在外面面试问的的确比较多,要求也挺高的,行情不好,薪资也不好要,所以心态一定要放好,找好自己的定位,心态一定要好。
【这里想说,因为自己也走了很多弯路过来的,所以才下定决心整理,收集过程虽不易,但想到能帮助到一部分自学java 的人,心里也是甜的!有需要的伙伴请点㊦方】↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值