最近开始找工作了,坐标杭州。渣渣感觉面试应该挺困难的,也不知道具体会问哪些类型,会在面试完把每一次面试问到的题目列出来, 一个作用是参考记录,另一个作用是可以把自己不会或者弱项的问题及时补齐。
暂时是先把问题列出来,有时间的时候会把答案补上。
希望能找到一个好工作,加油
尼尧的面试日记:面试记录(一)
我大概总结一下,小型公司2年以下开发主要业务就是CRUD,招人肯定是希望能立马上手,所以面试范围我押题是常用的框架(SpringBoot、Spring基本概念,Mybatis),事务、数据库相关(锁、事务级别、sql优化,数据库底层概念等)、异常。有些会问一些设计模式(主要掌握工厂模式、单例模式、代理模式。)。
中大型公司的话,加上 JVM,集合,并发编程,一些网络知识。有些可能还会有一两道算法题。甚至开始问分布式了,具体看他们业务。
大厂请直接参考我画的java路线图,大厂知识路线没有3年以下之分,只有深/广度之分:Java知识体系脑图(2020年)
本次面试过程
第一家银行相关业务,需要频繁出差的公司 远程电话面试。
(PS:面试官喜欢在别人说话的时候发出各种语气词,多次打断思路…)
第一环节:自我介绍,介绍一下自己的基本情况。
第二环节:开始面试。
面试题
1、都用过哪些技术和框架?
目前应该学习的技术和框架发在我的博客了:Java知识体系脑图(2020年)
2、在项目中主要干一块,用了哪些技术?
略
3、设计模式了解吗,都会哪些设计模式?
工厂模式、单例模式、代理模式、观察者模式、适配器模式、责任链模式、装饰者模式。
4、在项目中常用到哪几个设计模式?
工厂模式、单例模式、代理模式。
5、都是怎么进行设计模式的选择的?
所谓设计模式,就是在特定的情况下,应该使用的经过验证的有效的办法。需要根据场合来使用相应的设计模式。
单例模式:SpringMVC中有,默认bean是singleton。保证类只有一个实例。
工厂模式:类的创建依赖工厂类,SpringMVC中的bean工厂。
代理模式:Spring的AOP。
适配器模式:SpringMVC的handler使用了适配器模式。Springmvc创建了一个适配器接口,接口下有每个handler的适配器实现类,这样在扩展controller的时候,增加一个适配器就行。这样,前端控制器只需要调用处理器适配器即可。剩下的事情交给处理器适配器去适配。
装饰模式:io流。过滤流BufferedInputStream去装饰节点流(fileIuputstream)。
6、说一下工厂模式,都有哪几种,有什么区别。
工厂设计模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
1.静态工厂模式(简单工厂模式)。工厂类是整个模式的关键所在,包含了必要的逻辑判断,能够外界给定的信息, 决定究竟创建哪个具体类的对象。
2.普通工厂模式(工厂模式)。工厂方法模式 是对简单工厂方法模式的一个抽象,抽离出了一个Factory类(或者接口),这个接口不负责具体产品的生产,而只是指定一些规范,具体的生产工作由其子类去完成。这个模式中,工厂类和产品类往往是一一对应的,完全解决了简单工厂模式中违背“开闭原则”的问题,实现了可扩展;
3.抽象工厂模式。抽象工厂模式 的特点是存在多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,工厂提供多种方法,去生产“系列”产品。
简单(静态)工厂模式适用于工厂类需要创建的对象比较少的情况,客户只需要传入具体的参数,就可以忽略工厂的生产细节,去获取想要的对象;(普通)工厂方法模式,主要是针对单一产品结构的情景;抽象工厂模式则是针对多级产品结构(系列产品)的一种工厂模式。
7、用过SpringCloud吗?说一下有哪些组件。
SpringCloud早期体系是NetFlix旗下的,由于部分组件的停止维护,现在主要使用的是Alibaba旗下的。
SpringCloud Netflix:Eureka 服务发现与注册(停止维护)、Ribbon 负载均衡、Feign 负载均衡、Hystrix 服务熔断(停止维护)、Zuul 路由网关;
SpringCloud Alibaba:Nacos 注册中心、Ribbon 负载均衡、Feign 负载均衡、Sentinel 服务熔断、Gateway 路由网关。
8、JVM调优会吗,都调过什么参数?
JVM调优即调整其中的各项参数,让JVM的效率更好。常常操作的就是堆中各区域的大小、影响对象回收效率的参数、GC参数。
部分调优参数:
参数 | 说明 |
---|---|
-Xms | 设置初始 Java 堆大小,单位默认是字节,可以使用k,m,g |
-Xmx | 设置最大 Java 堆大小,单位默认是字节,可以使用k,m,g |
-Xmn | 设置新生代的初始值和最大值,单位默认是字节,可以使用k,m,g |
-Xss | 设置 Java 线程堆栈大小,单位默认是字节,可以使用k,m,g |
-XX:NewRatio | -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5;若Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。 |
-XX:SurvivorRatio | 默认-XX:SurvivorRatio=8,即伊甸区Eden与2个幸存区Survivor比值为8:1:1,一个Survivor区占整个年轻代的1/10 |
-XX:MaxTenuringThreshold | 默认-XX:MaxTenuringThreshold=15,即新生对象的存活年龄,经过多少次Mirno GC才会进入永久代;如果设置为0的话,则年轻代对象不经过Survivor区,该参数只有在串行GC时才有效。 |