第一年适应环境+学习反思
互联网大厂的三年磨炼,跳到中小厂之后,不管是从项目流程上还是技术氛围上等等方面都是有一些区别的。咋说志翔也是由清北成员带队,一些技术也是自己从没接触过的。 本着想拿大厂的经验在小厂中有一番作为以及对技术的渴求,我在每日的加班中充实的度过了自己的第一年,这一年我养成了一个好的习惯就是反思,对于项目的管理,对于产品的设计,对于代码的理解,对于人生的思考都有很大的进步,并且在公司内的wike中建立了自己的个人空间中记录了下来。
第二年稳定输出+持续进步
第一年的学习加上反思让我下半年已经适应了公司的开发节奏和模式,也开始有了更多基于当前项目团队上的优化思路。之前不太熟悉的docker概念以及基本操作也已经熟知,但是部署时的痛点还是无法解决,打包速度和非自动化的更新操作。前端的几个项目来回的切换也是个麻烦事,又是移动又是pc,还有客户端代码。但是不管是做需求还是改bug对于代码基本也是了然于胸,效率方面也就有了更大的提升。领导和团队的小伙伴也开始更加的信任彼此。上半年参加了公司给组织自愿参加的《赋能执行力》的培训课程以及《敏捷开发》,受益颇多。之后被大部门领导安排做为部门内技术分享的活动委员,和另外两个组的活动委员一起组织了12次的分享活动,也有很多的收获。技术上完成了多次功能的重构以及移动端项目的搭建和客户端项目迁移,性能上的优化等等一系列技术上的实战提升。这一年充实而又满足。
收获和总结
重构功能时,要保持原先的功能能用,代码中要仔细的阅读代码的含义(这就体现出了备注的意义,代码确认太长 太难读,和写法有一定关系)
开发时觉得UI或者逻辑需要确认的,不要自己下定义。和产品确认后再与相关的开发测试一并确认。防止开发结束的返工
客户端和web端以及网盘端三套代码 需要考虑从页面结构到项目代码上的去重 节省开发时间
提高自测的水平,多测深入一些,细节不能落下
多语言的英文次数(time)前要加空格需注意
我的申请中有当前登录人发起的单据 也有既是发起也是接收人的单据 如果是接收人且审批状态为审批通过的repos传参时loginname 其余的都是audit (TODO 从代码层面上考虑可以把逻辑转移到后端看看)
onlyoffice 提示下载失败是document中的url有问题 zxfile页面显示502 可能是后台的服务没有启动 显示page availd 是后台报错500 都需要让后台看下原因
项目上需要统揽全局,把别人知道的不知道的都了解下,不能只顾自己的模块
多个版本有同一个功能时,当一个功能提出优化或者修改,要考虑其他关联的版本是否优化或者也要修改
团队有一个问题:带着问题开发,产品的需求没有踩碎柔细了就开始开发,开发过程中再寻找问题 (这难道是敏捷?)
优先把紧急的和需要交接给别人或者和别人对齐讨论的事情先做,然后再低头做自己一个人完成的任务,不影响整体团队协助的工作效率
VUE中 for in的使用 v-for="(value,key,index) in object"
v-html可能会有xss攻击,建议用v-text 或者 < pre/>代替
ticket-detail中的props过多,且起名有一些是比较相似的,需要精简下
每一行代码都有可能是导致报错的源头,每一句prd都要仔细看清楚
开会或者和人讨论沟通时会不自主的摇头晃腿,拿手放嘴旁边,需要改善此习惯,提升交流时的自信心
easy-table的comp不太好用 因为是旧版本的问题 需要加一个render函数来改这种非通用的写法
跳转的url中需要处理特殊字符,不然可能会截断
npm install -S 等于 npm install --save 生产环境的包, npm install -D 等于 npm install --save-dev 开发环境的包
base64的字符串加解密方法 (window自带) 加密 : window.btoa(unescape(encodeURIComponent(str))); 解密: decodeURIComponent(escape(window.atob(str)));
git 代码合并时可以使用git cherry-pick指令只把要合入的commit合到当前的分支中,使用指令: git cherry-pick commitid1 commitid2... 遇到冲突后处理完冲突然后执行 git cherry-pick --continue
onlyoffice 报错如果是“下载失败“,是配置的document.url找不到文件,看用户配置的ip或者端口号是不是有问题。 如果是报js 502 有可能是onlyoffice的服务没有启动在后台去查看
页面头部的申请和工单的显示在5.7.2版本中发现有问题,但是和产品确认为全员为审批员都显示申请,忘记是确认时和孙岗那边也说是工单按照全员的逻辑还是改的时候可能逻辑没有完全搞明白误把工单放开,需要后续合版时把各种的逻辑都确认清楚,必要时双方reivew代码,必须要告知一下对方的测试,这里的逻辑修改过,至少测试一遍
内存泄漏:浏览器有定时清除无用内存的机制,但是如果js代码中有全局变量或者setInterval定时器或者addListener监听等 路由切换时是不会清除这些内存的,需要在生命周期的注销时手动清除掉,比如2.0.6.1的用户组有1.5M的数据量第一次点击进入审批流程页面后会把数据存在内存大约占500M,第二次再进入的时候内存会变成1G 在32位的系统中浏览器内存达到1G时会出现浏览器崩溃,如果64位则在1.4G时出现。
ivew的select想要有输入功能就需要加filterable属性 例子中给赋值默认的标签时不会在搜索时被清空,但是在项目中的高级设置时因为是绑定在对象中的数组上的 所以出现此问题有些莫名,经过3个小时的测试修改把绑定对象变成一层数据结构直接this.xxx这样的形式没有问题了。
创建的iframe或者获取到的 判断它是否加载完成用 iframe.onload = function (){ } 获取iframe中的元素 用iframe.contentWindow
使用路由懒加载能使页面的打包js文件体积缩小,提升首页加载速度
pdfjs低版本的不支持发票中的字体(在高版本的浏览器中),高版本的pdfjs可以支持在高版本浏览器中展示发票字体但是整体不兼容低版本浏览器
iview中的form表单的校验有整体的 也有formitem上单独设置的rules 会覆盖整个form的,可以写在computed中动态展示 其中设置项为数组可以设置多个比如: [{ required: true, message: '不可为空' }, { type: 'string', max: 100, message: '允许输入的最大长度为100' },{ pattern: /^//, message: '不符合正则', trigger: 'change' } ]
form的 resetField() 方法把全局表单重置。 数据重置用null 否则提示不会消失
对于未知的问题,先自己分析问题查找方法再去求助他人。前提是这个问题不紧急的情况下。
在讨论问题或者和别人沟通的时候不要太严肃,把氛围搞僵。多一丝温柔和诙谐,往往沟通时不会记住当时的内容 但是会记住当时的感觉。
video的底层逻辑:当视频播放时,程序会找MP4文件,定位moov box 的位置,然后借此查找视频和音频的起始位置来开始播放。Box 可能以任意顺序排列,所以程序一开始并不知道 moov box 哪里。如果是本地播放,没有任何问题,因为你已经拥有整个视频文 件;但如果在线观看,也就是流传输 HTML5 视频时,就会有问题了。 浏览器直接发起 HTTP MP4 请求,读取响应 body 的开头,如果发现 moov 在开头,就接着往下读 mdat。如果发现开头没有,先读到 mdat,立马 RESET 这个连接,节省流量,通过 Range 头读取文件末尾数据,因为前面一个 HTTP 请求已经获取到了 Content-Length ,知道了 MP4 文件的整个大小,通过 Range 头读取部分文件尾部数据也是可以读取到的。 ffmpeg -i 好汉歌.flv -c copy -f mp4 -movflags faststart 好汉歌.mp4可以使moov被移动到mdat前面 moov中包含了metadata信息
和领导汇报结果或者说一件事情的时候,要说清事情的来龙去脉 领导的事情比较多,记不住你之前说的一些事情,让领导去想去猜这是一个大忌。直接说上次那个什么什么事情,现在是什么什么结果。会让人更加放心
汇报和分享ppt时需要学习一下如何编写高质量的ppt 用上一些幻灯片会更加分
devops和敏捷开发可以向结合,让工具帮助做提高效率,jira有此功能,后续需要研究Jenkins自动化部署
其实每个人都有自己的想法和思路 只是有些人不善于表达,不要低估别人,自负会害死自己,谦虚点
浏览器自动填充的问题可以使用input上的属性 autocomplete="new-password" 阻止赋值
在docker中找文件的指令为find / -name xxx
vue组件中的样式使用scope时子组件中的class找不到,无法设置样式时,可以使用/deep/ .class的方式去递归找子组件中的class进行样式赋值
css 文字自动换行的方法 word-break: break-all;
用户下载文件超过1G或者超过3个小时的问题:解决办法在nginx中去掉1g的限制即可。此限制是文件缓存超过1G时就会超时,所以去掉此限制时就可以下载超过1G的大文件
考虑一个大的重构或者对接系统功能等觉得当前实现方案有点别扭的时候,可以试试用配置化或者动态的配置去适配,尽量这些不要写死代码
要想直接重装用别人的包 可以docker images 查看是否有最新的docker在远端,有的话 可以在2.108机器上执行 ./remote_checkout 5.7.3 不放心的话可以再执行 ./remote_gitreset.sh 和 ./remote_pull 然后执行 ./remote_install.sh --fresh_install 192.168.60.148 就可以把远端已有的5.7.3的所有docker重装到60.148机器上了 如果远端的不是最新就需要自己一步一步走 ./remote_install.sh --build_image --module all:5.7.3 && ./remote_docker.sh -s all 5.7.3的指令了
部门整体的知识分享 大家学到了技术的可复用性思想
开发完之后需要看一眼控制台有没有前端报错,细节也要处理一下
mutation可以用来监听元素的属性和内容等等 是个不错的方法 在approval-iframe.vue中有使用
爬山的心路历程和平时的工作或者人生一样,爬过一座上升的路线之后就会遇到一个坡度平缓的路线,在经过调整之后就可以继续攀爬,就这样梯度的上升才是常态。做好体力分配很重要。
管理团队时执行的果断感和激励的话语很重要,如果管理者对上面的决定都犹豫不决,那下面的执行也会动摇。
onlyoffice报错下载失败是document.url报错导致 在官方的文档中记录 最近一次线上问题是在5.6.3版本中客户配置了系统保留地址后访问有问题导致
要有技巧的有人沟通,不是谁有理谁就嗓门大,就一定要一个对错,有时候对错并不重要,要用和谐的声音发表自己的意见,而不是郑重其事的宣读。这样大家会感觉你这个人不好接近
在临近发版的时候每次改动都要看是否会影响测试重新测一遍,如果有的话要评估一下并告知,不能偷偷自己改了,如果被测试发现,对方会怀疑你是不是在代码里面下药。
封装公共组件时,可能会继承一些属性,可以用到 v-bind="listeners"
给客户打补丁包的Jira 自测完成后把jira转给何勇备注哪个分支哪个服务需要重启,然后改状态fixed
js中替换某些字符可以使用replace方法 replaceAll不好使, 可以使用/g的方式, 比如replace(/hello/g,'hi') 其中正则中如果遇到?或 / 特殊字符可以使用\ 如 replace(/<?/g,'<?') 将<? 转成转义符 <?
自测时前端需要注意: 文字超长的展示; 英文状态下数字和字符之间有空格;
添加node_module的新包后需要和编译环境也增加,不然合完代码之后装系统会报错,谨记
沟通时要多倾听,不要带情绪,不要急于表达自己的想法
重构代码不可盲目自信,如果没有测试兜底,就是在自找麻烦,一定要考虑每一段逻辑,全局去搜索
情绪稳定很重要,尤其是和人沟通时,情绪价值往往大于交流的内容
不要有优越感,会给人不好的印象
执行fresh_install 192.168.20.60的时候如果最后失败了 那么有可能是系统的磁盘满了,要求最好剩余空间大于20G, du -sh 查看当前路径下的所有文件容量总和 du -sh * 查看当前路径下的每个文件的容量
vue组件中在export default之外定义的变量 如果有多语言只会在初始化时执行一次, 所以在页面不刷新的情况下语言是不会改变的
vue组件中的name有两个作用 1:递归时调用自己 2:路由中设置keep-active时缓存页面
vue组件中给store中某一个state赋值 调用dispatch的方式 this.$store.commit('dispatch的方法',value)
vue组件中父子组件数据双向绑定
vue 组件不更新的问题: 1.变量没有放到data的return{ }中 2.data中的为对象变量 没有声明属性 如 return { userInfo: { } } 在方法中change this.userInfo.name = 'zhangsan' 不会更新 3.直接操作数组的索引 如this.list[0] = 'aa' 应该使用splice方法
使用less时 如果用calc(50% - 50px) 会出莫名的问题,可以使用此方法 calc(~"50% - 50px")
for in 和 for of 的对比 for in 可以遍历数组和对象,得到每一项key, for of只能遍历数组, 得到每一项的value 都可以中断循环。
迎难而上 必有所得
每日三省吾身 其身正,不令而行 其身不正,虽令不从
没有岁月静好 只是有人替你负重前行
华为项目管理经典语:只给听得见炮声的人呼唤炮火
达克效应: 不知道自己不知道–巨婴 知道自己不知道–屌丝 知道自己知道–智者 不知道自己知道–大师
增量开发:先交付一部分成果,之后每个阶段交付一部分成果,像搭积木 迭代开发:从模糊到清晰,反复求精
晴天修屋顶(未雨绸缪)
不患人之不己知,患其不能也 ( 不要担心别人不了解自己,而应该担心自己没有能力 )
求同存异,君子和而不同
别只顾低头拉车,更要学会抬头看路
没有思路的时候多想一下,或者和别人讨论下换个思路
提测演示前要确认测试环境没有问题,自己先去演示一遍之后没有问题再去演示给产品、测试
敏捷宣言: 1.个体互动高于流程和工具 2.工作的软件高于详尽的文档 3.客户合作高于合同谈判 4. 响应变化高于遵循计划
敏捷中有句名言:唯一不变的就是变化。
只有我自己觉到、悟道,我才有可能做到。能做到的才是我的—《天道》
有道无数,术尚可求。有术无道,止于术。神即道,道法自然,如来。—《天道》
要想做点事,别把自己太当人,别把别人不当人。—《天道》
极简学习法: 1. 精准输入 2. 深度消化 3. 多元输出
答应别人要确认之后回复的一定要记在本子上 等确认完之后马上回复,不要等着别人来追问,做事不能缺少责任心,说到做到