工作第十周:干货太多脑子不够用怎么办
2016-09-22 00:26
405 查看
上周中秋,闹得最凶的就是“阿里程序员脚本抢月饼被开除事件”。
作为程序猿我是同情他们的,觉得阿里小题大做;
但换到公司角度,这种事还是防微杜渐比较好。
代码如恶魔,在你完成编码后,应回头并且优化它。从长远来看,这里或那里一些的改进,会让后来的支持人员更加轻松。
在学习了一些设计模式之后,我看见代码就想优化。
有一天遇到一个问题,一个自定义 View ,业务逻辑也写在里面。新的需求里也用到了这个 View ,但数据和业务逻辑不一样,直接复制粘贴修改逻辑不太好。
我想到了适配器模式,业务跟视图分离,然后抽成一个可复用的 View,具体业务在 Activity 里实现。
结果在修改老代码的时候,发现这个 Activity 已经好几百行了,如果用我写的自定义 View ,Activity 里还得增加一两百行,变得更臃肿了。在复用 View 和 Activity 之间我犹豫了好久,最后终于决定不修改老代码了。
非著名程序猿小张说:
不要过于注重程序的 “设计模式”。有时候,写的简单直观点,要比引入某种模式更有助于项目演进。在多数情况下,程序代码应是简单易懂,甚至小白也能看懂。
尽量做到强拓展多复用。但是如果某个类复用的代价是需要在本来就很臃肿的 Activity 中添加更多代码,还是考虑清楚再做吧。
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path
期望返回一个对象但是却返回了一个数组,解决办法:
修改期望返回数据为 LIst<该对象>,这样才能解析到数据。
http://stackoverflow.com/questions/18709730/com-google-gson-jsonsyntaxexception-java-lang-illegalstateexception-expected-b?rq=1
http://stackoverflow.com/questions/21520390/javax-ejb-ejbexception-com-google-gson-jsonsyntaxexception-java-lang-illegalst?rq=1
2.使用 rebase 进行代码提交、合并:
git commit -m “提交信息”
git rebase branch-name
git pull –rebase
git push
3.git pull 和 git fetch 区别
http://blog.csdn.net/hudashi/article/details/7664457
git pull 等于 git fetch + git merge,拉下来直接合并
git fetch 更安全,可以拉下来后看情况再合并
等价于
先拉去 master 分支代码到一个新分支 temp
然后对比当前分支跟 temp 区别
最后决定合并
4.fast-forward , –no–ff 和 squash 区别
https://segmentfault.com/q/1010000002477106
a.fast-forward 快速前进,即合并时如果没有问题直接把 HEAD 指针指向最新,把旧提交分支指向新提交内容的末端,移动指针而不多进行一次提交,是为快速提交。是默认的 git merge 方式。
- 优点:提交历史看起来是直线,不乱
- 缺点:没有提交历史,如果删除分支,会丢失分支信息
b.–no–ff 即不使用 fast-forward,虽然难看点,有了分歧,但是保留了提交历史。
c.squash 把多个提交历史合并成一个。
5 ListView RecyclerView 复用的注意事项:
使用 tag 存储 item 状态,根据状态是否与当前 item 一致来设置属性
确定变化的和不变的,不变的状态值在 getView 外边创建一个集合保存
终极大招:将动态变化的状态值跟数据绑定,避免 tag 由于 view 复用后无用的 bug
6.堆,栈,常量池,静态域
http://blog.csdn.net/miraclestar/article/details/6039743#comments
栈:存放基本类型数据和对象的引用。
数据的生命周期可以确定,没有引用指向数据时,就会消失;
堆:存放所有 new 出来的对象。
堆中的对象由垃圾回收期负责回收,生命周期不确定;
常量池:存放字符串常量和基本数据类型常量( public static final);
静态域:存放静态变量 (static)。
7.字符串 加深理解:
直接用双引号包围的常量 “china”,存储在常量池中
引用 s1, s2, s3, ss1… 存储在栈中
new String(“china”) 会创建一个在堆中、指向常量池的对象
对于 equals 相等的字符串,在常量池中永远只有一份,在堆中有多份
对于通过new产生一个字符串(假设为”china”)时,会先去常量池中查找是否已经有了”china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。
8.final 修饰的变量一定不会改变吗?
答:
final 修饰的变量如果是基本类型,那这个变量在初始化后就不可改变。
如果修饰的是引用,初始化之后这个对象不能再指向其他对象(hashcode 不变)。但如果原配对象是可变类型(比如 StringBuilder 可以改变),那这个 引用虽然被 final 修饰,指向的对象改变后,这个引用的值还是会变的。
9.as 快捷操作
http://www.jianshu.com/p/bc8f6bfe12c6
as 多行编辑: 按住alt键+鼠标左键一直向下拉,就可以选中多行,然后编辑就可以同时对多行进行编辑,编辑完相同部分再分别输入不同部分就ok了。
要修改还是 alt + 左键选取。
重构的时候,要抽取出一些语句(Java 代码到一个方法里、xml 布局到一个 include 文件),windows 可以选中要提取部分,按 alt+shift+m,填写方法名称即可自动创建。
提取sytle,layout等并没有默认的快捷键。打开keymap。找到Extract,根据自己的喜好了来自定义快捷键.
10.跟小伙伴在不同 git 分支同时进行开发,想对比两个分支差异怎么办?
看这里 http://blog.csdn.net/u011240877/article/details/52586664
作为程序猿我是同情他们的,觉得阿里小题大做;
但换到公司角度,这种事还是防微杜渐比较好。
上一周:
1.首先是拔牙,680 一颗智齿,关键我还忘了带回家,心疼。
2.中秋休息,朋友来上海玩,正好赶上下雨,于是几个人除了胡吃海喝就是网吧开黑,最后一天天气好了点,才去了趟外滩。
看着江水,憧憬着未来。3.不要过于注重程序的 “设计模式”
某位著名的架构师说:代码如恶魔,在你完成编码后,应回头并且优化它。从长远来看,这里或那里一些的改进,会让后来的支持人员更加轻松。
在学习了一些设计模式之后,我看见代码就想优化。
有一天遇到一个问题,一个自定义 View ,业务逻辑也写在里面。新的需求里也用到了这个 View ,但数据和业务逻辑不一样,直接复制粘贴修改逻辑不太好。
我想到了适配器模式,业务跟视图分离,然后抽成一个可复用的 View,具体业务在 Activity 里实现。
结果在修改老代码的时候,发现这个 Activity 已经好几百行了,如果用我写的自定义 View ,Activity 里还得增加一两百行,变得更臃肿了。在复用 View 和 Activity 之间我犹豫了好久,最后终于决定不修改老代码了。
非著名程序猿小张说:
不要过于注重程序的 “设计模式”。有时候,写的简单直观点,要比引入某种模式更有助于项目演进。在多数情况下,程序代码应是简单易懂,甚至小白也能看懂。
尽量做到强拓展多复用。但是如果某个类复用的代价是需要在本来就很臃肿的 Activity 中添加更多代码,还是考虑清楚再做吧。
6.0 M 全名:marshmallow 棉花糖
7.0 N 全名:Nougat 牛轧糖
技术上的收获
1.返回数据解析错误com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path
期望返回一个对象但是却返回了一个数组,解决办法:
修改期望返回数据为 LIst<该对象>,这样才能解析到数据。
http://stackoverflow.com/questions/18709730/com-google-gson-jsonsyntaxexception-java-lang-illegalstateexception-expected-b?rq=1
http://stackoverflow.com/questions/21520390/javax-ejb-ejbexception-com-google-gson-jsonsyntaxexception-java-lang-illegalst?rq=1
2.使用 rebase 进行代码提交、合并:
git commit -m “提交信息”
git rebase branch-name
git pull –rebase
git push
3.git pull 和 git fetch 区别
http://blog.csdn.net/hudashi/article/details/7664457
git pull 等于 git fetch + git merge,拉下来直接合并
git fetch 更安全,可以拉下来后看情况再合并
git pull origin master
等价于
git fetch origin master:tmp git diff tmp git merge tmp
先拉去 master 分支代码到一个新分支 temp
然后对比当前分支跟 temp 区别
最后决定合并
4.fast-forward , –no–ff 和 squash 区别
https://segmentfault.com/q/1010000002477106
a.fast-forward 快速前进,即合并时如果没有问题直接把 HEAD 指针指向最新,把旧提交分支指向新提交内容的末端,移动指针而不多进行一次提交,是为快速提交。是默认的 git merge 方式。
- 优点:提交历史看起来是直线,不乱
- 缺点:没有提交历史,如果删除分支,会丢失分支信息
b.–no–ff 即不使用 fast-forward,虽然难看点,有了分歧,但是保留了提交历史。
c.squash 把多个提交历史合并成一个。
5 ListView RecyclerView 复用的注意事项:
使用 tag 存储 item 状态,根据状态是否与当前 item 一致来设置属性
确定变化的和不变的,不变的状态值在 getView 外边创建一个集合保存
终极大招:将动态变化的状态值跟数据绑定,避免 tag 由于 view 复用后无用的 bug
6.堆,栈,常量池,静态域
http://blog.csdn.net/miraclestar/article/details/6039743#comments
栈:存放基本类型数据和对象的引用。
数据的生命周期可以确定,没有引用指向数据时,就会消失;
堆:存放所有 new 出来的对象。
堆中的对象由垃圾回收期负责回收,生命周期不确定;
常量池:存放字符串常量和基本数据类型常量( public static final);
静态域:存放静态变量 (static)。
7.字符串 加深理解:
String s1 = "china"; String s2 = "china"; String s3 = "china"; String ss1 = new String("china"); String ss2 = new String("china"); String ss3 = new String("china");
直接用双引号包围的常量 “china”,存储在常量池中
引用 s1, s2, s3, ss1… 存储在栈中
new String(“china”) 会创建一个在堆中、指向常量池的对象
对于 equals 相等的字符串,在常量池中永远只有一份,在堆中有多份
对于通过new产生一个字符串(假设为”china”)时,会先去常量池中查找是否已经有了”china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。
8.final 修饰的变量一定不会改变吗?
答:
final 修饰的变量如果是基本类型,那这个变量在初始化后就不可改变。
如果修饰的是引用,初始化之后这个对象不能再指向其他对象(hashcode 不变)。但如果原配对象是可变类型(比如 StringBuilder 可以改变),那这个 引用虽然被 final 修饰,指向的对象改变后,这个引用的值还是会变的。
9.as 快捷操作
http://www.jianshu.com/p/bc8f6bfe12c6
as 多行编辑: 按住alt键+鼠标左键一直向下拉,就可以选中多行,然后编辑就可以同时对多行进行编辑,编辑完相同部分再分别输入不同部分就ok了。
要修改还是 alt + 左键选取。
重构的时候,要抽取出一些语句(Java 代码到一个方法里、xml 布局到一个 include 文件),windows 可以选中要提取部分,按 alt+shift+m,填写方法名称即可自动创建。
提取sytle,layout等并没有默认的快捷键。打开keymap。找到Extract,根据自己的喜好了来自定义快捷键.
10.跟小伙伴在不同 git 分支同时进行开发,想对比两个分支差异怎么办?
看这里 http://blog.csdn.net/u011240877/article/details/52586664
总结
每天打开稀土、gank、微信公众号,到处都是值得学习的内容,要学习的东西太多了,一不小心从一个链接跳到另一个链接又到另一个。
浏览器打开一堆网页,都是心理安慰,没几个认真看完,到下班时挨个依依不舍的关闭,我对不起你们啊!浏览器书签都快挤到爆炸,干货太多脑子不够用啊啊啊!!
一个网友推荐了勺子,一个挺好的知识管理工具,保存书签也挺方便。
万事俱备,只差看了 !
相关文章推荐
- Android实习周记:第三周,工作里重复太多,觉得枯燥,怎么办?
- 刚刚升职为部门经理,下属不配合工作,该怎么做?
- java中异常这种技术框架是怎么工作的?
- 忙啊,领导太多,都要检查我的工作
- 面对工作怎么才能不浮躁
- malloc和free是怎么工作的。
- 写了一个SpringMVC 怎么封装到Map里!以后要多多利用这种方法,自己脑子笨就记下来了。
- Facebook的工作环境 设计师是怎么工作的
- Win10系统的SurfacePro4的启动菜单太多怎么管理,UEFI的启动菜单如何编辑
- 知识太多,大脑不够用
- swift计算机是怎么工作的
- Linux磁盘空间不够用怎么办?
- eclipse 怎么新建工作空间workspace
- 自学编程的人,都是怎么找到自己的第一份工作的?
- 自从来到了上海,开始工作以来就没怎么到博客园
- 在北上广工作压强下,幸福是怎么炼成的
- 工作检查书范文工作简历怎么写
- CLR到底是什么?是怎么工作的?
- 平时开发工作、杂事忙、没空带实习生怎么办?
- Aspect#是怎么工作的?