大一大二都是土木工程专业,看了峰哥的转专业经历后,坚定了转专业的想法。于19年的9月转专业到计算机,开始自学编程。3月份先后拿了趣头条、今日头条的后端实习offer,目前已实习一个月。我尽量用简洁的语言说一些关键性的东西,希望对转行和对学习方向迷茫的小伙伴有一点帮助。
转专业的起因是土木发展前景比较差,又发现自己对编程很感兴趣,在mooc上学了下浙大的数据结构。因为成绩不错,大三开学正式转到计算机专业(其实当时转专业承受的压力还是蛮大的)。
大三上学期同时修大一大二大三上学期的计算机专业课,当时一直想的是想考浙大的研究生的,于是按部就班地去教室上课,但是学着学着我又开始质疑我学这些知识的意义,就像我当初质疑学土木工程的意义一样,还是准备找工作吧。
但是一学期有十多门计算机的课,课业负担还是比较重的,那段时间也还是很努力的,我学习一门课程的思路几乎都是:先搭好知识框架,把重要的知识点找出来并明白它们在整个课程脉络中的地位,然后考前疯狂刷题突击。用这种学习方法我在每门课上花的总时间都不长,以比较短时间学到了大部分核心知识,既以平均80分的成绩通过了期末考试,也在这期间也能腾出一些时间来自学一些我感兴趣(对面试有用的)的技术。
当然啦,很重要的前提就是要求你得有分清主次、规划自己的能力。1月10号放假后正式开始准备春季实习生招聘,从mooc网上找了些课程看,参考了峰哥提供的几个项目,网络 数据库 操作系统跟着面经贴着重学习了下高频考点,面试前一周刷了50道leetcode上的高频题目。
进入三月份开始投递简历,我投递的都是后端实习,第一个面试是趣头条,面完立刻发offer。
先问这个项目是怎么做的吧,说说
NIO和BIO的区别吧,如果客户端突然断了服务器怎么检测,服务器怎么知道哪几个包是一个请求的。
说说
MySQL索引,出了一个建索引的题,给定查询需求,让你确定复合索引的各字段顺序。
数据结构自学过啊?说说常见的排序算法吧?巴拉巴拉,说说快排吧?
就是每一轮随机选一个随机数把它的放到正确的位置上...
如果不随机的话时间复杂度在原数组有序的情况下容易n方
String,StringBuffer,StringBuilder区别
给你个反馈吧:
觉得你很有冲劲,我看好你,但是还达不到阿里实习生的标准,这次不能给你过,但是会放在简历池子里。
第三个面字节跳动,从第一天技术三面,第二天hr面,第三天拿offer。
面试官:你数学好吗?我说还行吧,那我给你出一个偏数学一点儿的题:实现一个shuffle函数,就是给你一个数组你把它随机打乱顺序,要求完全随机。
我第一次说的是新开一个数组,每次随机从原数组中选择一个元素放入新开的数组中。面试官追问如果不能开辟额外空间呢?我说那就交换吧,遍历数组每个位置上的数组都和其后面随机一个数字做交换。面试官说你证明一下正确性,想了一会儿给出了证明。
LeetCode42接雨水:我知道比较优雅的做法是动态规划,奈何不会啊,最后面试官提示说也可以用单调栈解决,于是
在面试官提示下
手撕
掉
。
面试官一上来就笑呵呵的问我前两面感觉怎么样啊,我说发挥不太好但是面试官都给过了。他说那我们做一个算法题吧:抢过红包吧? 你设计一个函数,输入金额总数m和红包个数n,要求返回一个长度为n的数组代表n个红包,要求每个红包金额随机。注意红包最小单位是分。
我问了能用什么api吗,回答说给你一个random(n)函数可以1~n之间随机一个数,一共十分钟,现在还剩五分钟,写代码吧。
我的思路是求出总金额sum用分做单位,然后随机生成n-1个sum以内的数,用b
ool
marked
[sum]
来标识,如果生成重复,则需要再次生成。最后遍历这个sum数组每两个marked=true的点之间的部分都是一个金额随机的红包。
三面面试官应该是部门领导了,问我最近半年在看什么书呀,我说我半年前才转到计算机系,现在在看Java并发编程的艺术。问我以后打算学点啥呀?我说Spring Cloud 和 Netty。
hr面:大学期间你最骄傲的事,为什么不考研,怎么看待加班,我说加就完了哈哈(不是原话哈),然后又说其实我们是弹性工作日的... 最快可以什么时候入职
第一天连续三个小时的技术面试,第二天半个小时的hr面,第三天
发
offer。
三面都问了一些常规的基础知识,比如
HashMap细节相关的,cookie和session,ThreadLocal是什么,使用会带来什么问题(不会),redis的相关读写策略(我也不是很清楚),NIO和BIO的概念区别(我做过一个Java NIO的项目),Spring IoC(做过Spring Boot的项目),TCP四次挥手,还有两位面试官都让手写了SQL(实在好久没有写了,基本的语法都忘了,尴尬)
①把深入了解过的知识点尽量在简历上着重描述下,我其实准备了不少 和 锁、线程池相关的内容,不过一点儿也没问。
② 一些东西不会很正常的,面试过程中不要有太大心理压力,面试官也不会太难为:比如我简单的SQL都不会写了,面试官说:没事看来你这块不熟,我说:确实,很久没练习了。
③但是代码题还是字节比较看重的,主要分别说说我遇到题目吧(每一面都有一个手撕代码题):
1.做决定前深思熟虑,做决定时要果断和坚定。迷茫的时候可以请教他人,但需自己认清现状和自身情况。
2.时间和精力是很宝贵的,花点小钱学习一些优质的资源就是在走捷径(我用的比较多的是mooc网和极客时间)
3.学会抓大放小,分清主次。比如对于学校课程我只是考前突击,想让我平时去课堂里听课和完成作业是不可能的,相反我会在规划和探索适合自己的学习路线上花费很多时间。
4. 总是由学习收获/花费时间这个值的大小和变化,来驱动自己进行高效和有价值的学习的。 比如学技术或者做项目的时候不要太过沉迷细节,要带有比较强的目的性。我做一个项目是用到了微信支付相关内容,看了两个小时微信文档没耐心了,遂想:我花精力搞这干嘛,有意义吗,于是果断跳过这个章节继续学后面的模块。
特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:
长按订阅更多精彩▼
如有收获,点个在看,诚挚感谢