考证我觉得没必要,如果你的目的是为了找工作,除了搞项目以外,还有个更功利的选择就是准备面试.
会写 java 不代表会回答那些稀奇古怪的问题,尤其是应届生面试的话,少不了还有很多算法啊\网络啊\操作系统啊之类的问题,末了还得学会在纸上写代码.刷刷题,把基础课认真过一遍就要半年了
对于我来说,如果能确信将来 10 年甚至更久,我都要做且只会做 c++开发,那么我觉得时间花下去可能还是值得的.或者对一些人来说,主要的工作就是搞 c++编译器相关的开发,那自然也需要知道每一个细节.否则花那么多时间在精通一门语言上面我感觉不划算.熟悉的是语言本身,而不是软件工程.
且 c++的很多问题之所以那么复杂,并不是必须那么复杂,很多其它语言都有更为精简\灵活的解决方式.c++的复杂度是人为创造出来的,是设计语言时为了做到后向兼容,又要把功能做大做全之类的初衷的妥协.很多 c++的坑,就只是 c++语言本身的坑,换门语言没有任何意义.很多所谓高级的技巧,也只是 c++本身的语法糖,但是复杂度却和学一门新语言也差不多.
仅从学习的角度上来说,c++真是可以很庞大的.所以我现在深深地觉得够用就好了,不过这儿还是可以说说我走过的弯路.
基本的语法知道后,还得阅读<effective c++>之类去了解它的坑吧.好多人都说这本书是宝书,每一遍都会有新的体会.我很同意 bobuick,spww 说的,这本书没有足够的工程经验,要完全理解是很困难的,这也是为什么很多人要看很多遍的原因.然后可能会觉得书中有些坑很奇怪,想了解得更透彻,于是 google 一番,发现有人推荐<深入理解对象模型>,这本书能完整啃下来也很难.
STL 起码得会用吧,有人会推荐厚厚的大部头<C++标准程序库>(虽然其实大部分是例子且只看常用的部分的话也还习惯你).然后就会有人说要彻底了解 STL,你得看<STL 源码剖析>.
以为终于差不多了吧,发现很多项目在用 c++11 了,那得找本系统介绍 c++11 的书看看吧,比如 Scott Meyers 大婶的或者 IBM 出的那本.然后发现 c++11 里又增加了很多新的库,比如 thread library.以上的书还没介绍,那就得再搜点资料看看.然后可能还会碰到例如 std::regex 在 gcc 4.6/4.7 里已经定义,但未完全实现之类的坑.
boost 用的也很广,也得看看吧?又有很多人不满意停留在会用上,欢快地去读它的源码了.
以上还不涉及到阅读过程中其它的知识,例如标准库里涉及到的系统调用等\深度探索 c++模型里涉及到的编译相关的知识,stl 里涉及到的算法知识,甚至单独的例如设计模式之类的.
终于感觉差不多了吧?你去读一些比较复杂的开源库(或者很不幸像我一样发现工作的项目里就有人用了这种技巧,虽然很讨厌,但是能怎么办呢)发现还是读不懂,很可能里面用了一些高级的模板技巧甚至模板元编程,于是你又想去读<C++ templates complete guide>或者<Modern C++ pattern>.这两本能啃完的那也不是一般人了.
2. sa_data[14]; 这到底是啥玩意?这串数组里存的“ 14 字节协议地址”究竟是什么?
3 ,文章里面说 struct sockaddr 和 struct sockaddr_in 是并列的,但是我看来都是大小不一样啊。
我已经忘得差不多了=.=,但是看了一下你的那篇文章,感觉是这个意思:
struct sockaddr {
unsigned short sa_family; /* 地址家族, AF_xxx */
char sa_data[14]; /*14 字节协议地址*/
};
struct sockaddr_in {
short int sin_family; /* 通信类型 */
unsigned short int sin_port; /* 端口 */
struct in_addr sin_addr; /* Internet 地址 */
unsigned char sin_zero[8]; /* 与 sockaddr 结构的长度相同*/
};
文中的意思是这两个结构体是等效的,可以看到除了共同的 sa_family 以外,上面的 sa_data 为 14 字节,下面的端口(2 字节) + ipv4 的地址(4 字节) + char[8],刚好也是 14 字节.
杭州可以逛的地方很多,远远不止西湖,周末闲暇时间开出市区 20 公里,就是有山有水,鸟语花香,人还少.找间有风景的茶室,泡杯茶,一个惬意的下午就过去了.
现在在魔都工作,开出 50 公里,恨不能还在市区,好不容易找到一片湖,还是人工湖,还都是熙熙攘攘的人;市区内就佘山一座小土丘
以他一贯对作品的质量控制来说这个视频的质量不用担心吧,真心蛮想看的,就是很贵啊..
sed 什么的我也很头疼,一般这种情况我都用 python 了,尽管肯定比 sed 什么罗嗦很多.好处是即使不太会用 python,分别搜索一下 python 怎么遍历目录,怎么读写文件,怎么改编码.有 cpp 基础,几段代码拼一下也就出来了.
上一家公司从底层库到上层业务逻辑都有单元测试,不过有两个前提:
业务逻辑是按照国际规范标准来的,改动较小;
开发周期较长,在排期的时候就是按照业务代码的 50%的时间用于安排写单元测试的,即如果写 30 天业务代码,就应该同时有额外 15 天的时间用于写单元测试代码的.
所以最后提交时,同时提交的一堆报告里,是必须要包含覆盖率的,整体的覆盖率,和你所在模块的覆盖率的前后变化.
一些问题细化会更好.比如
1.有没有"计算机网络"基础?如果没有这方面基础的话,可能推荐的教程里就需要包含例如 OSI 模型什么,每层干啥,TCP,UDP 分别是什么原理,适用怎样的场景等等
2.为啥要学 socket 编程?需要重头造轮子吗,还是只是了解个原理的大概,然后直接用现成的框架?这个差别也很大,如果只要了解个大概,网上有很多现成的中文教程.另外拿起随便一本例如<CSAPP>\<Unix 大学教程>\<APUE>之类的书,里面每一本都会有教 socket 编程的范例,都是以应用出发,很多原理或者协议的细节是不会讲到的.而如果目的打算深入研究的话,最好就去啃啃<TCP/IP 详解(卷一)>之类的书咯.
3.推荐代码库,好像没看到语言..
以前用过 latex 的,后来换成老婆手工 word 排版的。。话说见过不少人直接用的求职网站上自动生成的,虽然”标准化“感很重,但是应该不会有太多的排版错误什么的