Java 杂谈Spring-Boot微服务架构和实践

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

2019-03-27  本文已影响0人  Java机械师

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

image

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

阿里面试题

image

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

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如何保证可靠传输?三次握手过程?

京东面试题

image

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端无法立刻建立连接应该回应什么?

去哪儿网面试题

image

自我介绍,项目介绍。

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是什么意思。

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

饿了么面试题

image

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会出现内存泄漏吗,如果回,在哪种情况下?

抽象类和接口的区别。

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

百度面试题

image

什么是 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 参数有哪些?

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

面试心得

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

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

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

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

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

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

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

现在外面面试问的的确比较多,要求也挺高的,行情不好,薪资也不好要,所以心态一定要放好,找好自己的定位,心态一定要好。

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:810589193
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代

在这,也祝大家在金三银四面试的道路上,都能够找到大家心仪的下家。

上一篇下一篇

猜你喜欢

热点阅读