这里有一份面筋请查收(一)

2024-09-02 11:18
文章标签 一份 查收 面筋

本文主要是介绍这里有一份面筋请查收(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/talk/interview-1/

博主毕业快满三年了,由于种种原因想换一份工作。学了7年计算机技术,在目前的行业用到的技术不多,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长。从上次更新博客到现在已经三周左右了,这三周博客基本断更了,现在找工作也基本收尾了,来聊一聊我所遇到的一些面试经历,希望给各位寻求新机会的小伙伴一个参考。总共面完8家收了7个offer,应该算是比较成功的吧。博文中主要还是聊一下技术相关的,博文中所涉及的公司均以代号标志,不便透露细节。

第一家面试的公司是一家互联网创业公司,这里简称D,博主对这家公司的印象还是不错的,共面试了5轮,笔试一轮,技术面3轮,最后一轮是HR面。虽然公司总共员工只有小几百人,但是做事比较专业,很多大型的成熟公司也未必做得更好。

首先说说笔试,很多一些小的公司,就是从网上题库中拉点选择题让你做做,之后的面试和笔试题无关,这里我遇到的笔试题是和第一轮技术面相关的,有点小套路。


###笔试题
据博主的回忆,共有这么些题(都是简答题):

  1. 写出java中synchronized的使用方式。
    可以参考:Java多线程知识小抄集(一)
  2. Java中设置最大堆和最小堆内存的参数是什么?
    -Xmx -Xms
  3. volatile的作用?
  4. 写一个二分查找算法
  5. 写一个你熟悉的设计模式,画出UML图,说出此模式的作用以及写出此模式的主要方法。
  6. 一道设计题。(略)
  7. BeanFactory和ApplicationContext的区别。(Sping的容器可以分为两种类型 :1. BeanFactory:(org.springframework.beans.factory.BeanFactory接口定义)是最简答的容器,提供了基本的DI支持。最常用的BeanFactory实现就是XmlBeanFactory类,它根据XML文件中的定义加载beans,该容器从XML文件读取配置元数据并用它去创建一个完全配置的系统或应用。 2. ApplicationContext应用上下文:org.springframework.context.ApplicationContext)基于BeanFactory之上构建,并提供面向应用的服务。)

(第4,5题在下面会解释)


###第一轮技术面
主要根据简历以及笔试题进行论述。
先将笔试题,首先是写出一个熟悉的设计模式,那当然写个单例咯,这个最简单嘛,主要是UML图也特别好画。详细可以参考设计模式:单例模式(Singleton)。博主写的是内部类的写法:

public class LazyInitHolderSingleton {  private LazyInitHolderSingleton() {  }  private static class SingletonHolder {  private static final LazyInitHolderSingleton INSTANCE = new LazyInitHolderSingleton();  }  public static LazyInitHolderSingleton getInstance() {  return SingletonHolder.INSTANCE;  }  
}  

这种写法是懒汉式线程安全的写法。
面试官问到一个问题:为什么这种写法是线程安全的?
那么这里就设计到一个JVM加载的知识:JVM内部机制可以保证在执行类构造器<clinit>()方法的时候是线程安全的,详细可以参考博文: Java虚拟机类加载机制。

这里博主还特意说了虚拟机规范严格规定了有且只有5种情况(JDK7)必须对类进行初始化(执行类构造器<clinit>()方法):

  1. 遇到new,getstatic,putstatic,invokestatic这失调字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。
  2. 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。
  3. 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
  4. 当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。
  5. 当使用jdk1.7动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行初始化,则需要先出触发其初始化。

尤其是第5点,是个特别偏冷的知识点,当你记住这个的时候,可以给面试官留下一个很好的印象。在后面的博文中会经常涉及这种冷知识,可以让你的面试过程添加几处亮点。

下面就是要说明一下的二分查找法(首先确保被排序的数组有序),这里有两种写法:递归和非递归的写法。博主憋了一个递归的算法,不过最好还是用非递归的写法。二分查找法还是很容易的,关键这里引申出了变种算法,譬如:给你一个key,找出这个数组中最左边的key,或者最右边的key。当然还有其他变种算法,有兴趣的朋友可以自行查找相关资料。

接下去就根据简历聊一聊项目和Java基础了。下面稍微列举一些问题:

  1. Memcached和Redis的区别?参考:Redis和Memcached的区别
  2. ActiveMQ的集群配置方式有哪些?(基于共享文件,基于数据库,基于Zookeeper等)
  3. Mybatis的一些知识点。(略)
  4. 虚拟机的类加载机制。(加载-验证-准备-解析-初始化,详细可以参考 Java虚拟机类加载机制)
  5. 内部类相关知识点。
  6. 面向对象的设计原则?参考:面向对象的设计原则
  7. Spring Aop的原理?动态代理。
  8. Spring常用的注解?
  9. NIO的相关。参考:攻破JAVA NIO技术壁垒
  10. 数据库优化相关。(博主基本不直接接触数据库,so遇到此类问题直接say: I don’t know. 有兴趣的小伙伴可以自行查阅一些资料,譬如数据访问优化漏斗法则。)
  11. linux下查看文件有哪些方式?cat tac head tail more less nl vim vi gvim

###技术面二面
约好的10:00电面,11:30也没来,后来咨询了HR才说面试官出差去了。。。好吧,毕竟公司还在创业初期,管理上有疏忽可以理解。第二次约的2面同样是10:00,这次是10:27来的电话。额。。。这此的面试官好像是CTO,面的也比较深一些:

1.谈谈你对HashMap的理解,怎么样去保证线程安全?
博主对HashMap巴拉巴拉的一阵,可以参考:Java集合框架:HashMap. 然后有三种方法可以保证hashMap的线程安全:换成HashTable;用synchronizedMap包装一下HashMap;换成ConcurrentHashMap。然后补了一句ConcurrentHashMap是比较推崇的,然后就被问了另一个问题:说一下ConcurrentHashMap的实现原理。然后解释了一下,最后问了个问题:用HashMap怎么去实现ConcurrentHashMap?当时想了一个,觉得不okay,想说第二个方案就被制止了。现在想想:把HashMap用Collections.synchronizedMap()包装一下替换掉Segment即可。(如果不知所云,请阅读一下ConcurrentHashMap的源码先~~)
补充:这里还问了平常用了那些线程安全的队列,包括:ConcurrentLinkedQueue, ConcurrentLinkedDeque以及BlockingQueue系列。

2.Java集合中有哪些常用的类?ArrayList的上级(父类或者接口)是什么,HashMap的上级又是什么?
常用的类:Map系(HashMap,LinkedHashMap,TreeMap, WeakHashMap, EnumMap等);List系(ArrayList, LinkedList, Vector, Stack等);Set系(HashSet, LinkedHashSet, TreeSet); 工具类(Collections,Arrays)。这里如果说出来了,就必须对其十分了解,比如博主在另一家互联网公司W的面试过程中就被问到:你对java集合了解有多少?博主说:我看过所有集合的源码。然后就被问到:Collections.sort()里面的实现是什么排序算法?这个问题确实够冷门的!幸亏看过,不然就被打脸了。。(TimSort, 加强型归并排序)
ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable. 然后AbstractList又继承了AbstractCollection. 然后List和AbstractCollection又都implements了Collection.
HashMap extends AbstractMap implements Map, Cloneable, Serializable.

3.css导入方式?
这个只要2周不没看过就会忘记。。博主当时就忘记了。。超简单的题,但是又是最不起眼的题,细节做的不够好。

<link rel="stylesheet" type="text/css" href="css/head.css" />

4.js中的ajax操作的方式?这个写的太多了,所以答起来很easy
5.一句话概括NIO。博主说了一通,包括Reactor模式神马的。但是面试官说:你说的也很对,但是不是我想要的结果。斯巴达。。。
6.设计数据库的一道题,比较简单,不赘述。
7.常用的linux命令?(这个被用了好多次了)

cat tac head tail more less nl vim vi gvim
date cal man shutdown poweroff reboot echo
uname -r; mount; unmount; exit
cd ls pwd mkdir cp scp rm mv
touch file which whereis locate find tar unzip
grep df top free kill killall
ifconfig ping netstat telnet ftp
passwd umask chrown chmod chgrp sudo ps who 

8.Spring IOC的原理?答案:基于反射
9.数据库事务隔离级别?
Uncommit Read; Commit Read; Repeated Read; Serializable.
10.memcached与Redis的区别?


###技术三面
之前说过博主对数据库相关的知识,除了会写SQL之外,其他的基本白痴。这次面试将近40mins,差不多被问了30mins的数据库的知识。比如:数据库优化;访问多少条数据,数据库的反应延迟是多少;表和视图的区别。
当然还有一些其他的,譬如Spring中的注解在xml文件中怎么配置?

<context:annotation-config>

面试过程中有两种问题比较难答:第一种,冷门知识,比如Colletions.sort()用到什么排序算法?第二种就是上面的这种特别简单,用过的都知道,但是像这种在Spring配置文件中配置完之后就基本不动了,所以特别容易遗忘。
还有类似的比如:Spring中的自动装配怎么配置?

<context:componenet-scan>

###HR面
最后是HR面,这个最简单,只要言语不过激都是okay的,主要谈谈在原来公司主要做什么,为什么要换份新工作,期望薪资神马的。(ps: 谈薪资是门艺术,同样两个人,面试打分也是一样的,但是薪资会谈和不会谈之间可能相差很多,这门艺术博主还在研究中,虽然有所收获,但是还是不敢出来卖弄,等博主把人事六大块之一的薪酬领悟之后再来探讨探讨。)


###总结
博主总结几个心得,仅供参考:
面试第一要素:不要紧张,如果你真是技术族,而且对技术有所痴迷,一聊起技术来根本不会紧张。
面试第二要素:要对简历上的内容了如指掌,包括原理源码,如果略懂或者根本就是用了几天就再也没用过的技术就从简历上删掉吧,否则被面试官抓住不放就糟糕了。
面试第三要素:学会引导面试,掌握主动权。这门技艺需要多去混点面筋,然后自我优化之后,一般都可以掌握。
面试第四要素:做人要低调。面试你这个职位的人的技术肯定比这个职位高好几个level, 不要觉得你回答了你非常熟悉的问题就高调起来,面试官随时可以挖出一堆坑来让你往里面跳。
面试第五要素:要自信。有些面试官会对某些你回答完问题之后会补一句:你确定?这时候就要看你自己了,有可能面试官再提醒你,也有可能再炸你。归根结底还是要技术掌握的够硬,底气就足一些。


更多链接请关注:
这里有一份面筋请查收(一)
这里有一份面筋请查收(二)
这里有一份面筋请查收(三)
这里有一份面筋请查收(四)
这里有一份面筋请查收(五)
这里有一份面筋请查收(六)
这里有一份面筋请查收(七)
这里有一份面筋请查收(八)

参考资料:

  1. Java多线程知识小抄集(一)
  2. 设计模式:单例模式(Singleton)
  3. Java虚拟机类加载机制
  4. Redis和Memcached的区别
  5. 面向对象的设计原则
  6. 攻破JAVA NIO技术壁垒
  7. Java集合框架:HashMap

欢迎跳转到本文的原文链接:https://honeypps.com/talk/interview-1/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


这篇关于这里有一份面筋请查收(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129801

相关文章

10篇校招/社招面经请你查收~

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 目前各大公司的校招已经启动,相信很多小伙伴有和我当年一样的困扰。国内高校开辟大数据相关专业正好一个毕业季过去了,那么作为一个科班出身的学生,该怎么准备校招呢? 本文是在和读者交流的过程中,在网络上搜集到的一些面试资源,只要自己掌握方法并且准备充分,其实很容易在面试中脱颖而出。 其实当时的我也非常发愁,觉得自己什么都不会,又不知道该准

网工必知的《网络端口号大全》,看这一份足够了

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 咱作为网工,了解和掌握常用的网络端口知识可以说是必不可少的技能。 熟悉各类网络服务和应用程序所使用的端口,可以帮助我们在工作里更高效地配置网络设备、优化网络性能、诊断网络故障等。 在遇到无法访问某个网络服务的问题时,检查相关端口的状态往往是排查问题的第一步。 今天就来说说端口这

如何制作一份可以快速拿下国外客户的报价表(附报价单模板)

做外贸报价技巧是每个外贸业务员必须学会的一个东西,外贸报价也是有很多技巧何需要注意的地方,今天就来给大家分享一下,如何制作一个让国外客户快速下单的报价表。这个是外贸小白变销冠的第六篇--报价篇,建议收藏,文末有报价单模板。 往期回顾:如何从外贸小白如何变成外贸销冠 往期回顾:外贸干货:如何写出一封高回复率的开发信 往期回顾:如何高效回复国外客户,让客户快速下单 往期回顾:做外贸如何判断国外

迎接开学第一天!请查收这份2024开学必备好物清单!

新的学期正悄然来临,开学第一天校园里即将迎来一张张充满朝气的面孔。无论是重返课堂的老生还是满怀期待的新生,开学季总是充满了新的希望与挑战。为了帮助学生们更好地适应即将到来的学习生活,我们精心准备了这份2024开学必备好物清单。从提高学习效率的智能设备到保护视力的健康科技产品,再到提升日常便利性的实用小物,请查收这份2024开学必备好物清单!接下来,让我们一起探索那些能够让学习变得更加轻松愉快的好物

这里有一份面筋请查收(五)

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 欢迎跳转到本文的原文链接:https://honeypps.com/talk/interview-5/ 这里讲述的是一家公司,简称I,当天上午面完公司B之后,打车到火车站坐高铁赶来面试,午饭也没吃,这次面试的比较久,从下午15:30到19:30,主

这里有一份面筋请查收(四)

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 欢迎跳转到本文的原文链接:https://honeypps.com/talk/interview-4/ 这里我连续介绍三家公司的面试,一家是只有一面,还有两家是面完一面就没去了,没去主要是当时一周面了6家而且是在不同的城市,就选择性的挑了这两家没去

这里有一份面筋请查收(三)

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 欢迎跳转到本文的原文链接:https://honeypps.com/talk/interview-3/ 经过前面两次的面试,这里就马上转到第三家公司了的面试了,这里简称B,工作地点和上一篇所讲述的W公司在一个城市,是面完W之后第二天去的,说出名字的

开放一份自己实现的Android版智能拨号器

1、 显示联系人列表(点击列表,快速拨号)   2、 不同的搜索方式(汉字模糊匹配,按姓氏分组,中文拼音缩写查询如张三,ws,全拼查询 zhangsan)   3、 语音拨号(支持命令:拨打电话,打给xxx,打电话给xxx,发送短信)   4、 短信发送,可以根据不同节日发送预定义短息,可以自定义短信   5、 发送短信时,可以对接收短信的联系人添加、删除   6、 短信发送记录   7、左

一份土豆丝的自白

ABOUT ME   Hei,what’up ,我叫土豆丝,有着各种各样的做法,是大家餐桌上的家常菜,出镜率很高哦,操作简单,如果实在不知道吃什么了,那就来一盘土豆丝吧! Preparation 土豆:削皮、洗净后将我切成丝,小心千万别切到手,这里有一点要注意:一定要用清水多给我洗几次澡,洗掉身上的淀粉,这样吃到嘴里就是脆脆的,而不是黏黏的。 大蒜:请将我的兄弟大蒜切成

2024 MongoDB中国用户大会倒计时2天!请查收专属参会指南

距离2024 MongoDB中国用户大会即将开幕仅剩2天,我们非常期待与您共同探讨和分享最新的数据库技术与应用经验。为了确保您能够顺利参与本次会议,请查阅属于您的专属温馨提示! 活动时间 8月31日09:00-17:30 签到开始:08:00 现场参会者请携带您的注册确认邮件或短信二维码,以便快速签到。 现场备有英文同声传译设备,如需租赁,请携带身份证。 在活动正式开始前,我们也为与会的