那是一个阳光明媚的下午,偶然打开某S招聘,发现有个HR竟然对我感了兴趣,于是我也来了兴趣。 可她回复的比较慢,像是初恋懵懂的心,期待着她的每一句回复。
好的,她通知我要明天中午11点来个简单地视频面试。
晚上回去查了查这个公司,下坡路,重组阶段等等负面消息,心里也不抱啥想法了。(有换工作的想法但未到计划时间)
面试官迟到了10分钟,啊,这个时候其实已经对这个公司非常不感冒了。
面:“请你做个简单地自我介绍”。
我:“叭叭叭,帮公司从gogs换成了gitlab,用了CI/CD,但是最后没用上,公司还是winserver,目前在做Electron+react桌面端服务,用了electron-updater自动更新叭叭叭,注册主进程electron-log等等叭叭叭,还有响应式页面,手机,平板,电脑叭叭叭。还有组内一些公共组件的封装叭叭叭”
面:“这边你可以讲讲你CI/CD怎么做的吗”
我:“好的,我是看到gogs有点不适应,然后自己百度了gitlab安装流程,然后跟着流程,docker容器化部署了一套,然后想起了前公司的.gitlab-ci.yml文件,然后自己就捣鼓起来了,发现winserver,自己懵逼了,然后本着做都做了,怎么也得给他塞一个目录去的想法,塞到了,gitlab搭建的服务器。于是乎,分段构建,一个build阶段,一个release阶段。前公司他们是k8s我也不会,于是我是简单地scp,把地址,密码用ci变量雪藏了。大概就这些”
面:“可以讲讲你在build阶段有遇到什么问题吗”
我:“emmm...好像没遇到啥问题,就正常的install和build” (马后炮:复盘的时候想了想,好像只有node版本和依赖安装会失败,其实一开始,自己不知道要分段构建,因为要用到node和sshpass两个镜像,docker镜像要准备好,一开始在一段构建各种报错,慢慢摸索出来。我也知道我这个部署方式很low,但能力有限,又菜又爱玩吧)
附代码
stages: # 分段
- build
- release
- build-prod
- release-prod
build-job:
stage: build
image: node:16.13.1
script:
- yarn install
- yarn build-sit
- echo "build finished"
artifacts:
expire_in: 1 day
paths:
- build/
only:
refs:
- dev
release-job:
stage: release
image: ictu/sshpass
script:
- mkdir stash
- sshpass -p $CI_PWD scp -o 'StrictHostKeyChecking no' -r root@${CI_HOST}:/root/build/* ./stash
- sshpass -p $CI_PWD scp -o 'StrictHostKeyChecking no' -r ./build/* root@${CI_HOST}:/root/build
- sshpass -p $CI_PWD scp -o 'StrictHostKeyChecking no' -r ./stash/* root@${CI_HOST}:/root/buildback
- echo "release finished"
only:
refs:
- dev
面:“讲讲你在封装组件的时候,会考量哪些规则之类的”
我:“我其实都是偏业务型组件封装,一些常用到的,去做一个封装,之前有一个table的,因为工厂项目里用户喜欢excle比较多,很多这种表格,所有做了一次封装,通过配置项js,去生成最终的页面,再嵌套一个类似el-table的数组数据结构的表格。也是自己封装的,主打的一个遵循一些开发的基本规范,一开始自顾自的写,后来发现组员上手难度有点高(可能自己也写的差把,mixin乱用,数据处理也不集中),后续就会去综合考虑一下。然后在数据处理会集中在组件内部,将组件尽量做到接受一些数据,最后输出我们想要的内容,不从内部改变外部的数据”
面:“说说你对无状态函数,高阶函数,组合函数的理解”
内心:“完了,啥也不知道,不管了先吹把”
我:“这个我不太了解,我说说我自己的理解把,无状态函数就是内部没什么逻辑,然后输出一个结果,高阶函数就是接受一个组件或者多个,最后输出一个。组合函数顾名思义,就是多个函数组合成一个”
(复盘:我丢啊,这回答的是个鸡毛啊,无状态函数,我满脑子react函数式组件去掉hooks不就是无状态了吗,无状态组件,还有人家问的是高阶函数,你答个鸡毛高阶组件啊,还有组合函数,我是真的不知道。。。。。不对啊我不是知道柯里化函数和管道的吗,他们有联系吗?GG)
面:“你对通讯协议有了解吗,听你说到tcp,你对http和https有了解吗,http从11年更了三次,ps:这里说了是三个版本我不记得了。你知道这三次更新做了什么吗?https的s又做了什么?你对tcp,udp有了解吗” (这里多个问题我整合起来了,反正我都不会...)
我:“我不太了解,叭叭叭三次握手,四次挥手,你在吗,我来了?你在哦,那我真的来咯,好的我来了。”
内心:“真嘴贱,没看就乱吹,”
面:“你对websocket接受的参数,一个协议,你有了解吗”
我:“不知道”
面:“讲讲你的印象比较深的”
我:“刚开始工作的时候,因为是非计算机专业,啥也不会,啥也不懂,虽然以实习生的身份混进了一家公司,但是经常把git代码搞丢,被主管耐心教育,和后端对接口报错找后端,结果都是自己的问题。参数不会传,代码不会合并拉取,FormData不会传,每一个都把我急的要死捶桌子,带我入行的只会跟我说WWW。不过也感谢他,至少现在自己会WWW了。还总结了一句话,99%的问题都可以百度到,剩下的1%问谷歌”
面:“好的,这边初次了解就这样,如果有后续,hr会联系你的”
In conclusion
好了,这就是一次突如其来的机会,但是我没珍惜,其实过了初级的阶段,这些面试题都应该有了解,除了那个ws的传入的参数协议。中间自己还叭叭了一些react相关,但是面试管并不搭理。我也就没写上去。
咋说呢,百感交集吧,首先说说给自己找理由找借口的话,我面试别人的时候,我一般是考察基础知识,是不是真了解,不是培训班速成吧,然后看他的理解能力,逻辑思维,从他做过的系统来去问场景,然后根据他的薪资,再深入问一下技术和业务的结合。我是不认为八股文有啥太大的作用的,一年的coding里,八股文应用的机会应该只有5%。而且现在实操稀烂的程序员还少吗?就是背书没用,反正没用,你背书那么厉害为什么不去考公。程序员最终不还是解决问题的能力?
再想想,这些东西不问,怎么去区分一个人能力的高低呢?确实你解决问题的能力很强,但是你有目前的知识盲区吧,来个你没接触过的,网上搜不到的,你咋办。技多不压身对不对?不然怎么去区分初级,中级,高级呢,个人主观判断吗?那5%的八股文应用不就是价值的体现吗。有时候组员遇到的bug问你,不是一眼能知道是闭包吗,那为啥呢,不还是有了内部作用域,外部不能再影响里面了吗?别嘴犟说这是经验你自己遇到过。而且不正是啥也不懂的程序员升了领导后,导致看啥系统都一句话,不就一个页面,几个页面,从而导致目前现在内部系统一团糟吗?所以吧,技多不压身,总有用到的那一天,该会的还得会。
希望每个处于迷惘阶段的程序员,感觉自己啥都会一点,啥也不精的,你要是前端呢,你就从这里去看看你会不会通讯协议相关,http,https,tcp,udp,js相关的函数你都知道吗,组件封装可是常用组合函数等等。后端那咱也不会
大家一起努力共勉吧。(如果可能,希望培训班少一点,多一点是技术热爱,但生活总要继续。)