一些思考和烦恼

本文最后更新于:2021年5月2日 凌晨

一些思考和烦恼

一、前言

2021-04-30这天我面试了字节跳动的字符业务后端开发实习生的岗位,然后在面试后,我同另一位大佬黄湘淇进行了一些面试等等方面的探讨,这些交流给我带来了很多启发,同时也带来了更深层次的思考和烦恼。

面试细节
  1. 先是面试官进行了简单的自我介绍,然后让我做个简单的自我介绍。
  2. 然后我问他,是我先介绍我的项目还是他来进行提问呢?然后他就让我介绍一个我觉得难度最大、最有挑战性、同时我觉得收获最多的项目。我选择了介绍数据科学基础大作业这个课程项目,我描述了我这个课程项目的开发过程和一些细节。
  3. 然后面试官就说,他听了后没怎么说话,然后就开始针对我的简历进行提问,(我简历上写了较为系统的学习过java,c++,python,我也不知道我怎么敢的,这三门语言都是只看过一本书而已,head first java, cprimer,python编程从入门到实践,并且很多东西都忘了。大二上除了计组,我也没用过java,数据结构都是用的c语言格式的cpp,然后python也仅限于看文档写爬虫,写点简单到抠脚的小程序,里面的很多细节也忘得差不多了,c也是仅限于刷刷数据结构,根本没有深入学习,啊啊啊,我要哭了!模板泛型、以及各种细节都相当于没学过,全忘了)。
  4. 问我对这三门语言那种最熟悉,我挑了个简单的,python吧,毕竟C++、java细节比python要多很多,同时python似乎也用的稍微多点(代码量三者差不多,www)。
  5. 然后他就说,你觉得python相比java和c有什么优点,我说python易上手,开发较java、c友好,java语言稍微有些繁琐,c++如果开发稍微大点的项目cmake也比较难,并且内存不好管理。
  6. 然后他又问,那你在使用python的时候有发现python的一些缺点嘛?我说python的性能比较差,写数据结构时很明显能感觉出来,所以写数据结构一般用c++,同时python的递归栈似乎只有1000层,因为我在参加建模比赛时用python写的递归函数会栈溢出,最后改用java来实现的。
  7. 他又问你对python的双下划线函数了解吗?我说大部分是系统函数,同时类中使用双下划线表示成员私有化,单下划线函数不能通过import导入。(这是我从书中看到的,也不知道记得是否正确,www),他也没说啥,一直在记录。
  8. 然后他问了你对mysql了解多少,我说正在学习,寒假有简单的看过一些。他问你对mysql的索引了解多少?我说索引是一种数据结构,目的是用来加快mysql的查询的,有主键索引、组合索引等等。同时索引一般用B+树实现,缺点是会占用一些磁盘空间什么的。他说啊,你对索引的了解是这样的鸭?(我中间还说了一些什么东西我给忘了)
  9. 然后他又问了,你对mysql使用的引擎了解多少,我说引擎使用的是innordb吧(没查证,记忆里是这个),其他不太了解。这里能感受到他的一些失望,hhh,其实整个过程都很失望吧。
  10. 然后他说,你对数据结构了解多少,我说链表、堆、栈、队列、二叉树、平衡二叉树、二叉搜索书、简单的哈希表、图这些都简单学习并实现过。然后他说,那出道题吧,用栈实现队列。好家伙,这道题感觉似乎有点简单,然后我问他用数组实现栈然后再实现队列吗?他说就用cpp带的栈就行了,我说我默认数据类型是int了,他说可以。但是我真的太紧张了,写了得10mins。中间还在改bug(编译没过,hhh, 因为我用的cpp,类后面没用“;”)然后自己写了简单的测试用例,运行结果正确。然后他说,要这么多次的push,pop操作码?是否可以写的再优化呢?我说,emm应该是可以的,我再看看。然后他直接说,为什么pop要返回-1呢?我怎么知道-1是什么呢?他看到了我写代码时本来如果内部没有元素,pop的话我想写抛出异常,我写了抛出异常,然后我又想赶紧写完吧,不要浪费太多时间,就返回了-1.被他看到了,我就说了原因。
  11. 然后他又开始询问mysql,问我mysql调优一般有哪些方法?我说我安装mysql后没怎么用到mysql调优。然后他说,那你之前的爬虫爬下来的数据怎么存储的?我说放到本地的磁盘中,他说哦。然后问我mysql如何产生锁啥的?emm这个问题我都给忘了,主要是真的接触不多啊!!!平时不努力,面试两行泪。然后我赶紧解释,我们这学期的软工二大作业会要用到mysql,会用mysql进行一些数据的存储、读写操作什么的。他又继续问这方面内容,我都给忘了,我就说这学期结束后,我mysql的各种操作会熟练很多(开始瞎扯)。
  12. 然后就转到了计网,问我对tcp-ip了解多少?我说寒假里为了准备学cs144也学习过(结果现在cs144进度仅限于lab0,啊,确实事情多 + 对c++的熟练度 + 电脑装了cs144虚拟机后卡的不行 + cmake不太懂。lab0还是在我找到了cygwin后才弄完的)。然后他说,谈谈tcp-ip的拥塞控制?我说应该是通过滑动窗口进行控制,其实我知道是其他的,奈何我真的记不起来了,然后就说抱歉,这个给忘了。www,学过后真的给忘了,也没来的急复习好,就花了一天看面经这些。
  13. 然后他又问了udp和tcp的区别?我说udp报文和tcp不一样,同时udp是面向无连接/消息的,udp是不可靠的。同时udp的传输速度一般快于tcp,当需要快速传输对少量数据丢失不敏感的数据采用udp比较好,同时udp广泛用于视频、直播这些地方。然后还扒拉了一些tcp的内容。
  14. 然后就开始问我对多线程开发的一些理解?具体问题我都给忘了。然后我说多线程目前没怎么使用过,仅限于了解一点点。多线程一般用于处理并发问题,通常来说能够加快程序的执行,同时每个线程都会自己维护一个栈区保存自己的一些数据。线程和进程不一样,一个启动的程序叫一个进程,一个进程可能有多个线程。(这些都是看一本socket编程书上介绍的,然后我也记得不多了,就非常凌乱)
  15. 然后他又针对我的简历上的“java、c++、python”来进行提问了,他说你知道java在new之后会发生什么码?我说抱歉,这个我真的不太了解了。后来查发现new是会调用构造函数,给前面声明申请的内存空间进行值的初始化。
  16. 然后他又问,你对c++的内存对齐了解吗?好家伙,我想这我前不久在知乎上全文看过,这还答不对?然后我就说以struct为例,内部有int,char,bool这些变量,会选择同最长的数据类型进行对其,这样可以使得cpu在读取数据是更加简单。还扯了下什么偶时序读取啥的?我tm太傻了,在知乎上看过的几乎都忘了,老师也简单讲过,然后我名词都给忘了,吐了。
  17. 然后他就说,你有什么问我的吗?这我一想,我这面试就一坨shit,肯定要抓住机会疯狂问面试官问题。然后我就说,我对自己水平很清楚,然后知道肯定过不了了,所以能浪费您一些时间码?同您进行一些简单的交流,然后感觉同您交流时,能获得同老师、同学们很一样的启发。
  18. 面试官人其实很好,很愉快的答应了。然后我就说,我这项目、成绩、奖项都没有,怎么进面试的呢?他说,啊这我不清楚,这个你得问hr了。然后他看了看我的简历说,其实大三大四的学生的简历也和你这差不太多,除非特别优秀特别厉害的一些学生。淦!虽然我知道他可能在安慰我,但是我居然有点开心???其实我在后面都很轻松的,就一直同面试官愉快的交流。
  19. 然后我问他,就您一般面试,您期望应聘者有什么样的能力之类的?他说,其实大部分学生在学校里都没什么大多的能说的项目,主要还是基本功。数据结构和算法啊、计组鸭、计算机网络呀、操作系统呀,至少很熟悉一门编程语言吧,以及如何展现出你的学习能力。其实这些就够了,实习要求其实很低,很多东西都要你来公司后学习的。然后我看你简历上“较为系统的学习过java、c++、python”,结果一问,你基本都不知道,所以就在你简历上找其他的提问,问你项目,你项目也只是调个包,你也没说细节什么的,问你mysql你也不懂,问你计网你也不懂,所以很难啊。
  20. 我听到后,我突然明白为什么面试官疯狂对我进行提问了,而且提问面非常广,hhh,都是我的错!
  21. 然后我问了他,对于c和java两门语言的看法。他说,现在主要都是做一些业务开发吧,国内大部分都是java吧,不过这个得看应用场景和业务要求。然后我说我想做“c去开发一些偏底层的东西,像编译器、分布式数据库这些”,他说哦这些确实c++用的多些,不过像编译器的开发国内几乎没有,所以很难找到实习工作的,并且门槛要求会比较高。还有一些细节我给忘了,其实他说了很多很多。
  22. 然后我又问了一些其他的东西,他都很详细的回答了。面试官人确实好,我也确实菜。
同黄dl的交流

他问了我面试的一些细节,然后指出了我各种东西都了解一点,但都不深入,以后会很惨,我也确实觉得。然后我表达了自己的疑惑,不知道对什么方面特别感兴趣,什么都有点想学,然后都会觉得比较有趣,然后就是什么都不熟悉。

对了,从和黄dl的聊天中可以知道,黄大佬现在在进行java后端的学习,并且进度非常不错,正在学习框架了,前面的内容的学的很不错,同时计网、数据库也学得很不错,leetcode也刷了很多。同时,面试了一圈互联网大厂,包括但不限于wxg、字节等等,然后拿到了有oppo的安卓开发实习。

而我整个大二上Java几乎没有进展,Java的各种细节都不太了解。然后c++也不算熟悉,各种东西都搞不太明白,智能指针、STL、模板、以及各种细节都不太懂,cmake也仅限于入门。真的就什么都不太了解。

然后前端的HTML、CSS、Javascript也都学了一些,vue也是入门,绝了!啥都是学了一点,并且都觉得有趣,而我的学习能力又谈不上特别强,不是大佬。

所以,我真的有些难受,而职业规划非常重要,也注定这条路上没人能给出一个最优解,只能遵循自己的内心去探索,去感悟。

二、正文

内心的一些跳动和惊喜

我其实一直有在留意,到底什么东西能够及其的触动我!学习Java的时候,没太多感受,就是觉得这门语言用起来很丝滑,很顺手,同时感觉有点啰嗦。学习python的时候,看互联网上一篇吹水python,但我觉得python似乎也没有讲的那么好?确实很多时候各种库、各种实现好了的函数,下载个ide就能写,感觉学起来无比容易(仅限于我没有了解很多,所以有这种错觉)。学习C的时候,其实这是我真正学习的第一门编程语言,还是跟着电子系的同学一起学习的,感觉也不算很深,因为当时刚入门,没什么太大感受,就很平常。然后就是学习C++,主要目的是用来学习数据结构,因为当时我觉得,学习数据结构如果不学习指针是一件很奇怪的事请,虽然C也讲了指针。于是便把C++primer这本书看到了模板前面,模板及后面的内容都没看了。当然,理解了忘记速度也非常快,我对这个没做什么笔记,嗨,这个习惯非常的差!

开始自学数据结构,刷题,主要是学院里的数据结构题目太少了,明显不够实践。大概过了国庆节后两三周,把基础的数据结构学完了吧,全部用结构体+指针+数组这些实现了一遍,其实感觉也没用到C的类鸭面向对象、智能指针等等的,就是C语言+一些c的特性吧,当时感觉整个人升华了一波!同时PTA上面数据结构部分的题大部分都做了,现在还有10+道没做吧。

最初的心跳来源于概率论的大数定律部分吧?不记得是不是这部分了,真的让我很欣喜。然后就是老师的讲课风格,我向来不喜欢老师逐字逐句地读PPT,也不喜欢老师过于板正(可能因为我平时表现得很板正吧,就呆呆地),我更多的希望老师在课堂上讲的知识少点,留出来思考一些有趣的东西,或者聊聊背后地东西,剩下的应该让我们自己去学习、去了解,交我们一个学习的方法。而czy老师恰巧就是这么一个放荡不羁地老师(不知道这么评价是否合适),他是可口可乐的”代言人“,上课喜欢diss刘嘉老师,特别自信,光着脚上课,衣服上面几乎永远都印着数学公式,然后课上总有奇奇怪怪的段子!可能我对这门课的喜欢来源于两点:一是老师的风格、二是内容真的能解释很多美妙的事请、现象!当然,我觉得也和我对专业的了解程度加深了一些有关系。

然后就是计组,rtw老师真的非常的棒!每节课前的点名都会让同学们紧张(好吧,至少我是这样的),很多时候都觉得自己听懂了,也做了一些笔记,但是课上一问,就知道我完了,“又没复习,这个是啥来着,又给忘了,啊这个听漏了!我去!强的,这都能答对!这次会挑什么颜色衣服的大佬。黄yh大佬不会又被点名吧,hhh,那个位置绝了!”这些都是我的内心戏。

然后计组课程中很多东西的设计都有着太多巧妙地思想了,都是为了达到提升“性能”—多方面含义,产生了如此多的巧妙思想,有灵机一动的巧妙算法,也有受实际生活影响的点子,总之,这一切的一切都是如此的妙不可言!尽管编程作业会让人有时候难受!cache和快表应该是我觉得最难受的编码作业了!

所以,我真的很喜欢底层的东西,它们都太妙不可言了!

这也是我在平常同室友出行时,会说如果我能去做编译器、数据库这些多好呀!尽管我非常菜,甚至C++都还没入门,然后对编译器和数据库的了解十分浅薄,但是它们是在太令人神往了。

我内心默默的决定,我要做底层开发,底层方面的东西,我希望开发出能够令我感到惊喜的算法也好、方向也好、方法论也好、框架也好!!!诸如此类的!当然,这些似乎有点痴人说梦了!我甚至连专业课都还没能学好,前不久的C++exam才35分!

碰撞的发生

由于我对自己的职业规划不够明确,不知道自己真正想要做什么。另一方面,自己的成绩也不够好,GPA太水了!希望能冲一下,看能不能保研!所以认真的研究了下往届的保研细则,觉得发表论文似乎是一个不错的选择。毕竟这是里面我觉得最简单的方式,其他的ACM比赛、软件杯啥的实在太难了,像数学建模这种比赛院系都不认可。

于是就在知乎上搜了很多本科生科研+发论文的东西,了解了一些后,我就凭借着在保研细则中认可的论文期刊中选了一个"软件学报"进行论文方向的探索(其实写数据科学基础大作业时我就从上面找了些文本情感分析之类的论文来看了),看了很多往年的特刊,感觉太多都不是我喜欢的类型,各种东西都要硬加上机器学习,就觉得好无聊呀,这东西。还有很多文章,给我的感觉就是强行发表???

在接下来,就是翻找学院导师的研究方向,感觉大部分都不是我喜欢的类型,然后魏恒峰研究员(老师)的研究方向----分布式计算似乎还不错,看了下课题也有数据库方面的内容,于是便有点想去找他做科研。当然,由于我啥都不了解,最终还是没去。

以及,我想着如果能去公司实习看看能不能发现公司对员工技术能力等各方面的需求,以及发现我感兴趣的地方。

恰巧ttj发了微软explore program的公告,我就投了简历,结果白高兴一场,虽然我确实知道没太大把握能过,面试都没给我。

接着不死心,投了minivision,华为和字节。收到了字节的面试,在面试过程中(见上面细节),我发现我所想要进行的方向国内似乎不太好找工作,我也趁机咨询了很多。

接着就是黄dl的交流,这让我有点破防了,我到底喜欢什么,我喜欢的东西能给我带来什么!

我希望未来的我是一个什么样的人?能产生什么影响?我都不太清楚!

暂时的结果

我又思考了很久,查了很多资料,关于C++、java的讨论呀,数据库开发等等,我真的还不确定!

但是,从中也有很多启发和不一样的东西吧!至少,没有任何一样东西是速成的,我也应该没有落后于绝大多数同龄人。

我询问了内心,我还是希望做便底层的东西,数据库方向似乎是一个很不错的选择!

字节的一面估计就挂了!所以我可以尝试在这学期结束后,找魏恒峰研究员(老师)进行科研的尝试,至少现在我还不能过早的将自己框住!当然,我也不能天天啥事不想,毕竟大二要结束了!到底是尝试科研后觉得这个方向很不错,入坑考研/保研(几乎没有希望),还是直接就业呢!得慢慢有个抉择了!

需要做的

现在,我决定还是要专注于C++的学习,将它学习的更加透彻些!同时,我在各种大作业中都暂时是前端开发,所以我也要学习一些前端开发知识!

计算机网络、数据库都要非常熟练的掌握里面的知识,数据结构和基本的算法也要熟练的掌握!所以这就是接下来我需要做好的东西,当内功精深时,学习一门新的语言、转到一个新的方向,我相信都不会太难!


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!