首页   注册   登录
 Balloonwj 最近的时间轴更新
Balloonwj

Balloonwj

棒槌打鼓鼓不响。
V2EX 第 321063 号会员,加入于 2018-06-07 11:31:44 +08:00
今日活跃度排名 9198
高性能服务器开发年终技术分享
  •  1   
    程序员  •  Balloonwj  •  16 小时 25 分钟前  •  最后回复来自 paoqi2048
    2
    谈一谈我们的年终奖
    求职  •  Balloonwj  •  44 天前  •  最后回复来自 chaingangway123
    12
    程序员面试如何与 HR 谈薪资?
  •  1   
    程序员  •  Balloonwj  •  52 天前  •  最后回复来自 wangyzj
    10
    和大家分享一下我面试后端开发经理的经历
  •  4   
    求职  •  Balloonwj  •  53 天前  •  最后回复来自 yizhimamong
    16
    面试 C++ 后台开发会考察哪些问题?
    C  •  Balloonwj  •  311 天前  •  最后回复来自 amezf
    8
    如何成为一名合格的 C/C++ 开发者?
  •  1   
    C  •  Balloonwj  •  2018-10-31 19:00:58 PM  •  最后回复来自 css3
    1
    Balloonwj 最近回复了
    不用纠结,看看这个,离职拿年终奖避坑指南: https://mp.weixin.qq.com/s/SQL_Qde-Ygo8AySOhC7Tqw
    53 天前
    回复了 Balloonwj 创建的主题 求职 和大家分享一下我面试后端开发经理的经历
    @LossLess 就你三个问题来逐一回复一下你哈。
    问题一 Java 开发方面现在面试已经到要求手写字节码了?
    这个要看你面试的是什么职位,不同的职位要求不一样,我当时求职的职位是京东 XX 基础框架部的技术专家一职,对底层要求较高,所以要求了解点简单的自己码也是情理之中的。
    问题二 基础这个东西,做技术岗的核心职位都会问到,无论是哪种编程语言,你可以不用,但是一定要理解其背后的原理的。大多数人开发都是码业务代码,然后温水煮青蛙,没机会做底层和架构,这样就没有这方面的经验,只能码业务代码,这是一个恶性循环的过程。想在技术上有所实质性的提高,基础的东西要私下自己多练,单纯靠从工作中得来不现实。公司招你的目的是产出,培养你可能只是个附加项。
    问题三 不尊重人的面试也会很多,例如,和你约定好时间,你到公司了才告诉你面试改期或者取消;你面试一个高级职位如经理或者技术总监,安排一个工作不到两年的开发来和你聊,聊的时间还很长,而且净问一些无关痛痒的技术细节;面试通过了,让你等上三两个月;面试官态度不好,面试过程漫不经心等等。一般较好的面试,是双方约定好,安排合适的人给你面试,面试聊公司的需求或者相关的技术栈,尊重面试者以往的工作经历等等。
    有公众号读者在后台向我提问:

    JAVA 程序员,4 年了,迷茫了,希望由前辈可以给指出一个技术路线 5 年左右程序员必须要掌握的知识技能树?
    工作了很久了,对于目前自己的技术程度不满意,但是不知道如何梳理。学习一些技术是不知道是否有用。希望前辈可以指点迷津。不以年限轮英雄,希望可以给出您的见解。修改一次。。。。。。项目设计都是我来做。。。数据库设计也是我来做。。。我的意思是。。感觉目前自己的知识储备不足以支撑我架构以及设计。。求个知识树。。。。
    以下是我的回答:

    先举两个真实的例子。

    例子一:
    前两天我在给我们部门做服务器网络故障排查经验分享时,我问了一个问题关于 java.io.DataOutputStream 的问题,如果从一个 socket 输出流中读取数据,如果当前流中没有数据,读方法是否会阻塞。我又问,假如阻塞,会阻塞多久?我们如何避免这个问题。很多人回答不上来,更不用说,Java 中的 AIO、NIO 的使用细节了。

    例子二:
    我归纳一下,情况大致如下:
    有不少朋友通过我的公众号『 easyserverdev 』(高性能服务器开发)中的『职业指导』模块找到我,来意大致是:做 java 开发工作了三五年了,月收入不到二万,现在因为人到中年,经济压力比较大; 但是工作上只能做做模块,写写业务代码,所以即使跳槽也不会拿到满意的薪资,所以只好维持现状(但又特别苦闷、迷茫)。

    我来说一下我的观点,说的现实一点,题主所谓的迷茫其实因知识能力的不足导致的成就感、收入水平与日益增长的工作年限的矛盾。

    越是高薪的职位,其对人的要求也越高。诸如上面的例子,工作有几年的 java 开发者,连 jdk 中基本的输入输出流的细节都搞不清楚,一问到就是各种摇头,然后说各种 java 框架,这样的开发者其实并不合格,因为他们离开了框架就啥也做不了,那么在工作安排上这样的人不天天也业务代码,谁来写呢?(核心的技术框架是不能让他们写的,由于基础水平不扎实,写出来的框架稳定性和性能会不好)。说的悲观一点,这样的开发者公司是从来不缺的,铁打的营盘,流水的兵,走了再招一批罢了,这也就是所谓的千军易得一将难求,我们要努力做将才乃至帅才,而不是小兵。

    在面试某些 java 开发者时,我问的比较多的一个问题就是,java 多线程之间的同步技术有哪些,然后不少面试者就病急乱投医了,甚至连 ConcurrentHashMap 都说上了。这也是典型的基础概念模糊不清,ConcurrentHashMap 是一个线程安全性容器,但绝不是一个线程同步技术。

    再比如问面试者 java.lang.Object 有哪些常用方法时,不少面试者能说出来的也不多。

    我举这些例子并不是为了要教大家具体的 java 知识,而是为了说明基础知识的重要性。如果你的 java 基础足够好(熟悉 jdk 的常用类,知道常用接口的各种坑和注意事项),那么开发一个东西时即使不用框架你也能顺畅地写出来。这样的人才具备进一步发展的潜力。退一步说,不管多么复杂的 java 框架,都是基于 jdk 那些类库的。你 jdk 的基础知识都学不好,我不相信那些上层框架你能搞的透彻。

    说一千道一万,核心的还是基础知识不扎实的问题。就和刘备当年成就帝业一样,诸葛亮给的策略就是先谋取荆州,再进军西蜀,最后三分天下。同理 jdk 的基础知识就是你应该要首先谋取的“荆州”,进一步的各种框架、架构设计是你的“蜀地”。基础不牢,想其他的东西都是好高骛远,不切实际。最后日复一日,年复一年,在恨自己生不逢时,领导不是伯乐的嗟叹中蹉跎了岁月。

    对于上面这个注重基础的问题上,实际情形中,我遇到三种人。

    第一类:意识不到基础知识的重要性,这类人就不提了。

    第二类,意识到基础知识的重要性,但是总是在各种理由和借口中麻痹自己,温水煮青蛙把自己“煮死”。很多咨询我的人,也是这种情况,说什么自己工作忙,家庭琐事多。我其实不想多说啥,为失败找借口的人太多,为成功找方法的人太少。你工作五年了,每个月抽一天时间来补一下基础,你现在都不是这样了,这个时间也抽不出来?自我麻痹而已。这类人其实是有想法没啥行动。

    第三类,意识到基础的重要性,同时在各种闲暇时间去补充,去积累。这样的人学的最快,最后达到的高度也很高(当然收入也不菲)。

    扎实的基础知识 + 见多识广的框架经验,让你在职场上变得无可替代,这才是你的核心竞争力。答案可能有点跑题了,但是我觉得先解决思想上的问题,行动上就容易许多了。

    如果您想和我聊聊这方面的东西或者职业上有任何迷茫和困惑想听听我的建议,您可以关注公众号『 easyserverdev 』(高性能服务器开发),在其中回复『职业指导』,我们可以针对性地聊一聊。
    53 天前
    回复了 HW312 创建的主题 求职 应届生以后想社招去 BAT 技能树应该点什么?
    57 天前
    回复了 javaWeber 创建的主题 程序员 最近去大公司面试,面得怀疑人生。。
    别灰心,用心准备和多尝试几次就可以了,可以看看下面这些内容:

    文章标题:我是如何年薪五十万的?
    文章链接: https://mp.weixin.qq.com/s/ypfyu0skXYNQUBNZD7xt2Q

    文章标题:聊一聊程序员如何增加收入
    文章链接: https://mp.weixin.qq.com/s/vjVzcPxB44Kgc9pXgXxFng

    文章标题:技术面试与 HR 谈薪技巧
    文章链接: https://mp.weixin.qq.com/s/VsLY7UIvQg-1yuV_S5yb6g

    文章标题:我求职后端开发经理的面试经历与总结
    文章链接: https://mp.weixin.qq.com/s/3L9b86sMG3FmCHfxRdbrZw

    文章标题:如何设计断线自动重连机制
    文章链接: https://mp.weixin.qq.com/s/LztW3X8AcpICfkti8W8XTQ

    文章标题:心跳包机制设计详解
    文章链接: https://mp.weixin.qq.com/s/CmtXhax60uBDrfZ-NWr7OA5

    文章标题:Linux 网络故障排查的瑞士军刀
    文章链接: https://mp.weixin.qq.com/s/bP28Kxe_gc7cUDEgYhYSHA

    文章标题:Linux tcpdump 使用介绍
    文章链接: https://mp.weixin.qq.com/s/0eKYNcm5YS8hgQlpSTsjhA

    文章标题:服务器开发通信协议如何设计
    文章链接: https://mp.weixin.qq.com/s/7_aekhF7DIk6BMoUR6RGvw

    文章标题: [腾讯后台开发] 实习生技能要求
    文章链接: https://mp.weixin.qq.com/s/v16kDrdtz6bv1oTahM9oRg

    文章标题:从零实现一个 http 服务器
    文章链接: https://mp.weixin.qq.com/s/WVrPG8Mx_RY7g7BosjdF8Q

    文章标题:服务器开发中网络数据分析与故障排查经验漫谈
    文章链接: https://mp.weixin.qq.com/s/6ZmiKUz4ZQvwLXkzzBrFcg
    316 天前
    回复了 blurh11E27 创建的主题 程序员 你们下班之后有什么好的娱乐活动 ?
    写代码。
    319 天前
    回复了 ihei 创建的主题 程序员 大家能否分享下 C++的升级之路呀
    今天晚上“高性能服务器开发” QQ 群(群号:**49114021**,有兴趣的读者可以加一下)里面一名叫“**成都-go-戒炸鸡**”的群友提出了他最近面试的一些面试题,面试题内容个人觉得非常典型、也非常有代表性和针对性,故拿出来与大家分享一下,也感谢他的分享。成都-go-戒炸鸡说:

    > “今天面试,我没答出来的有 redis 持久化机制,redis 销毁方式机制,mq 实现原理,c++虚函数,hash 冲突的解决,memcached 一致性哈希,socket 函数 select 的缺陷,epoll 模型,同步互斥,异步非阻塞,回调的概念,innodb 索引原理,单向图最短路径,动态规划算法。”

    为了避免问题有歧义,面试题略有修改。

    #### 思路分析

    从面试题的内容可以看出,这是一个后台开发的职位。

    除了关于 **c++ 虚函数**这个问题以外,其他的大多数问题都与哪种编程语言关系不大,大多数是原理性和基础性的问题,少数是工作经验问题,笔者试着给大家分析。

    ##### 语言基础

    **C++ 虚函数**这是面试初、中级 C ++ 职位一个概率 95%以上的面试题。一般有以下几种问法:

    1. 在有继承关系的父子类中,构建和析构一个子类对象时,父子构造函数和析构函数的执行顺序分别是怎样的?

    2. 在有继承关系的类体系中,父类的构造函数和析构函数一定要申明为 virtual 吗?如果不申明为 virtual 会怎样?

    3. 什么是 C++ 多态? C++ 多态的实现原理是什么?

    4. 什么是虚函数?虚函数的实现原理是什么?

    5. 什么是虚表?虚表的内存结构布局如何?虚表的第一项(或第二项)是什么?

    6. 菱形继承(类 D 同时继承 B 和 C,B 和 C 又继承自 A )体系下,虚表在各个类中的布局如何?如果类 B 和类 C 同时有一个成员变了 m,m 如何在 D 对象的内存地址上分布的?是否会相互覆盖?

    ##### 算法与数据结构基础

    说到算法和数据结构,对于社招人士和对于应届生一般是不一样的,对于大的互联网公司和一般的小的企业也是不一样的。下面根据我当面试官面试别人和找工作被别人面试经验来谈一谈。

    先说考察的内容,除了一些特殊的岗位,常见的算法和数据结构面试问题有如下:

    1. 排序(常考的排序按频率考排序为:快速排序 > 冒泡排序 > 归并排序 > 桶排序)

    一般对于对算法基础有要求的公司,如果你是应届生或者工作经验在一至三年内,以上算法如果写不出来,给面试官的影响会非常不好,甚至直接被 pass 掉。对于工作三年以上的社会人士,如果写不出来,但是能分析出其算法复杂度、最好和最坏的情况下的复杂度,说出算法大致原理,在多数面试官面前也可以过的。**注意,如果你是学生,写不出来或者写的不对,基本上面试过不了。**

    1. 二分查找

    二分查找的算法尽量要求写出来。当然,大多数面试官并不会直接问你二分查找,而是结合具体的场景,例如如何求一个数的平方根,这个时候你要能想到是二分查找。我在 2017 年年底,面试 agora 时,面试官问了一个问题:如何从所有很多的 ip 地址中快速找个某个 ip 地址。

    2. 链表

    无论是应届生还是工作年限不长的社会人士,琏表常见的操作一定要熟练写出来,如链表的查找、定位、反转、连接等等。还有一些经典的问题也经常被问到,如两个链表如何判断有环(我在 2017 年面试饿了么二面、上海黄金交易所一面被问过)。链表的问题一般不难,但是链表的问题存在非常多的“**坑**”,如很多人不注意边界检查、空链表、返回一个链表的函数应该返回链表的头指针等等。

    3. 队列与栈

    对于应届生来说一般这一类问的比较少,但是对于社会人士尤其是中高级岗位开发,会结合相关的问题问的比较多,例如让面试者利用队列写一个多线程下的生产者和消费者程序,全面考察的多线程的资源同步与竞态问题(下文介绍多线程面试题时详细地介绍)。

    栈一般对于基础要求高的面试,会结合函数调用实现来问。即函数如何实现的,包括函数的调用的几种常见调用方式、参数的入栈顺序、内存栈在地址从高向低扩展、栈帧指针和栈顶指针的位置、函数内局部变量在栈中的内存分布、函数调用结束后,调用者和被调用者谁和如何清理栈等等。某年面试京东一基础部门,面试官让写从 0 加到 100 这样一个求和算法,然后写其汇编代码。

    4. 哈希表

    哈希表是考察最多的数据结构之一。常见的问题有哈希冲突的检测、让面试者写一个哈希插入函数等等。基本上一场面试下来不考察红黑树基本上就会问哈希表,而且问题可浅可深。我印象比较深刻的是,当年面试百度广告推荐部门时,二面问的一些关于哈希表的问题。当时面试官时先问的链表,接着问的哈希冲突的解决方案,后来让写一个哈希插入算法,这里需要注意的是,你的算法中插入的元素一定要是通用元素,所以对于 C++ 或者 Java 语言,一定要使用模板这一类参数作为哈希插入算法的对象。然后,就是哈希表中多个元素冲突时,某个位置的元素使用链表往后穿成一串的方案。最终考察 linux 下 malloc (下面的 ptmalloc ) 函数在频繁调用造成的内存碎片问题,以及开源方案解决方案 tcmalloc 和 jemalloc。总体下来,面试官是一步步引导你深入。(有兴趣的读者可以自行搜索,网上有很多相关资料)

    5. 树

    面试高频的树是红黑树,也有一部分是 B 树( B+树)。

    红黑树一般的问的深浅不一,大多数面试官只要能说出红黑树的概念、左旋右旋的方式、分析出查找和插入的平均算法复杂度和最好最坏时的算法复杂度,并不要写面试者写出具体代码实现。一般 C++ 面试问 stl 的 map,java 面试问 TreeMap 基本上就等于开始问你红黑树了,要有心里准备。笔者曾经面试爱奇艺被问过红黑树。

    B 树一般不会直接问,问的最多的形式是通过问 MySQL 索引实现原理(数据库知识点将在下文中讨论)。笔者面试腾讯看点部门二面被问到过。

    6. 图

    图的问题就我个人面试从来没遇到过,不过据我某位哥哥所说,他在进三星电子之前有一道面试题就是**深度优先**和**广度优先**问题。

    7. 其他的一些算法

    如 A*寻路、霍夫曼编码也偶尔会在某一个领域的公司的面试中被问到,如宝开(《植物大战僵尸》的母公司, 在上海人民广场附近有分公司)。

    ##### 编码基本功

    还有一类面试题不好分类,笔者姑且将其当作是考察编码基本功,这类问题既可以考察算法也可以考察你写代码基本素养,这些素养不仅包括编码风格、计算机英语水平、调试能力等,还包括你对细节的掌握和易错点理解,如有意识地对边界条件的检查和非法值的过滤。请读者看以下的代码执行结果是什么?(笔者 2011 年去北京中关村的鼎普面试的问题)

    ```
    for(char i = 0; i 256; ++i)
    {
    printf("%d\n", i);
    }
    ```

    下面再列举几个常见的编码题:

    1. 实现一个 memmov 函数

    这个题目考查点在于 memmov 函数与 memcpy 函数的区别,这两者对于源地址与目标地址内存有重叠的这一情况的处理方式是不一样的。

    2. 实现 strcpy 或 strncpy 函数

    这个函数写出来没啥难度,但是除了边界条件需要检查以外,还有一个容易被忽视的地方即其返回值一定要是目标内存地址,以支持所谓的链式拷贝。即:

    ```
    strcpy(dest3, strcpy(dest2, strcpy(dest1, src1)));
    ```
    3. 实现 atoi 函数

    这个函数的签名如下:

    ```
    int atoi(const char* p);
    ```

    容易疏忽的地方有如下几点:

    4. 小数点问题,如数字 0.123 和.123 都是合法的;

    5. 正负号问题,如+123 和-123 ;

    6. 考虑如何识别第一个非法字符问题,如 123Z89,则应转换成应该 123。

    我在面试掌门科技(无线万能钥匙那一家)就遇到过这样的问题。

    ##### 多线程开发基础

    现如今的多核 CPU 早已经是司空见惯,而多线程编程早已经是“飞入寻常百姓家”。对于大多数桌面应用(与 Web 开发相对),尤其是像后台开发这样的岗位,且**面试者是社会人员**(有一定的工作经验),如果面试者不熟悉多线程编程,那么一般会被直接 pass 掉。

    这里说的“**熟悉多线程编程**”到底熟悉到什么程度呢?一般包括:知道何种场合下需要新建新的线程、线程如何创建和等待、线程与进程的关系、线程局部存储( TLS 或者叫 thread local )、多线程访问资源产生竞态的原因和解决方案等等、熟练使用所在操作系统平台提供的线程同步的各种原语。

    对于 C++ 开发者,你需要:

    * 对于 Windows 开发者,你需要熟练使用 Interlock 系列函数、CriticalSection、Event、Mutex、Semphore 等 API 函数和两个重要的函数 WaitForSingleObject、WaitForMultipleObjects。

    * 对于 linux 开发者,你需要熟练使用 mutex、semphore、condition_variable、read-write-lock 等操作系统 API。

    对于 Java,你需要熟悉使用 synchronized 关键字、CountDownLatch、CyclicBarrier、Semaphore 以及 java.util.concurrent 等包中的大多数线程同步对象。

    ##### 数据库

    数据库知识一般在大的互联网企业对应届生不做硬性要求,对于小的互联网企业或社会人士一般有一定的要求。其要求一般包括:

    1. 熟悉基本 SQL 操作

    包括增删改查( insert、delete、update、select 语句),排序 order,条件查询( where 子语句),限制查询结果数量( LIMIT 语句)等

    2. 稍微高级一点的 SQL 操作(如 Group by,in,join,left join,多表联合查询,别名的使用,select 子语句等)

    3. 索引的概念、索引的原理、索引的创建技巧

    4. 数据库本身的操作,建库建表,数据的导入导出

    5. 数据库用户权限控制(权限机制)

    6. MySQL 的两种数据库引擎的区别

    7. SQL 优化技巧

    ##### 网络编程

    网络编程这一块,对于应届生或者初级岗位一般只会问一些基础网络通信原理(如三次握手和四次挥手)的 socket 基础 API 的使用,客户端与服务器端网络通信的流程(回答 [客户端创建 socket -> 连接 server ->收发数据;服务器端创建 socket -> 绑定 ip 和端口号 -> 启动侦听 ->接受客户端连接 ->与客户端通信收发数据] 即可)、TCP 与 UDP 的区别等等。

    对于工作经验三年以内的社会人士或者一些中级面试者一般会问一些稍微重难点问题,如 select 函数的用法,非阻塞 connect 函数的写法,epoll 的水平和边缘模式、阻塞 socket 与非阻塞 socket 的区别、send/recv 函数的返回值情形、reuse_addr 选项等等。Windows 平台可能还会问 WSAEventSelect 和 WSAAsyncSelect 函数的用法、完成端口( IOCP 模型)。

    对于三年以上尤其是“号称”自己设计过服务器、看过开源网络通信库代码的面试者,面试官一般会深入问一些问题,这类问题要么是实际项目中常见的难题或者网络通信细节,根据我的经验,一般有这样一些问题:

    1. nagle 算法;

    2. keepalive 选项;

    3. Linger 选项;

    4. 对于某一端出现大量 CLOSE_WAIT 或者 TIME_WAIT 如何解决;

    5. 通讯协议如何设计或如何解决数据包的粘包与分片问题;

    6. 心跳机制如何设计;(可能不会直接问问题本身,如问如何检查死链)

    7. 断线重连机制如何设计;

    8. 对 IO Multiplexing 技术的理解;

    9. 收发数据包正确的方式,收发缓冲区如何设计;

    10. 优雅关闭;

    11. 定时器如何设计;

    12. epoll 的实现原理。

    举个例子,让读者感受一下,笔者曾去 BiliBili 被问过这样一个问题:如果 A 机器与 B 机器网络 connect 成功后从未互发过数据,此时其中一机器突然断电,则另外一台机器与断电的机器之间的网络连接处于哪种状态?

    ##### 内存数据库技术

    时下以 NoSql key-value 为思想的内存数据库大行其道,广泛地用于各种后台项目开发。所以**熟悉一种或几种内存数据库程序已经是面试后台开发的基本要求**,而这当中以 redis 和 memcached 为最典型代表,这里以 redis 为例。

    * 第一层面一般是对 redis 的基础用法的考察

    如考察 redis 支持的基础数据类型、redis 的数据持久化、事务等。

    * 第二层面不仅考察 redis 的基础用法,还会深入到 redis 源码层面上,如 redis 的网络通信模型、redis 各种数据结构的实现等等。

    笔者以为,无论是从找工作应付面试还是从提高技术的角度,redis 是一个非常值得学习的开源软件,希望广大读者有意识地去了解、学习它。

    #### 项目经验

    除了社会招聘和一些小型的企业,一般的大型互联网公司对应届生不会做过多的项目经验要求,而是希望他们算法与数据结构等基础扎实、动手实践能力强即可。对于一般的小公司,对于应届生会要求其至少熟练使用一门编程语言以及相应的开发工具,号称熟悉 linux C++ 开发的面试者,不熟悉 GDB 调试基本上不是真正的熟悉 linux C++ 开发;号称熟悉汇编或者反汇编,不熟悉 IDA 或者 OllyDbg,基本上也是名不符实的;号称熟悉 VC++ 开发,连 F8、F9、F10、F11、F12 等快捷键不熟悉也是难以经得住面试官的提问的;号称熟悉 Java 开发的却对 IDEA 或 eclipse 陌生,这也是说不过去的。

    这里给一些学历不算好,学校不是非常有名,尤其是二本以下的广大想进入 IT 行业的同学一个建议,在大学期间除了要学好计算机专业基础知识以外,一定要熟练使用一门编程语言以及相应的开发工具。

    关于项目经验,许多面试者认为一定要是自己参与的项目,其实也可以来源于你学习和阅读他人源码或开源软件的源码,如果你能理解并掌握这些开源软件中的思想和技术,在面试的时候能够与面试官侃侃而谈,面试官也会非常满意的。笔者的一个学弟前段时间告诉我,他看懂了我公众号 [**easyserverdev**] 中《**服务器开发基础系列和进阶**》的文章后,成功拿到了网易的 offer,有兴趣的读者可以好好看一下。

    很多同学可能纠结大学或者研究生期间要不要跟着导师做一些项目。当然,如果这些项目是课程要求,那么你必须得参加;如果这些项目是可以选择性的,尤其是一些仅仅拿着第三方的库进行所谓的包装和加工,那么建议可以少参加一些。

    #### 思路总结

    不知道通过我上面的技术分析,聪明的读者是否已经明确本文开头“成都-go-戒炸鸡”同学提出的面试题中,哪些是**技术面试**重难点,哪些又是**技术开发**的重难点呢?

    #### 技术比重与薪资

    这里根据我自己招人的经验来谈一谈技术水平与薪资,就上面的面试题来看:

    * 第一层次:如果面试者能答出上面面试题中的 C++基础问题和算法与数据结构题目(如 C++ 函数与 hash 冲突的解决、innodb 索引原理,单向图最短路径,动态规划算法等),可以认为面试者是一个合格的初、中级开发者,薪资范围一般在 6 ~ 12k (注意:这里以我所在的上海为参考标准)。

    * 第二层次:在第一层次基础之上,如果面试者还能答出上述面试题中网络编程相关的或者多线程相关的问题(如 socket 函数 select 的缺陷,epoll 模型,同步互斥,异步非阻塞,回调的概念等),可以认为面试者是个基础不错的中级开发者,薪资范围一般在 14 ~ 22k 之间。

    * 第三层次:在前两个层次之间,如果面试者还能回答出上述问题中关于 redis、memcached 和 mq 实现原理,说明面试者是一个有着不错项目经验并且对一些常用开源项目也有一定的理解,薪资可以给到 22k +。

    #### 总结

    工资收入是每个人的秘密,一般不轻易对外人道也。这里笔者冒天下之大不韪,只想说明一点——对于普通开发人员,提高薪资最好的捷径就是提高自己的技术,无论是“面向搜索引擎编程”还是“面向工资编程”终将得不偿失,聪明的你一定会深谋远虑的。

    文章来源:[https://mp.weixin.qq.com/s?__biz=MzU2MTQ1MzI3NQ==&mid=2247486424&idx=1&sn=ad30fe4ed875023735a1d01e30086e93&chksm=fc79ca6ccb0e437a0d32eba037b58cdd2ccff4344f516b2aa13baee6002bd34db0285cd9a124&token=1887257674&lang=zh_CN#rd]( https://mp.weixin.qq.com/s?__biz=MzU2MTQ1MzI3NQ==&mid=2247486424&idx=1&sn=ad30fe4ed875023735a1d01e30086e93&chksm=fc79ca6ccb0e437a0d32eba037b58cdd2ccff4344f516b2aa13baee6002bd34db0285cd9a124&token=1887257674&lang=zh_CN#rd)

    作者公众号:高性能服务器开发


    ![]( https://user-gold-cdn.xitu.io/2018/11/17/167208ab2ab452be?w=424&h=248&f=jpeg&s=104286)
    2018-11-19 14:10:24 +08:00
    回复了 javaWeber 创建的主题 程序员 Java 后端开发,应该重点学习哪些知识/技能?
    2018-10-31 11:22:17 +08:00
    回复了 ihei 创建的主题 程序员 大家能否分享下 C++的升级之路呀
    在大多数开发或者准开发人员的认识中,C/C++ 是一门非常难的编程语言,很多人知道它的强大,但因为认为“难”造成的恐惧让很多人放弃。我从学生时代开始接触 C/C++,工作以后先后担任过 C++ 客户端和服务器的开发经理并带队开发,至今已经有十多年了。虽然时至今日哪种编程语言对我来说已经不再重要(我目前主要从事 Java 开发),但 C/C++ 仍然是我最喜欢的编程语言,在我看来,C/C++ 一旦学成,其妙无穷,就像武侠小说中的“九阳神功”一样,有了这个基础,您可以快速学习任何语言和编程技术。

    2018 年 11 月 14 日晚间,我将作一场主题为《如何成为一名合格的 C/C++ 开发者?》的技术直播分享, 将介绍 C/C++ 学习中的重难点和大多数学习者关心的问题,同时针对在校学生和社会人士两大群体因时间和精力的差别问题,就如何学好 C/C++ 给出我的建议和方法。内容包括如下栏目:

    1. 目前 C++ 的应用领域;
    2. Linux C++ 与 Windows C++ 之争;
    3. C++ 语言基础包括哪些;
    4. 如何看待 C++ 11/14/17 新标准;
    5. C++ 与操作系统平台;
    6. C++ 如何进阶;
    7. C++ 面试;
    8. 学生与社会人士学习 C++ 的方式的区别;
    9. 问答环节。

    届时会结合我自身的工作经验来介绍,我这里抛砖引玉,希望能对广大想成为合格的 C/C++ 开发的朋友有一些帮助和启示。

    有兴趣的朋友,可以点击下面的链接报名参加: https://mp.weixin.qq.com/s/eCv55gfNZRR4-ZG4_eBvGQ
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   999 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 19:56 · PVG 03:56 · LAX 11:56 · JFK 14:56
    ♥ Do have faith in what you're doing.