超详细面经:工作两年不到裸辞,投了进百份简历...
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
作者 | 胡小华
# 前言
此篇记录一下找工作的经历,本人从毕业到现在工作一年半了,目前处于离职找工作中,毕业7k目前想找10K-12K左右的,做过项目管理,项目开发,但是目前面Java貌似项目管理的经验丝毫没有作用,下面的篇幅将记录一下找工作的相关问题。
这里稍微唠嗑一下,建议各位想跳槽的小伙伴尽量在职找工作,我之前是在职找工作的,拿了一个10K*14薪的Offer,但是是外包,考虑了很久最终辞职准备尝试,实习三天后感觉外包的工作氛围实在太差,毅然就离职了。当然现在还是有点后悔,之所以离职就是为了获得更好的生活,然而技术方面的追求还是受不住外包无外网的约束,这里之所以推荐大家在职找工作,一个很重要的原因是你在职找工作时相对来说更有底气一些,并且短时间内没找到也不会那么压力大,离职后考虑生活的压力,找工作的底气发现还是弱了许多,毕竟生活还是要过,我是5.18号离职的 加上外包实习的3天,截止到今天已经近10多天了。由于今年疫情的影响加上六月毕业大军的轰炸,个人可能觉得岗位少了许多。中间陆续面过1-3家,简历已投100多份,大部分石沉大海。了无音讯。
不过生活还是要继续的,我相信的自己的能力,也期待未来的成长。
关于我现在的心态,普希金的《假如生活欺骗了你》说的就很形象:
假如生活欺骗了你,
不要悲伤,不要心急!
忧郁的日子里须要镇静:
相信吧,快乐的日子将会来临!
心儿永远向往着未来;
现在却常是忧郁。
一切都是瞬息,一切都将会过去;
而那过去了的,就会成为亲切的怀恋。
# 面试总结:
2020-06-04 深圳云麦科技 10K-20K Java中级工程师
状态:已凉 上午10点的面试,我8点多就到了,在楼下附件转了一下,顺便找了个地方看了会面经,风太大,吹的人都有点懵逼,保安又不让那么早进去。只能在外等候,赤湾总部大厦的电梯有点先进,捯饬了5-6分钟才上去。哈哈,想起来都有点呆,当时没人一个人捯饬了半会,9.50左右我就进去了,开始填写个人资料,又是一家查户口的,很细的那种个人表。然后开始笔试,笔试结果偷瞄了一下84分,emm,总的来说考比较基础和广,之后就是等待和面试了,下面是面试题目,一面就挂了,也可能是面试官着急去吃饭,没有自我介绍,直接就开始了 然后问了问题直接就说我可能不太合适。卑微的程序员生涯呀。哈哈
1.简单介绍一下你之前的项目及职责:
回答的很粗,今天的状态可能有点懵逼,主要是粗的讲了一下项目及负责的模块
这里我在重复表述一下方便后续面试的时候多熟悉:
我:嗯,好的,我之前的话是在一家专注数据安全的公司,主要经历的项目有两个,最早一个是关于数据库漏洞扫描及评估的系统,最近一个是基于大数据人工智能分析的数据库安全综合治理平台,那么我这里就简单介绍一下这个综合治理的项目,它的业务场景的话是基于我们公司的现有的多个安全产品数据,像数据库的审计数据,状态数据,漏洞数据,脱敏数据来进行综合的大数据统计及人工智能分析,那么我这边主要负责的模块主要是数据采集整合,数据入库查询,数据统计匹配,以及数据库对象管理及扩展功能的一些实现。它的一个技术架构为多个安全产品的数据通过上传到kafka,由自定义的消费者进行消费入库处理,入库对象包括Mysql和Es,Es一般用于存数据量比较大的,mysql一般存数据量比较轻量的。消费者消费的过程中会结合数据库的扩展功能敏感数据识别的结果来进行敏感数据访问的相关统计,这部分的数据由于操作非常频繁,为了速度和性能的考虑我们将相关的参考和识别结果存入了Redis。
个人的工作职责包括以下几点:
1.辅助团队的一些管理工作,像计划安排,每日站立会,进度统计汇报,转测安排,项目部署等。
2.其次就是负责自己的开发模块维护了。
2.看你简历写了集合,你说以下你使用的一些集合吧
我这边项目用的比较多的是ArrayList,LinkList等一些集合,其次也会用到Map,像HashMap之类的。其他一些Set偶尔也会用到。
补充一下Java集合接口情况
这里附加问了一个有区的优化问题,ArrayList从头删和从尾删出某些元素有效率上的区别么?之前一直认为是没有的,但实际上从尾部开始遍历删除往往能提高效率
这里假设我们要删除a,b,c。给定数组abcd来进行前删除和尾删除
3.你用过Hashmap的话简单介绍一下hashmap和HashTable的区别吧
hashmap的话它是线程不安全的,hashtable的话他是线程安全的,hashmap访问较快,table访问较慢,hashmap运行key value为空,但是hashtable不运行为空
4.看了一下笔试题,有一道是关于sychronized和volatile的。请将一下你对Syschronized的理解
Sychronized一般是用于控制多线程同步互斥的,常用的地方包括方法,代码块,以及类,根据锁的对象分为对象锁和类锁。
volatile一般是修饰变量的,主要的特点就是内存可见性。
5.你熟悉单例模式么?如果给你这两个关键词让你设计单例模式你会怎么设计?
单例模式的话我的理解是该对象只能实例化一个对象,一般分为饱汉式和饿汉式,主要的设计原则包括
1.在内部声明自己的public static对象,
2.private封闭自己的构造方法
3.提供对外方法获取该对象,
这两个关键词一般是用于多线程安全问题的,对于饱汉式一般是默认初始化生成,不存在线程安全问题,而饿汉式是在调用的时候初始化的,那么初始化的过程中就有可能会发生线程安全问题。比如第一个线程初始化对象执行到了new实例的前一秒,第二个线程也是一样,那么就会生成2个对象,这与单例的设计相违背,所以我可能会包syschronizd放到实例化那基于类锁起来来保证只实例化一个对象-----------个人事后所想的,实际可以,但是短时间没表述出来。
6.你知道单例模式多线程下的安全问题么?了解双重检查单例模式不?
这里的话我 由于前一个问题回答的不是很好,这里就直接说技术盲区了。
7.看你简历熟悉多线程,简单说下Java的线程池的几种类型和应用在哪些地方吧?
线程池类型:
newFixedThreadPool 固定大小的线程池
newCachedThreadPool 可动态扩展的线程池
newScheduledThreadPool 可定时的线程池
newSingleThreadExecutor 单例线程池
https://blog.csdn.net/weixin_40809627/article/details/103793030 应用不太明白要说哪方面 我大致介绍了四种类型的特点
8.谈谈Springboot的aop吧
Springbootaop其实就是SpringAop,传统的面向对象编程是类似于过程似的从controller->service->dao->db类似这个过程,aop的话其实就在传统过程编程中增加了一个前面,在原有逻辑之前或者之后做一些其他的扩展操作,并且这些操作不会影响原有的流程
常用的Aop应用类似日志记录,事务处理。
9.看你简历说了解Spring,Spring容器你了解么?
这里回答不上,脑袋中一直回现Spring bean的生命周期,大致讲了对象扫描-》beanfactory->beandefined->注入初始化代理对象 Spring管理的是代理对象。应用了Cglib,JDk动态代理之类的,感觉是没回答到点上。
这里附上资料,不确定是否是问的这块
。
10.除了Spring的bean管理,你还用过Spring的哪些功能
这里每太明白,一直以为是问Spring除了Bean管理还有哪些功能,回来才发现是问的Spring的相关组件,实际知道,表述不理解就没回答上
11.你们项目Redis主要是干嘛的?有了解过Redis的缓存穿透,缓存淘汰策略不,对于Redis和mysql数据的同步问题一般是怎么处理的?
大致表述了Redis的用途,
缓存穿透的话是大量的无效key查询导致内存耗尽缓存穿透。 答的时候完全理解错误
缓存淘汰策略不太熟,没回答上。
看了一下我项目中的Redis架构原来和传统的缓存架构用处不一样,项目中Redis仅用来存和取一些经常需要用的数据,数据来源是我们程序分析生成的,而传统的缓存一般是用于加快查询速度,免去数据库访问的过程。直接访问缓存加快访问速度。所以导致这块的知识点比较薄弱
这里整体了解一下
首先对比下我的项目架构和网上的项目架构
通过对比架构,我们能发现实际上redis单独使用作为一个快速访问数据库时是没有缓存穿透(击穿),雪崩问题的
实际上缓存穿透,缓存雪崩是基于Redis作为缓存的情况下,那么
1.缓存穿透指的是应用程序大量查询Redis中没有的key,导致请求全部过滤到数据库,但是数据库也没有对应的key,返回null,从而导致大量数据库null查询增大数据库压力,有可能造成数据库宕机
穿透的解决办法一般是合理规划key,其次也可以使用布隆过滤(https://www.cnblogs.com/cpselvis/p/6265825.html)掉非法的key
2.缓存雪崩指的是Redis短时间内大量key过期,导致查询直接给到了数据库,而导致数据库增大压力,类似于穿透但又不同于穿透
设置key的过期时间尽量错开,分布式部署。
3.Redis缓存淘汰策略:
在介绍Redis淘汰算法时先介绍下常见的淘汰算法
12.看了一下简历,去年毕业。emmm可能你的工作年龄不太符合公司的要求,技术方面还有待加强。感谢您过来参与面试
虽然是19年毕业的,但是我觉得自己能吃苦,乐于学习,在上家技术的宗旨是能完美解决业务的技术就是好技术,我觉得任何一个新的技术只要花一定的时间去应用学习,上手使用一般来说都比较快的。站在公司的立场,能解决业务的开发就是好开发,我目前是这么理解的,后续也会加油扩展自己的知识面,来提升自己技术能力和广度。
继续加油吧!!!
往期推荐
扫一扫,关注我
一起学习,一起进步
每周赠书,福利不断
﹀
﹀
﹀
深度内容
推荐加入
最近热门内容回顾 #技术人系列