开始学习React框架,主要是帮公司完成一个部门门户网站
- 09/25/2023 开始学习React框架
- 09/28/2023 学习完成jsx,组件和组件通信
- 10/05/2023 国庆放假完毕,开始继续学习React,把组件进阶学完
- 10/07/2023 学习完毕项目前的内容,稍微总结了一下。非常多内容看起来觉得简单,写起代码来全忘了,以后得去看一下别人怎么解决这个问题的(maybe可以通过查看完整代码的方式去复习,然后尽量多复习脑子里面不能自己总结出来的(也就是忘记最多的))
- 10/09/2023 开始写公司的项目,初步完成了homepage demo,任务列表展示以及生成任务页面(学习了滑动卡片方式)。但总的来说前端入门非常的快,还要去学习前端深奥的地方在哪里
- 10/11/2023 开始感受到了一点工业界和自己写项目的不同。不同点在于在公司中因为环境经常不一样,所以上云和利用docker部署非常的重要。
- 10/13/2023 肝了七天,终于在公司内部部署了一个demo了,下周主要是完善一下前端的设计以及部署到云上的参数要注意一下
- 10/15/2023 对web开发还是有一些困惑,下周带着困惑去解决一下那些问题。(以后去B站学一个真正的前后端交互的项目)
- 10/16/2023 今天和leader聊了很多,觉得作为一个程序员,技术是次要的,比较重要的就是供应链和硬件。特别是有些东西门槛非常低,比如web开发什么的,b站随便看个视频就能学会了。这时候就需要不断钻研其他的东西。比如设计,规划,商业意识,行业选择。最好也就是去大公司看看,有这种处理大场面,类似于量产,大集群这种经验。(前提是自己基础也是要够的)就是技术的提升能给你提供很多选择,但其他,类似于管理,表达能力,沟通能力也非常重要。(定锅,职责分清)
- 10/20/2023 网站部署成功!学习到了docker集群部署流程,以及k8s的大概功能,以及学习到了如何正确地在服务器端打日志
- 10/21/2023 收尾学习一下上次看的React课程,然后总结一下react的内容。
- 10/25/2023 今天上线的时候发现了一些问题。包括了多个人请求创建任务的时候,前端界面会出现卡死的情况。短域名配置二级路径的问题。这里暴露出了三个问题:1. 高并发的时候应该怎么处理,前端使用websocket,后端使用更加好的处理逻辑(这次卡死是因为在GET请求的地方会出现修改数据库的行为),或者是后端使用更好的数据库(sqlite3是库级锁),更好的框架(不太清楚django是否有高并发框架) 2. 更好的开发流程,在开发的过程中,会出现merge代码丢失的情况,这如果在两个人开发还好。如果在多人开发的时候,如何避免发生这种问题是要自己去想的。 3. 发现问题如何去找出bug。在使用了一个第三方库封装之后的接口之后,发生了bug一定要去查看官方文档,了解底层的接口是怎么样的(基础一定要有),然后根据官方文档和英文的搜索引擎去找到解决方法。 4. 还是要在项目的学习中增长知识,但同时还需要更加认真的学好基础知识,不然会花费太多时间停留在不知道为什么的状况下或者花费了太多的时间去实现已经学过的东西。自己一个人学习的时候,也需要以这种项目驱动的方式去学习。(现在在公司,很多东西不懂的可以去问leader),以后正式工作了之后还怎么问呢?5. 写代码还是要正常的写,不要过于激动和过于钻牛角尖。到点就下班,然后下班也不要想太久同一件事情,尽量去分散注意力,等到第二天有精神的时候再继续功课问题
- 11/10/2023 今天leader找谈话,收获还是挺大的,以后也要注意下面这些点:1. 主动及时总结性地和leader汇报,因为leader真的很忙,没时间轮询你的进度,如果是等到他来轮询你的进度,他会用挑刺的状态去问你,这样自己梳理这些问题也需要花费很多时间 2. 有问题需要及时报警出来,工作不是解数学题。如果有同事会,问一下很快就能解决。 3. 工作之后,技术和其他的能力37开,很多东西不仅仅是靠技术解决。
- 11/24/2023 这两天和leader一起debug。这个bug是之前一直遗留下来的问题。bug大概是这样的:网站上每提交一个生成报告任务的时候,整个网站有关数据库的操作都会卡住。比如说通过GET请求获取整个任务列表。之前以为是sqlite的问题,因为sqlite是一个库级别锁,每当有写操作的时候,整个数据库都会被锁住。但是后面我设置了数据库的20s超时时间,也就是这个数据库在20s内还是没有返回响应。但是服务器写入数据库的频率是30秒写一次。所以就会非常的困惑。后面从sqlite换成了mysql,网站还是会卡!后面发现是因为python有个叫做GIL锁的东西----因为Python底层的解释器是Cpython,而Cpython这个东西会有个GIL锁,使得python在全局就一把锁,所以python在用Cpython解释器的时候,并没有多线程这个概念。所以也就会出现单个核跑满的情况。在IO密集型的程序这个问题还不会暴露出来,在计算密集型的程序中这个问题就会暴露的非常明显。而刚好我的代码里面有一段代码会去读取一个几百万行的文件,然后逐行解析。这样就会导致CPU一直被跑满,根本没“空闲”去操作数据库。所以后面把耗时的操作用多进程的方式去做了。这样明显网站并行操作了起来!这次的debug学到了两方面的点。技术方面的点:一个是python的ORM操作是个惰性的操作,QUERYSET(leader为什么会想到是这个问题呢)只有到了真正用数据的时候才会去执行mysql语句。第二个是关于GIL锁的问题,这个让自己了解到了更加底层的东西,了解到了作为一个web服务器,多线程和多进程的兼顾,如何在多进程之间通信,顺便了解了一下RPC。以及消息队列的使用。其他方面的点:1. debug要分层去debug,接口层,数据库层,前端层??分层的作用体现了 2. 尽量解耦合,不要把太多的底层操作的权限释放下去,比如说task_status这个状态,应该放在server层,这样能保证debug的时候只有这一个地方在写数据库,而不是把这个释放到多线程里面,这样debug不知道是哪个线程写入错误 3. 大胆思考,小心求证。不要嘎嘎写,把自己的精力都消耗掉了,仔细调查之后再去写一下。
leader的招聘要求
"
- 能手写基础的算法和数据结构,写不出来的我肯定就拒了
- 能说清楚自己的项目里用了什么,为什么要用,猜到什么坑,怎么解决的?
- 良好的沟通能力和搜索能力(我们面试题允许现场谷歌写的)
- 对新问题有不错的适应力(比如我会根据你自己做过的项目,给一个问题场景,然后看你怎么去思考,排查问题的) 可能看起来我们不太喜欢问具体语法,或者具体框架 API 什么的。因为对于初级工程师,我们一直秉持一个观点:“一个人的沟通能力,态度和基础远比其对于语言细节,框架细节掌握重要的多 "
日期 | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday |
---|---|---|---|---|---|---|---|
视频1.5小时 | 代码1.5小时 | 视频1.5小时 | 代码1.5小时 | 视频1.5小时 | 学习6.5小时 | 学习6.5小时 |
工作日学习时间:7.5小时 周末学习时间:13小时 每周学习时间:20.5小时 3周学完这门课程+项目
- 09/17/2023 设计好整个网站的前后端再开始写代码和学习代码
- 10/08/2023 学习完成hook并把项目视频肝掉
- 10/11/2023 学习前后端交互逻辑,利用restful api,axios以及拦截器等等
- 10/13/2023 docker部署打包前后端
- 10/15/2023 dockerfile的编写和nginx,uwgi等webserver的作用
- 10/16/2023 完成confluence的调试,能在圈内看到完整的一整个流程。添加platform导航栏的设计
- 10/17/2023 更改路由的跳转,首页的设计以及技术文档的设计
- 10/20/2023 上线部门platform网站
- 10/25/2023 上线部门platform网站短域名网站然后解决多人协作的问题
- 10/26/2023 了解webpack
- 11/15/2023 上线部门的新功能
- 12/15/2023 了解消息队列,Go怎么应用到项目当中(中台是怎么解决的),日志怎么保存非常重要
明天就是实习的lastday了,没想到这么快就在dji呆了5个多月。来dji之前在oppo实习,当时不太喜欢硬件,搞的是摄像头camera hal开发,所以当时也想着待一会就去其他公司。后面因为一些事和机缘巧合就面试来到了dji。在这五个月确实也学到了挺多的东西,主要做的事情就两个1. 重构了自动生成报告的脚本,并搭建了一个全栈网站来做到上云 2. 智能驾驶仿真器开发和适配反射宏。一些技术细节我倒不谈,最想谈一下的就是自己对行业,个人方向的一些感受
- 熟悉了前端后端开发的完整的流程,包括联调,部署,接口设计,层次设计
- 了解了一些经典的设计模式
- 熟悉了git的操作,协同开发的流程
- 熟悉了自动驾驶的一些主要工作
- 熟悉了一些序列化,反序列化的框架和一些通信的框架
在dji这种硬件公司,很多人的看法都是不太看好互联网的发展,他们觉得很多人都是从互联网过来的,红利时代已经过去了。同时leader觉得如果自己对薪资有要求的话,还是不要去硬件行业,最好去互联网企业或者一些高科技公司。其实不同行业的选择,更多的是自己技术路线的发展。硬件行业偏底层,学的可能是c/c++注重性能,计算机系统,缓存,通信等一些基础的东西。但是互联网的话,可能学习的还是GO,JAVA等一些WEB,服务器相关的语言。很多在这边同事都建议学好C++或者一些新兴的语言,比如rust、go这种,而不要去java这种非常笨重的语言。他们觉得java虽然能让自己找到一份工作,但是能让自己找到一份好工作,薪资高的工作还是非常难的。特别是他们觉得C++学得厉害的人是真的能玩转的很溜。自己在这段实习之后,并没有特别的喜好说自己非常喜欢web开发或者底层的开发。我可能只是希望通过这一年的努力找到美国的工作(bushi。但是后面准备找下一段实习应该还是优先背一下互联网那边的八股。尝试去互联网公司实习一波。
在实习的这几个月期间,感觉国内的强度还是稍微有点太大了。不知道其他公司的强度如何,像dji这种,早上十点半晚上十点多下班的公司,基本上是没有家庭生活的。每天晚上走出公司都累得像条狗一样,更别说照顾家里人的情绪和打理家里的事情了。而且回到家都要十一点,洗个澡就得睡觉。第二天早上又得出去上班,想到这种上班的节奏就非常窒息。所以我感觉我们**人很悲哀。最年轻的这几年都花在加班上面了。但是也很无奈,好工作都是需要加班的,不加班自己的生活质量其实也没想象中那么好那么舒适。自己也一直在想为什么国外工作那么少时间,能有这么高的产出,我想了想有这几个原因 1. 本质上国内早上基本上没干活,都是下午和晚上干了点活。但是国外的话早上是要八点半九点上班的,而且没有午休时间那么长。所以**人加上一些早上的工作,其实晚上理论上来说是不需要做的那么晚的。 2. **什么都缺,就是不缺人。人太多,导致你不想加班,有的人是想加班。除非政府出命令,不然这种加班的现象是永远不会停止。3. **人通勤时间比较久,大家感觉住的都离公司挺远的,开车的话,国内人太多,堵车又很严重。 4. 外国人属于是聪明的人太多了。我在duke就有很强烈的感受。那些牛逼的教授真的一个人的工作时间顶十几二十个人的工作。
在这段实习之后,应该会迎来一个月到两个月之间的沉淀的时间。下一段实习我还是比较倾向去一个国内的互联网大厂卷一下,学习一点东西。其次就是去外企,然后争取拿个转正。在这期间我个人觉得还是要把题刷好,最重要的把国内的八股背好。所以后面可以针对自己想要去的公司去把他们的八股给对应背熟背好。
这个问题是我和一个一起在dji实习的duke gap同学聊到的问题。其实我和他一致觉得,国外终究不是自己的归宿。考虑到文化因素,语言因素,network。在国外,凭自己的能力,非常难在国外摆脱打工人的身份。但是在国内如果创业或者去某个比较有前景的公司,能充分利用国内的人口红利,然后狠狠赚一笔。自己未来的规划肯定也是,如果有机会,那肯定还是在国外工作一会,把女朋友接过去美国享受一下,女朋友在国内读研感觉都要抑郁了。然后再跳槽回国,选择下一步的公司或者行业。