在武汉的学习情况,其他大佬们都讲的差不多了,就不多说了,直奔主题,到找工作阶段。
先说下自己的情况,双非一本科班,18年毕业,专业是物联网工程,投的不多,来深圳之后只面了不到15家,入职了一个小公司,做物联网后端平台的,很幸运,工资不高,也够养活自己了。
以下均为个人看法,有问题的地方欢迎指正。
先说一下简历,简历少写项目的业务部分,多写技能点,要写清楚你在项目中的作用,找几个关键点突出你的能力,要清楚你的优点和缺点,避免面试时候被问懵,比如多线程(有坑,慎提),或者你负责配置的MySQL/redis/nginx集群,或者做了项目部署。经过四个月的学习,基本上不会在知识方面有漏洞,但需要补补生产环境的知识,不要出去了一眼 被看出来没有生产环境操作经验。
碰到好的面试官,你会短时间从他这里学会很多东西,所以录音很有必要。碰到不好的面试官,就当来刷经验了,不用怀疑自己。这里介绍一个比较好用的方法,是一位室友教我的:把word版的简历单独简历一个文件,在你简历上所写的技能点/项目难点下边,对应的把面试题目和你的回答放在这里,因为大部分面试官都是根据你的简历来提问的,这样更方便面试完自己复习,或者面试前突击,自我感觉这个复习方法挺好用的。
来到深圳是八月初,前几次面试都是炮灰级别,但那时候大家都没找到工作,也就不怎么慌。到中后期可能周围的同学都拿到了offer开始入职了,自己就会有压力了,要相信这时候你的水平经过锻炼已经提高很多了,缺少的只是运气,继续保持状态面试就行了,运气再差不过再找一个月,不要自乱阵脚的怀疑自己。找工作就像谈恋爱,是一个双向选择的事情,有时候拿不到offer不是你不够好,有可能是你太好而公司不需要,或者有人比你更合适,继续找下去,机会还是有很多很多的。我之所以能拿到现在的offer,是因为我的专业和这个公司业务对口,也并不是我面试的时候表现有多好,我的临场发挥非常差,面试十几次,有5次以上被问到双方尬笑的程度,甚至几次是面试官问我,怎么最近你们这么多从武汉多来码离职的,就只能尬笑来回应了。所以最好不要太多人写重复的公司,撞车了太尴尬。
找工作我常用的软件就是拉钩和boss,boss有收费服务,可以充钱来让你的简历曝光率更高,个人感觉要开就趁早开个包月的(pony:不充钱你会变的更强吗?)。
看面试资料最好不要好高骛远,市面上有些资料是给高级开发看的,不用逼自己,你只有一两年的经验,或者刚毕业没经验,你不需要掌握很多新技术,你只要准备好自己的项目,准备好你简历上写的技能就行了,以不变应万变,合适比优秀更重要。基础知识也是很重要的,对于科班的来说,专业基础知识不好会扣分,对于非科班的来说,会这些可以加分,不会也不扣分,例如可以了解一下计算机网络中,数据是如何在网络中传输的,甚至是在七层网络模型中数据是如何传输的。我们现在的公司工作好多年的的前端对这个都不了解,面试的时候把这些知识提一下,都会有加分。
写一些自己感觉比较重要的面试题目,按照我自己的简历来写了,初看觉得有点多,慢慢消化完就觉得不多了。面试官问你一个问题,你要把你知道的关于这个问题的所有知识点有逻辑性的全讲出来,最好要有应用场景。说的越多越好,面试官没义务发掘你的长处,你必须在很短的时间里尽可能地把最好的你展现给他。
面试流程一般首先是自我介绍,介绍项目的时候,主要介绍你的工作内容部分的技术要点和难点,还有你是怎么解决困难的问题,怎么对项目做优化的,业务部分不是重点。还有项目有哪些不足之处可以改进的。简单来说就是推销自己,所以重点在于挖掘亮点,个人感觉有长处有短处要比平平无奇好(古天乐除外)!
还是拿谈恋爱举例,为什么有的人能桃花运不断,而有的人就不行,一部分是运气,另一部分是因为他们有自己的特色,可能一个优点就能掩盖掉其他的缺点,而平平无奇的人就很吃亏,因为给人留下的印象不深,所以别人很难考虑到自己,所以还是让自己有一些特色比较好,不过不好的方面就不要展示了。
我以面试官的角色提出了一些面试题,是我自己经常碰到的,答案就不总结了。如果有学习/心理/租房(深圳)等问题,可以邮件联系:aobusi@live.com
下边放一些个人总结的面试题,仅供参考。
数据结构:二分查找和冒泡、快排需要手写出来,其他的排序要知道过程。外部排序的原理也有考到,了解即可。稀疏矩阵的存储方式?层次遍历怎么做的,用到了哪种数据结构(队列)?如果碰到喜欢问基础的,会一直问你时间复杂度和空间复杂度,这都不难,如果有了解到面试风格,最好提前准备下。
集合框架:
常见的集合框架有哪些?(不要忘了Queue)哪些线程安全?哪些有序?为什么有序,怎么实现的?Hashmap是怎么实现的?(最好讲出来早期和现在版本的JDK的实现方式区别)知道哪些处理哈希碰撞的方式?遍历Map有哪些方式?Map有哪些方法?LinkedList是怎么实现的?(要说准确,是双向链表)ArrayList是怎么实现的?(要准确,是动态数组)ArrayList的扩容机制了解吗?Queue的poll() 和 pop()有什么区别?ArrayList的最大容量为多少?为什么是Integer的最大值-8(重点是问Integer)?
多线程:
多线程实现方式几种?线程池有了解吗?你们做的时候用的是哪种方式?为什么?如何保证多线程的线程安全?死锁有了解吗?线程终止方式有了解吗?哪种方式最好?(问最好的,一般有坑,最好回答需要结合具体业务来看,再讲各种方式优缺点)你们项目里哪里用到了多线程?
IO:
BIO/NIO/AIO的大致原理要知道,区别要详细的记住
反射:
反射你了解吗?反射有哪些方法?通过反射可以获取到这些,那具体的方法记得吗?
Socket(物联网或涉及硬件的公司很喜欢问):
Netty框架了解吗?Netty 线程模型?
XML:
解析方式有几种?你们用的是哪个解析开发包?
Spring:
IOC和AOP讲一讲。(意义,好处,实现方式,使用场景)依赖注入方式有哪几种? 事务了解吗,几个特性?事务并发有哪些问题?隔离级别有哪些?Spring 如何开启事务?事务一般配置在 MVC 哪一层?日志框架用的哪个?Shiro原理讲一讲。需要几张数据库表?
Tomcat:
Tomcat目录结构了解一下,问了就会问优化,自己搜文章看,还有生产环境怎么配置的参数也要看看
你们用的Nginx是你配置的吗?(只要你会,就说是)
Linux常用命令记得哪些?查看日志用什么命令?vim编辑器怎么使用?
Maven生命周期,常用命令及其含义
Git线上生产环境,merge的时候遇到了冲突,怎么处理?
数据库:
最好不要说只会MySQL和redis,了解一下其他的。
MySQL查询优化会吗?索引有哪些分类?有什么区别?唯一索引和主键索引有什么区别?当查询语句很耗费时间的时候,怎么找问题?MySQL索引的具体实现知道吗?b+树和b树有什么区别?sql执行过程也可以了解下。Mybatis分页怎么做的?如何防止sql注入的?为什么这样就可以防止sql 注入了?Mybatis的缓存了解吗?如果要自己设计一个orm框架,需要注意什么?
Redis:
哪些场景用到了redis?为什么要用redis,其他方案可以解决吗?常用的几种数据类型?setnx是什么意思,有什么用处?两种持久化方式有什么区别?redis部署方式知道吗?哨兵模式过程讲一下?主从模式具体特点讲一下?如何保证redis缓存和MySQL数据库的数据一致?内存淘汰策略知道哪些?
其他:
为什么要用JWT?安全吗?(不)有什么更好的方案来替代吗?Token验证过程讲一下。FreeMarker除了用作模板引擎,还能做什么?Swagger怎么用的?消息队列了解哪些,都有什么区别?
Zookeeper的原理,功能,除了服务注册和发现还用过哪些功能?Zookeeper挂了还能通信吗?部署方式?Dubbo的原理是什么?用的什么协议?和SpringCloud有什么区别?负载均衡方式有哪些?SpringBoot常用注解有哪些?和SpringMVC/Spring 比有什么特点?(特点挺多的,别忘了SB内置tomcat)SpringCloud常用组件有哪些?
Https和Http比为什么安全?Http的状态码记得哪些,都是什么意思?TCP和UDP的区别?七层网络模型知道吗?数据在这七层具体是怎么进行传输的?OSS服务怎么做的,怎么防盗链呢?
知道哪些设计模式?都有哪些使用场景?微服务项目中,如何保证两个人同时下单,不会买到同一张票?分布式事务。(CAP原理、TCC框架)
高并发高可用有哪些方案?限流算法有哪些,有什么区别?volatile了解吗?项目中用到synchronized了吗?锁有几种分类?
以后有什么规划?平时都怎么学习的?看书看哪些书?
常用的GC算法有哪些?Java内存模型介绍一下。Final、finally、finalize 都是什么用处?如果对象需要可比较的应用场景,怎么做?(实现Compartor接口或Comparable)
类加载机制了解吗?知道哪些类加载器?
Object 有哪些方法?深拷贝和浅拷贝有什么区别?
怎么理解OOP?
手写一个单例模式。
多线程在内存中有哪些部分是共享的,哪些是独享的?
了解Java并发包吗?Java.util.concurrent包。了解一下。
扩展题目:
你的优点是什么?
你在之前的团队中担任什么样的角色?
你以后的规划是什么?
平时有哪些学习方式?看书的话,看的是哪些书?
对工作氛围有什么期望?