目录
1.职业规划。
2.刷题。
3.看书。
《剑指offer》
《数据结构算法与应用:C++语言描述 》
《Effective C++》
《C与指针》
4.异步刷题。
5.未来。
C/C++
TCP/IP 和网络编程
Linux服务器开发
其它
这也是一个总结2018年7月的博文。
1.职业规划。
在各公司的招聘网站看岗位需求具备的条件。我确定了求职大方向。c++工程师和算法工程师(图像处理;视觉开发)。
可见这两个岗位的核心都是具备 精通C/C++ 的技能。
我决定先从c++开发开始学。
作为一个c++开发者,必须具备的技能如下。
我求助了本科学长狗哥关于刷题的方法。
开始刷题。
2.刷题。
我刚开始刷题是刷基础小题,没有经验。大概就是把所有面试会考的题库都包括,然后从零开始刷,边刷边做错题记录。后来我发现这种效率很低,没有专项训练,也没有系统地去学每个分支体系,顶多是应试罢了。
然后我放弃了题海战术。
开始看书。
3.看书。
《剑指offer》
第一本书是《剑指offer》,里面有66个题目。书的结构如下。
基础知识
- 编程语言
- 数据结构
- 算法
高质量代码
- 规范性
- 完整性
- 鲁棒性
解决问题的思路
- 画图
- 抽象问题具体化
- 复杂问题简单化
优化效率
- 时间效率
- 空间和时间效率平衡
其它能力
- 沟通和学习
- 知识迁移
- 抽象建模
- 发散思维
两个面试案例
开始每天下班回来看一个题目。因为很久没编程。所有最开始的几道题我做得非常艰难,阅读解决思路,然后复制答案,就修改了几处就在在线编程中运行测试。实际上还是无法自己写出这样的代码。然后我做到了第七题的时候,我就开始认认真真地分析思路,并在草稿纸上默写出自己的代码,画图分析数据结构。这种方法大大加深了我的印象。我开始自己在在线编程上写代码调试了,测试结果也accept了,当时是非常喜悦的。我开始每天这样,一天做一个题,就很满足了。
知道我看到了算法部分。第11题。已经开始有点看不懂了,因为C++基础并不牢固,我看答案的时候,对于&的含义都模糊不清。而书中并没有详细的说明。可能这些都是基本常识。这时我意识到我该回去好好补补算法基础了。
我求助了本科同学,武大cs专业。他现在已经拿到了offer。
他推荐了两本书,《算法导论》。《深入理解计算机系统》。
我买了 《数据结构算法与应用:C++语言描述》。《深入理解计算机系统》。
第二本真的太难了,我不打算看完,准备作为参考书,工具书。
开始看第一本。
《数据结构算法与应用:C++语言描述 》
这是一本讲算法的书。都是每天下班后晚上看的,所以花了几天才看完了第一章 (c++回顾)。
函数与参数
- 传值参数
- 模板函数
- 引用参数
- 常量引用参数
- 返回值
- 重载函数
异常
- 抛出异常
- 处理异常
动态存储空间分配
- 操作符new
- 一维数组
- 异常处理
- 操作符delete
- 二维数组
自有数据类型
- 类currency
- 类的封装
- 操作符重载
- 友元和保护性类成员
- 条件编译语句
异常类
递归函数
- 递归的数学函数(阶乘,斐波那契数列)
- 归纳证明法
- c++递归函数(阶乘,求和,排列)
标准模板库STL
测试与调试
主要讨论了C++的特性。很粗略。但是给我了一个非常不错的学习C++的框架视图。我认为我有必要更深入去研读C++的原理。尤其是标注成红色的内容。当我终于看懂递归方法的全排列的时候,豁然开朗,算法真的很有趣,数学也很美,尤其是完全理解了解决问题的思路后。当我看到STL时,我依然弄不清楚底层的算法,意识到光是STL就可以让我好好学习很久了。
这个时候我有点不想继续看这本书后面的知识了。因为我觉得我的C++基础知识真的很薄弱。然而我又不想从头开始看那本厚厚的primer,我这时候翻出来我很久之前买的一本《Effective C++》,我的计划是从框架体系入手,也就是从高级开发的角度入手,再去追求细节的完美。过分讲究细节会拖延我的进度。因为我还有很多东西要学。tcpIp网络编程,还有tmp,Linux之类的。这是条不归路哈哈。
开始看《Effective C++》。
《Effective C++》
这是一本超级酷的书。尤其是翻译者。翻译的太好了!
学一个语言的最终目的就是去学会去应用它,而这本书告诉你如何更优质地去使用这门语言。对于一个没有写过自己独立程序的人来说,这本书可以帮助我从一开始就养成好的编程习惯。
对于其中的C的细节,我都会在《C与指针》里面找到解释。
开始看《C与指针》。作为参考。
《C与指针》
这本书既基础又深刻,关键还是97的老书,C99版本之前的。所以有的细节我读的都很费力。
同时这也是这本书的优点,这本书真的太细了!我看了二维数组,讲解的非常细致,好好看,就会理解的很深刻。
但是弄懂细节需要大量的时间。
这是一个时间分配的问题。也许我看多了自然就知道怎么处理了。
4.异步刷题。
后来我无聊的时候,就开始刷C++专项训练的题。只不过现在的刷题不是为了刷题,而是无聊刷题,所以我叫它异步刷题。
比如出去胡吃海喝的时候,我就刷个五题。
拉屎的时候,也来个五题。
刷牙的时候,来个五题。
睡前,再来个五题。
有次做得太兴奋了,搞得失眠了,所以不建议睡前刷。睡就好好睡。
也有段时间,因为想搞懂题目,花了很多精力去查资料。导致进程卡死。但是刷题的目的是为了查漏补缺,不是学习。
5.未来。
C/C++
- 试图寻找些开源项目自己看。现在的水平不够。
- 读读STL源码。
TCP/IP 和网络编程
Linux服务器开发
其它
- 把简历做得更好。
- 还要花时间去做个PPT,告诉老板我在想什么,为什么不在公司实习了。
总之未来会很忙很忙。