README.md 13.8 KB
Newer Older
S
SnailClimb 已提交
1 2 3 4 5 6 7
- [程序员修炼之路](#程序员修炼之路)
    - [学习/编程好习惯](#学习编程好习惯)
        - [正确提问](#正确提问)
        - [健康生活](#健康生活)
        - [高效搜索](#高效搜索)
        - [解决 bug](#解决-bug)
        - [善于总结](#善于总结)
K
Kou Shuang 已提交
8
        - [写博客](#写博客)
S
SnailClimb 已提交
9 10 11 12 13
        - [多用 Github](#多用-github)
        - [实践](#实践)
        - [注意代码规范](#注意代码规范)
        - [沟通能力](#沟通能力)
    - [面试必知](#面试必知)
S
SnailClimb 已提交
14 15 16 17 18
        - [如何获取大厂面试机会?](#如何获取大厂面试机会)
        - [面试的时候应该穿什么?](#面试的时候应该穿什么)
        - [面试前有哪些需要注意的地方?](#面试前有哪些需要注意的地方)
        - [怎么自我介绍比较好?](#怎么自我介绍比较好)
        - [如何介绍自己的项目?](#如何介绍自己的项目)
S
SnailClimb 已提交
19
        - [如果面试官问"你有什么问题问我吗?"时,你该如何回答](#如果面试官问你有什么问题问我吗时你该如何回答)
S
SnailClimb 已提交
20 21
        - [面试官问你的优点是什么,应该如何回答?](#面试官问你的优点是什么应该如何回答)
        - [面试官问你的缺点是什么,应该如何回答?](#面试官问你的缺点是什么应该如何回答)
S
SnailClimb 已提交
22 23
    - [如何写出更优秀的代码](#如何写出更优秀的代码)
        - [Java](#java)
S
SnailClimb 已提交
24 25 26

# 程序员修炼之路

S
SnailClimb 已提交
27
## 学习/编程好习惯
S
SnailClimb 已提交
28 29 30 31 32 33 34 35 36

养成一个学习习惯和编程习惯真的太重要了,一个好习惯的养成真的对后面的学习有很大帮助。说实话我自己当初在这方面吃了不少亏,很多比较好的习惯我也是后面自己才慢慢发现,所以这里想着重给大家说一下有哪些好的学习和编程习惯。

### 正确提问

我们平时任何时候都离不开提问特别是初学的时候,但是真正知道如何正确的提问的人很少。问别人问题前不要来一句“在吗”,你说你问了在吗我是回复好还是不回复好呢 ?不要让别人给你发 32 位的JDK,除非你是喜欢那个人。

更多关于如何提问的内容,详见 github 上开源版『提问的智慧』 <https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md>,抽时间看一下,我想看完之后应该会有很多收获。

K
Kou Shuang 已提交
37 38
更多内容可以查看我的这篇原创文章:[如何提问](docs/how-to-ask.md)

S
SnailClimb 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
### 健康生活

我一直觉得这一方面是最重要的,我想很多人和我一样会无意识间忽略它,等到真的身体不舒服了,你才开始意识到健康生活的重要性。

1. 除非万不得已,不要熬夜了。熬夜的危害就不用多说了,秃头加内分泌失调,你懂得!
2. 看电脑45分钟之后,起来走5分钟,看看远方放松一下。不要觉得这5分钟浪费时间,相反,这5分钟可能为你带来更大的效率提升。
3. 可以考虑买一个电脑架子,保护好自己脊椎的同时,办公体验也会提升很多。
4. 可以下载一个护眼宝,感觉可以护眼模式挺棒的,非常适合我们这种需要经常盯着电脑的人使用,强烈安利。

### 高效搜索

尽量用 google 查找技术资料以及自己在学习中遇到的一些问题。

### 解决 bug

程序遇到问题先在 stackoverflow 找找,大部分别人已经遇到过了。如果上面没有的话,再考虑其他解决办法。实在解决不了的话,再去问你觉得有能力帮你解决的人(注意描述好自己的问题,不要随便截一个Bug 图)。

### 善于总结

学习完任何一门知识后,你可能当时看视频感觉老师讲的挺容易懂的。但是,过几天后你发现你忘的一干二净,别人问你一个类似的问题,你一点思路都没有。所以,我推荐你学完一门知识后不光要及时复习,还要做好总结,让知识形成一个体系。另外,你可以假想自己要给别人讲这个知识点,你能不能把这个知识点讲清楚呢?如果不能,说明你对这个知识点还没有彻底了解。这也就是人们经常说的费曼学习技巧。

总结的方式:

1. 有道云笔记、OneNote......这类专门用来记录笔记的软件上;
2. 思维导图;
3. 通过写博客输出。可以考虑自己搭建一个博客(hexo+GithubPages非常简单),你也可以在简书、掘金......等等技术交流社区写博客。Markdown 格式参考:<https://github.com/sparanoid/chinese-copywriting-guidelines> 中文文案排版指北:<https://github.com/sparanoid/chinese-copywriting-guidelines>

K
Kou Shuang 已提交
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
### 写博客

写博客有哪些好处:

1. 对知识有更加深的认识,让自己的知识体系更加完整;
2. 督促自己学习;
3. 可能会带来不错的经济收入;
4. 提升个人影响力;
5. 拥有更多机会;
6. ......

**总的来说,写博客是一件利己利彼的事情。你可能会从中收获到很多东西,你写的东西也可能对别人也有很大的帮助。但是,写博客还是比较耗费自己时间的,你需要和工作做好权衡。**

**分享是一种美德,任何行业都不是靠单打独斗的,写博客、写好博客是一个程序员很好的习惯。我为人人,人人为我!** 

更多内容可以查看我的这篇原创文章:[我为什么推荐你写博客?](./docs/我为什么推荐你写博客.md)

S
SnailClimb 已提交
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
### 多用 Github

没事多去Github转转,如果有能力可以参与到一些开源项目中。多看看别人开源的优秀项目,看看别人的代码和设计思路,看的多了,你的编程思想也会慢慢得到提升。除了这些优秀的开源项目之外,Github上面还有很多不错的开源文档、开源资料什么的,我觉得对我们平时学习都挺有帮助。Github用得好还能装一下,毕竟人家还是一个全英文网站,咳咳咳。

### 实践

多去实践,将学到的东西运用到实际项目中去。很多人都找我抱怨过没有实际项目让自己去做,怎么能有项目经验呢?如果实在没有实际项目让你去做,我觉得你可以通过下面几种方式:

1. 在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深出学。
2. Github或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
3. 自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖。

### 注意代码规范

从学习编程的第一天起就要养成不错的编码习惯,包、类、方法的命名这些是最基本的。

推荐阅读: 

- 阿里巴巴Java开发手册(详尽版)[https://github.com/alibaba/p3c/blob/master/阿里巴巴Java开发手册(详尽版).pdf](https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C%EF%BC%88%E8%AF%A6%E5%B0%BD%E7%89%88%EF%BC%89.pdf)  
- Google Java编程风格指南:<http://www.hawstein.com/posts/google-java-style.html>
S
SnailClimb 已提交
103
- Effective Java第三版中文版: <https://legacy.gitbook.com/book/jiapengcai/effective-java>
S
SnailClimb 已提交
104 105 106 107 108

### 沟通能力

程序员也离不开沟通。你可能需要与客户交流需求,还要和同事交流项目问题,还有可能定期需要向领导汇报项目进展情况。所以,我觉得不错的沟通能力也是一个优秀的程序员应该有的基本素质。

K
Kou Shuang 已提交
109 110
## 如何提升个人影响力

S
SnailClimb 已提交
111 112
## 面试必知

S
SnailClimb 已提交
113
### 如何获取大厂面试机会?
S
SnailClimb 已提交
114

S
SnailClimb 已提交
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
**在讲如何获取大厂面试机会之前,先来给大家科普/对比一下两个校招非常常见的概念——春招和秋招。**

1. **招聘人数** :秋招多于春招 ;
2. **招聘时间** : 秋招一般7月左右开始,大概一直持续到10月底。但是大厂(如BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为3月,次佳时间为4月,进入5月基本就不会再有春招了(金三银四)。
3. **应聘难度** :秋招略大于春招;
4. **招聘公司:** 秋招数量多,而春招数量较少,一般为秋招的补充。

综上,一般来说,秋招的含金量明显是高于春招的。

**下面我就说一下我自己知道的一些方法,不过应该也涵盖了大部分获取面试机会的方法。**

1. 关注大厂官网,随时投递简历(走流程的网申);
2. 线下参加宣讲会,直接投递简历(相比于线上投递成功的几率会高很多!);
3. 找到师兄师姐/认识的人,帮忙内推(能够让你避开网申简历筛选,笔试筛选,还是挺不错的,不过也还是需要你的简历够棒);
4. 博客发文被看中/Github优秀开源项目作者,大厂内部人员邀请你面试;
5. 求职类网站投递简历(不是太推荐,适合海投)。

### 面试的时候应该穿什么?

穿西装、打领带、小皮鞋?NO!NO!NO!这是互联网公司面试又不是去走红毯,所以你只需要穿的简单大方就好,不需要太正式。

### 面试前有哪些需要注意的地方?

1. [提前准备好自我介绍;](#怎么自我介绍比较好)
2. 随身带上自己的成绩单和简历(有的公司在面试前都会让你交一份成绩单和简历当做面试中的参考);
3. 如果需要笔试就提前刷一些笔试题;
4. 花时间做一些逻辑题和智力题(面试中发现有些公司都有逻辑题或者智力题测试环节,并且都把逻辑提或者智力题成绩作为很重要的一个参考);
5. [准备好自己的项目介绍;](#如何介绍自己的项目)
6. 面试之前做好定向复习(所谓定向复习就是专门针对你要面试的公司来复习。比如你在面试之前可以在网上找找有没有你要面试的公司的面经);

### 怎么自我介绍比较好?

从HR面、技术面到高管面/部门主管面,面试官一般会让你先自我介绍一下,所以好好准备自己的自我介绍真的非常重要。网上一般建议的是准备好两份自我介绍:一份对hr说的,主要讲能突出自己的经历,会的编程技术一语带过;另一份对技术面试官说的,主要讲自己会的技术细节,项目经验,经历那些就一语带过。

我这里简单分享一下我自己的自我介绍的一个简单的模板吧:

> 面试官,您好!我叫某某。大学时间我主要利用课外时间学习某某。在校期间参与过一个某某系统的开发,另外,自己学习过程中也写过很多系统比如某某系统。在学习之余,我比较喜欢通过博客整理分享自己所学知识。我现在是某某社区的认证作者,写过某某很不错的文章。另外,我获得过某某奖,我的Github上开源的某个项目已经有多少Star了。

### 如何介绍自己的项目?

如果有项目的话,技术面试第一步,面试官一般都是让你自己介绍一下你的项目。你可以从下面几个方向来考虑:

1. 对项目整体设计的一个感受(面试官可能会让你画系统的架构图)
2. 在这个项目中你负责了什么、做了什么、担任了什么角色
3. 从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
4. 另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。
S
SnailClimb 已提交
161

S
SnailClimb 已提交
162 163
### 如果面试官问"你有什么问题问我吗?"时,你该如何回答

164
[如果面试官问"你有什么问题问我吗?"时,你该如何回答](docs/如果面试官问你“你有什么问题问我吗”时%2C你该如何回答.md)
S
SnailClimb 已提交
165 166 167 168 169

几乎每一场面试,特别是HR面和高管面的时候,面试官总是会在结尾问我:“问了你这么多问题了,你有什么问题问我吗?”。不管是技术面试还是非技术面试,如果你想赢得公司的青睐和尊重,我觉得我们都应该重视这个问题。

网上提供了很多问题模板,我觉得回答这个问题重要要的就是:真诚一点,不要问太 Low 的问题。

S
SnailClimb 已提交
170 171 172
### 面试官问你的优点是什么,应该如何回答?

回答这样的问题,最好能够结合你要应聘的职位来做针对性回答。一般面试官问这个问题的时候,很可能会只让你说几个你觉得最能体现你能力的优点,为了避免自己在面试过程中不知道该说自己的那些优点,你可以在面试之前好好准备一下。 面试的时候最好可以说几个你要应聘的职位所做的事情需要的优点或者说你要应聘的公司比较看重的优点(企业文化)。
S
SnailClimb 已提交
173 174 175

### 面试官问你的缺点是什么,应该如何回答?

S
SnailClimb 已提交
176
缺点肯定不能是目标岗位需要的关键能力!!!
S
SnailClimb 已提交
177

S
SnailClimb 已提交
178
总之,记住一点,面试官问你这个问题的话,你可以说一些不影响你这个职位工作需要的一些缺点。比如你面试后端工程师,面试官问你的缺点是什么的话,你可以这样说:自己比较内向,平时不太爱与人交流,但是考虑到以后可能要和客户沟通,自己正在努力改。
S
SnailClimb 已提交
179

S
SnailClimb 已提交
180 181 182 183 184 185 186 187 188 189 190 191 192 193
## 如何写出更优秀的代码

### Java

1. 使用 IntelliJ IDEA 作为您的集成开发环境 (IDE)
1. 使用 JDK 8 或更高版本
1. 使用 Maven/Gradle
1. 使用 Lombok
1. 编写单元测试
1. 重构:常见,但也很慢
1. 注意代码规范
1. 定期联络客户,以获取他们的反馈

上述建议的详细内容:[八点建议助您写出优雅的Java代码](docs/八点建议助您写出优雅的Java代码.md)