小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
前言
我写公众号差不多有一个月多点,也收获了一部分的粉丝,粉丝现在还不算多,也是因为我也没有如何宣传,也可能文章内容还需要改善
写公众号这一个多月收到了些留言,都是关于大学期间的迷惑问题,来看下
我首先说下我自己的情况吧,读的大学是燕山大学,在美丽的河北秦皇岛,美丽的旅游城市,个人还是很喜欢的,我们学校对面就是美丽的大海,感受一下撒
(秦皇岛17年的荧光海,真的美)
19年7月份毕业,先是就职于国家某网研发部门,肝了半年多,后跳槽到某厂研发部门。为什么跳槽呢?说个容易挨打的话,太闲了,钱的话,中规中矩,肯定比不上字节。
我是有梦想的人,想要学习技术变强的人,所以还是决定告别舒适区,现在的你是否还在舒适区呢?可曾还记得自己的初心?
说问题
我想先来分析一下关于迷茫这个问题,再说一下我的学习方法,大家可以欣赏一下,取其精华去其糟粕~~
**大学期间,好迷茫啊
**
如果你是个心理指导大师,那你听到的最多的问题肯定是“迷茫”,迷茫这个问题存在于哪个群体呢?任何群体,年轻人居多,为什么呢?在这个物欲横流的年代,伴随着房价物价飞速上涨,年轻人的压力也是越来越大,很多人都是为了工资高而转行IT,无论是在校大学生、还是已经工作的,很多其实都是为了工资高而进入这个行业,并不是因为内心的热爱
如果我说我热爱IT行业,我热爱写代码,讲道理,我自己都会脸红,我之前听过一个比较有趣的老师讲过这个一句话:进入IT行业的有几个是为了梦想,都是被现实逼去的,为了生活。我觉得还是有一些道理的
你如果给我说,你喜欢写代码,喜欢加班,甚至偶尔来个通宵,我无话可说,优秀,送给你
我在网上找到的一篇公开课,大家可以看一看
人们喜欢确定性,模糊和不确定会让人无所适从,我觉得说的很有道理,迷茫是一种人生必经的状态,无论在哪个年龄段,都会存在这种情况,越是长大,对迷茫的感觉越是深刻,从高考开始,我们就不得不为自己的将来做决定,考哪所大学,选什么专业,以后进入哪个行业,行业前景如何,薪资如何,何时买楼买车娶妻等问题接踵而来
**你说的很对,可是我想知道如何走出迷茫区?
**
假设现在的你在读大学,这个时候可能是你人生中压力最小的一段时间,请珍惜这段时间,最起码我是这样认为的,当然我没有说大学中没有压力,只是说这肯定是相对来说压力最小的一段时间,你不用考虑太多的经济的输入和输出情况,你也不用太多的去考虑外界因素,你的任务最重要的就是学习
我是不赞成大学去找各种兼职的,至于各种社团,大一参加参加也罢,反正闲杂时间很多,可以去多结识些朋友,但是我认为这些也就仅限于大一,到了大二以后,你需要把更多的注意力去转移到学习上,放弃一些“无意义”的外交,多把时间留给图书馆和体育场,多把时间分配给自己的身体和脑袋
现在社会又有几人在大学期间是真的缺钱,穷的揭不开锅,我觉得应该不大存在了吧,退一万步讲,你真的是这种情况,导员和学校肯定也会帮助你,可以申请助学金,等我们工作以后有能力偿还即可
既然我们不用为了自己的生计发愁,下一步该干什么呢?
不会吧不会吧,难道你真的相当一条咸~鱼?是的,我也想当一条咸鱼,如果可以的话。
开个玩笑,我们不用为了自己的生计发愁了,这个时候你只需要考虑一件事即可,你的未来,这个未来不仅限于通过学习来完成,但是对于大多数人来说,这是捷径,你能实现自己价值的最佳捷径。我也见过一些能人,在大学期间就开始创办了自己的工作室,挣得了人生中的第一桶金,有的可能不擅长专业知识,可能就改变自己的人生的学习方向,我是燕山大学的,我的隔壁是河北科技师范学院,我认识里面的一个男生,比较擅长交际,再加上秦皇岛是个旅游城市,他利用自己的广大人脉去售卖秦皇岛各大景点的门票,赚得自己的人生第一桶金,现在也开了自己的工作室在秦皇岛,专门搞旅游这块
但是大多数人的未来是主要通过学习来完成的,在大学期间,是提高自己闯入社会门槛的最佳时间,同样的大学四年,一个人如果充分利用,去丰富思想和强身健体,做一个自律的大学生,另一个人只知道利用各种娱乐活动去麻痹自己的思想,抛开各种家庭不说,他们俩毕业的时候差距会一下子变得肉眼可见。
如果你是工作中,请记住一句话,一定要记住你的初心,并且务必坚持下去;工作中可能会遇到形形色色的人,而且会遇到各种各样的环境,在各种环境中如何去更好的利用,来提升自己的技术能力,是很重要的;如果工作很忙,会很容易是一个人盲目,我看过一篇文章,说在资本家的眼里,只要剥削了劳动者的时间,便如同剥削了他们的思想,使之为我所用,在我的控制范围之内,如今社会各种的996现象,不正是印证了这一点?不要因为忙碌而变得思想盲目
**身边人都不学习怎么办?
**
我觉得这个问题,既存在于学生期间,也存在于工作之后。
如果你发出这样的问题,我想告诉你一句话:尽快的成长起来吧!为什么我这么说呢?你想啊,如果你是一个思想很强大的人,或者说你是一个有自己的思想的人,你会因为周边人不学习而变得对自己产生疑惑吗?
**学了很多知识点容易忘记怎么办?
**
其实说实话,我几年之前也是有这个疑惑的对这个问题,为什么这么说呢?我上大学的时候也是学习很多知识点,有的很多知识点随着时间的推移就追渐记不清了,我请教了很多人,学霸学渣、工作小白和工作老手,可以说普遍存在这个问题,网上很多对于这种问题的解决办法就是重复记忆,这个方法属实没错,但是缺少点灵魂,人是有个记忆曲线的,只靠瞬时记忆可以记住很多东西,但是过后如果不去花时间加深这个记忆,那记得知识点肯定就木得了~~
不要太相信自己的脑子,要相信文字,脑子是会骗自己的,简单分享一下我的学习方法吧~
-
扫盲,看视频快速学习一个知识点(穿插实战,上手很重要)
-
加深,个人去练习完整实战项目,遇到问题尝试各种办法去解决(先思考问题原因,一定要先思考问题原因!尝试自己解决,无法解决去查资料,再无法解决找大牛),解决完之后,如果问题有借鉴性,记录下来
-
钻研,这个是个长期任务咯,这个阶段我一般都是看书+看官方文档+网上资料学习,这是一个提升自己的过程
上面前两步是知其然,然后第三步的目的就是知其所以然,总之,这是我个人的学习方法了,大家可以欣赏下,合适自己的才是最重要的
这样我就能回答上面的问题了,知识点忘记肯定是会忘记的,这个问题不用疑惑,为什么呢?你要是天天不接触某个东西,必然会变得生疏,有句话叫做熟能生巧,知道撒?但是如果你像我上面说的学习方法中的第三步那样花时间去知其所以然之后,你就不会有这个疑惑了,这个问题在你心中自然就解决了,因为你对这个东西的运行机理了然于心了已经,即使你某个知识点忘记了又如何,用到的适合快速拾起来不就好了
就像企业面试Redis,它要是问你set命令怎么写,你是不是觉得面试官有点不太聪明的雅子,当然人家也有可能只是随口一问,更多的面试官会问,Redis特点、应用场景、Redis分布式锁、缓存雪崩和穿透问题等,这些才是考核你内功的地方
谈面试
上面说了些类似于解惑的一些问题吧,迷茫可能对于一些人来说是最让人头疼的问题了,一旦走出这个迷茫区,你会发现无论你的技术还是你的视野都会突飞猛进的进步,对自己的技术路也会更加清晰
接下来说说面试吧,大家应该最关注的应该就是面试了,Java面试到底问些什么问题,马上毕业了,马上跳槽了,我应该如何准备面试,面试一般问些什么啊,面试中的重点在哪块,我该如何投简历等等这些问题
**第一部分:如何准备面试和投简历
**
准备面试如果用心的话,可以说是个技术活,既要把握战线时长,又要把握住各个技术点的火候,个人建议准备的战线大概在两个月左右最为合适,当然了,准备面试也是要看基础的,如果你觉得你需要更多时间去准备面试,当然也是可以的。
**投简历:**互联网企业的简历投递途径主要是内推、官网、一些招聘软件(牛客、Boss这种),都大同小异,如果可以的话走内推是个很不错的选择,会加速整个拿offer的进程,岗位类型大概就是技术、产品、测试、运维这些,根据自己的意向去选择相对的岗位,我来简单说下这几个岗位
**技术的话,**根据你的语言去选择,Java、Python、C++ 、Go等,去了公司基本就是接触和这个语言相关的技术,其实每个语言对应着很多的岗位类型也是,Java可能用来做Web应用、大数据、安卓等,Python可能用来做大数据、数据分析、爬虫等,C++可能用来做桌面前端岗位,这个一般需要懂QT,还有服务器后端、图形图像处理、音视频处理、需要更多的专业知识,还可以用来做嵌入式开发,Go属于一种工程语言,主要用于服务端开发,其定位是用来开发“大型软件”的,其实湿兄对于这个语言暂时了解的不多也,有兴趣的可以去研究研究
**产品的话,**就要根据每个公司的业务来说了,现在产品经理的权利和影响力也是越来越大,很多大公司也是对产品经理这个岗位的要求越来越高,做产品的定位是根据用户的需求,确定开发何种产品以及产品的细节,选用何种商业模式,和研发人员去协调相应的产品的生命周期,产品最看重的能力可以说是对互联网行业有一定的预测能力、分析用户的需求和心理、以及团队管理和沟通能力这些
**测试的话,**就是根据需求去进行公司系统相应的测试,测试也是需要一些专业的技术知识,比如需要Postman这种软件去测试后台提供的接口,需要相应的SQL去查询数据库数据等,测试相较于开发来说应该是比较轻松的,所以很多公司这个岗位相对来说,小姐姐比例还是比较高的,当然只是相较来说
**运维,**则是需要更多的去维护环境,以稳定、安全、高效为三个基准点,确保公司的业务能够为用户提供高质量的服务,运维人员需要进行日常巡检发现服务可能存在的隐患,对整体架构进行优化,通过监控、日志分析等及时发现和响应服务的故障,使公司持续稳定的为用户提供服务
**第二部分:面试高频热点
**
进入重点,面试内容,这个环节可以说是很刺激了
首先我们需要自我介绍,个人感觉自我介绍我没必要太多啰嗦,重点就是不要过多重复简历,突出你对技术的热情,并且可以适当的在开头把面试官往自己熟悉的方向去引导
面试官肯定会对简历中的技术项目进行刨根式的提问,对于学生来说,如果没有具体的项目,总有自己练习的项目吧,写在上面,加上所用技术点,对于写在简历上的项目一定要做到非常非常的熟悉,为什么这么说呢?因为如果你的项目很不错,面试官肯定会对你接二连三的提问,直到问到你不会为止,但是如果你不熟悉,像是没有做过这个项目是的,那岂不很尴尬,所以如果你对自己的简历进行包装的话一定要量力而行
接下来我主要说下面试高频热点,教你如何去应对这个面试战场,这个环节就是考查你的硬本事的阶段了
集合类系列
集合类这个应该是大家最熟悉的了,也在网上看过很多相关的面试吧,反正我上大学期间看过不少,其实这个大家应该也很熟悉了,如果不熟悉的话,说明该补课了,大家可以看看我的集合系列文章,其实如果让我说会有很多知识点,后续我会出一个关于这块的专门的面试篇
快速失败和安全失败的不同,HashMap的一些参数以及为什么,Arrays.asList特点,各个集合是否能存储null值这种
**并发编程系列
**
synchronized和volatile关键字,synchronized的对象头、锁升级和优化、字节码层面、openJDK层面以及硬件层面的实现,volatile底层实现原理,乐观锁和各种锁问题,CAS底层原理和ABA问题
java.util.concurrent这个并发工具包,这个工具包还是很重要的,大致分为以下几类:
-
juc-locks锁框架:提供了更多的锁技术
-
juc-atomic原子类框架:乐观锁机制的原子类
-
juc-sync同步类工具:常用的同步工具
-
juc-collection同步集合类:线程安全的集合类(ConcurrentHashMap、CopyOnWriteArrayList)
-
juc-executors执行器框架:线程池(核心参数、1个使用原则和4个拒绝策略)和各种执行框架了解(AQS底层)
线程和进程问题,应该是比较常见的问题了,线程的各种方法要了解(wait、sleep、join这些),以及每个方法使线程进入哪种状态(阻塞、超时阻塞这些),如果你知道什么场景用线程好,什么场景用进程好,如果知道nginx底层用了什么,面试官直接被你拿下
算法组合
基础算法可以说是进大厂必须要经历的一道关卡,这块一般就是基础的算法,我个人感觉没有太负责的技巧,牛客、乐扣刷起来,然后总结各个数据结构和算法的特性,要是能够达到都能熟练运用的境界,这关没啥大问题,现在大厂一般都会有在线手撕代码环节,给你个网址,给你个需求,直接开撕代码,面试官在线指导~
算法这个东西网上一些好多总结的,各种排序算法尤其要熟练,以及各种数据结构的特点,这里我暂时不多赘述,当然以后我肯定也会出算法系列的,我个人觉得这一关还是比较好过的,应该把更多的重点放在一些专业知识点上
**JVM系列
**
jvm这块,如果不是专业搞jvm的,大家适度学习,因为太深奥了,设计之美,以Hotspot举例给大家介绍下:
比如你需要清楚jvm的内存结构,如果你能够知道后续版本对jvm优化,改变了哪些内存结构,为什么这样做,加分
四种垃圾回收算法(标记清楚、复制、标记整理、分代收集),如何分析对象是否存活,十大垃圾回收器,各种垃圾回收器的优缺点,使用场景,以及jvm默认垃圾回收器,内存分配和各种回收策略,如果你能和面试官聊聊CMS、G1、ZGC垃圾收集器,面试官当场发offer
Hotspot算法实现,GC Roots,jvm常用的参数,常见的oom情况,四大引用以及经典的例子ThreadLocal
Class类文件的结构和虚拟机的类加载机制(双亲委派模型),以及Tomcat破坏双亲委派模型,运行时的栈帧结构
更深一点的,如果你能说出CMS的七个阶段,还可以说下concurrent model failure、background和foreground collector,写屏障和增量更新这些,面试开始流口水
如果你能对于JVM的参数的各种调优,各种命令以及常用的检测工具(对cpu100%的排查和死锁的检查),还可以聊聊对象的逃逸分析、栈上分配、JIT编译器这些,面试官原地高潮
如果对于Hotspot算法实现中能聊聊Remembered Set、安全点和安全区域,再能聊聊当下很厉害的G1中的Card Table、Collect Set、写屏障和SATB、yong gc和Mix gc的完整流程、marking bitmaps和TAMS这些,告诉你,你稳了
jvm这块知识点太多了,也太深奥了,适度学习
**设计模式系列
**
这块吧,对于刚毕业的学生来说,可能也不会过多的深问,但是还是了解一些常见的设计模式最好,这块的核心其实在于理解,尤其是能说出自己的看法和使用场景为好
千万不要只回答一个单例模式,并不是说单例模式不重要,相反,很重要,甚至多种方法,但是尽量去了解一些别的设计模式,这样才显得你会更多的思考,比如代理模式、责任链模式、适配器模式等
**框架系列
**
主要针对于spring家族(spring boot、spring cloud)来说,现在市面上也有很多采用docker+k8s的,当然还有dubbo、zookeeper、elasticsearch这些,了解的越多越好,但是阅读源码请适度,不要为了阅读源码而阅读,要理解其设计含义,否则,得不偿失
Java业界流传,不会spring可以不用做Java开发了,当你对spring掌握的炉火青春的时候,你可以拿下百分之八十的公司,spring家族实在太过庞大,无从说起,我就说一些基础的必须要掌握的吧
springIOC和AOP这些应该是最最最基础的了吧,我相信一提这个,大家应该都知道,ioc控制反转,把创建对象的权利交给spring容器,aop面向切面编程,可以实现对于类级别、方法级别等的切入编程,你以为这就完了?
spring aop的底层开启注解的原理,如何实现的,动态代理和静态代理的方式,优缺点,为什么jdk动态代理必须要实现接口(不要告诉我这是规范),spring有哪些后置处理器,aop是哪个后置处理器完成的,aop和aspectj的关系,aop在spring中的流程,aop使用场景,cglib底层实现方式这些
ioc的生命周期、Spring中的@Autowired和 @Resource、Spring中的循环依赖(为什么要这样设计)、Spring中的bean的创建流程、Spring中的生命周期的回调、Spring中的5个核心后置处理器都做了什么
ioc和aop算是比较基础的,面试官也爱问这些,证明你的理解深度的机会
接下来是spring boot中的各种底层原理,watch机制,spring cloud中的各个组件,使用场景等,spring家族太多了,也写不完,自行研究,这一块水深,适当阅读源码,掌握自己的思考技巧,有大局观
MySQL系列和Redis系列
MySQL应该是最常用的数据库了吧,in和exists关键字的区别、count关键字(count(列名)、count(常量)和count(*)用法的区别),mysql中Hash索引和B+ 树索引,优缺点,聚簇索引和非聚簇索引,回表搜索,建立索引的成本,联合索引,最左匹配原则,explain命令优化
mysql架构流程,事务(这块绝对会问),事务的并发情况下存在的问题,隔离界别,数据库锁,表级和行级,悲观锁和乐观锁等等,太多了
Redis系列应该是互联网最最热门的技术了,也是最最吸引人的技术了,利用其高效特性成为各大公司缓存首选,大家可以读读我的Redis系列文章
Redis类型、内存模型、内存编码、RDB和AOF持久化我不用多说了,不知道赶紧去补课,Redis的主从复制,哨兵模式,集群模式,各种模式的优缺点,如何为公司项目选型,Redis在使用过程中存在的问题以及如何解决(读写不一致、网络中断这些),Redis缓存雪崩、缓存击穿、缓存穿透这些问题场景以及解决办法
**消息队列
**
消息队列这块,不多说了,其实我觉得针对一个MQ去深入了解底层原理即可,没必要把每一种都学的很透彻,当然如果你想这么做,我没有说不好
可以选择阿里的RocketMQ去学习
**分布式和微服务
**
理论知识点比较多,CAP理论、BASE理论、Paxos & Raft & ZAB 一致性算法、2PC、3PC、TCC、最终一致性、 Seata等等,关于分布式可以学习分布式锁(Redis实现和Zookeeper实现),分布式事务这些,诞生场景和注意问题
微服务就是一个理论,把公司中项目按照业务来拆分,更好的管理模块,比如我们可以把用户模块单独拎出来,或者把用户中的登录模块单独拎出来作为一个微服务,来为其它的模块提供服务,学习spring boot和spring cloud,如果能学习docker和k8s这些,也是很好的
**网络系列
**
ISO的七层协议与TCP/IP的四层协议、HTTP协议和各种状态码、请求方法和头部字段、HTTPS的原理、TCP三次握手、四次挥手(经常问)、负载均衡算法、各个JDK版本的特性、常见linux命令、CDN、cookie与session、XSS与csrf、DNS解析过程
第三部分:总结
面试回答一定要理清思路,如果按条来给面试官分析问题,这是最好的,脸上要漏出自信,同时要表现出对技术的渴望,如果遇到面试官问的问题你很清楚,那最好不过了,这个时候不要激动,要一条一条的去给面试官讲解清楚,如果遇上不会的问题,也不要慌,这很正常,如果你整个面试全都会,要么面试官水,要么就是你太强~~
这是我在某个网站上看到的某位程序猿的女朋友写的文章,希望可以治愈你,也可以给你更多的动力去学习,顺便关注一下湿兄吧,关注不迷路,我会给大家提供更多的优质文章:
你知道的越多,你不知道的也越多
叨叨
真的不关注一波吗?这真的是一个不错的公众号啊,后续我会逐渐将各种资源给大家提供出来~
船长,一个努力的、普通的平凡的互联网人