北京手足癣医院医师 https://m-mip.39.net/baidianfeng/mipso_8505703.html卓越软件工程师联盟(简称:ESEU)是以知名企业的CTO和一线技术负责人等高级软件工程师为核心的技术型组织。为了帮助更多年轻的程序员找准自己未来的职业方向,我们特别设计了一个专访系列。也就是对联盟的成员进行特别专访,向大家介绍成员的经历和所在公司的招聘制度,和大家最关心的企业对技术的标准要求。希望回答年轻程序员普遍的一些困惑:怎样才能走进名企?名企到底看重什么?掌握哪些编程语言和技术比较有优势?他们都是怎么培养技术人才的?怎样成为一名高效优秀的工程师?……本期大咖李国松前腾讯高级工程师具有八年互联网相关技术开发和项目管理经验,专注于互联网/移动互联网方向。先后在腾讯、百度等知名互联网企业任职,主要从事互联网领域基础服务和产品的技术研发、运营工作,具有丰富的高并发大容量互联网应用的架构设计和开发经历。QAQ您的技术成长经历是怎样的呢?
我毕业后做过一段时间WinCE平台上的嵌入式开发和休闲游戏。之后兴趣点转移到后台,在08年加入腾讯无线事业部,从事后台服务的研发工作。13年加入百度,在QA部门和基础架构部负责基础服务研发工作。去年尝试了一下物联网平台(IoT)方向的创业。现在开始自己的创业项目-TalkU一个外语人的专属社区。
技术方面从Windows客户端转战Linux后台,有过开发、运维、QA团队的工作经历。开发语言以C++为主,有PHP开发经验,现在用Golang较多,正在学习产品设计和前端技术。
Q技术团队中,作为负责人的角色职责是什么样的?之前我带领一个5-7人的小团队,负责应用层服务的开发工作。当时的角色更偏向于架构师,除了团队日常进度管理,还设计整个服务架构,帮助团队确认整体开发方向,并解决重点技术问题。Q遇到过哪些印象深刻的紧急情况?我主要从事后台开发和运维相关的工作,所以以开发为例,选取一个例子和大家分享下BAT一般处理问题的基本思路,事件如下:(对当时的问题做了一些简化,主要用于说明思路)曾经参与优化一款知名app的后台收藏功能。当时遇到一个问题,有用户反馈在收藏夹中收藏失败,需要后台开发同学跟进处理。那么我们一般是如何分析和解决类似问题的呢?首先,我们会先找到收藏功能的编号或API,在日志中grep到所有该请求失败的日志(系统会保留所有后台应用的日志并备份到一个统一的服务器或集群中,方便后续开发和运维同学查询并追踪问题),如果客服童鞋有联系到用户,可以直接拿到用户id进行查询就更加方便了,然后,我们对比失败的日志和用户反馈的时间节点,进一步检查请求失败的原因(第一级服务获取请求失败,可能会对应后台多个其他服务)。经分析发现请求失败的原因是由于早期开发的版本对用户使用行为的考量不够严谨,导致服务上线一段时间后出现部分用户有超过甚至更多收藏的情况,而超出该阈值后该用户的收藏列表拉取速度会急剧下降,甚至会经常出现拉取列表失败的情况。其实这个问题简单来说就是一个数据量大了之后需要增加缓存的问题,即使是对于小站或站长而言都是相对常见的问题,简单来说解决思路就是增加缓存!那么是不是我们直接添加一个缓存就可以了呢,BAT一般都是如何来处理类似问题呢?我们需要先确认下需要缓存的数量(包括单条缓存大小和预计缓存总量),根据缓存的总量和单条数据量来对缓存进行选型(如常见的开源缓存memcache,redis,mongodb,以及自研缓存等),那么我们需要考查的指标包括单机缓存的读取写入速度、单机缓存容量及内存利用率、缓存是否支持分布式部署、是否支持水平扩展、运维难度(运维同学对该系统的熟悉程度,如是否有大规模大容量运维经验、是否有完备的社区或内部团队支持)等多个考查纬度。之后,当我们完成缓存的初步选型后,会进行系统改造的详细设计(可能以文档或邮件形式),之后会组织开发团队的高工进行设计评审,敲定方案。方案确定之后,就可以开始编码啦,编码完成后,需要编写单元测试并进行初步的自测,之后交给测试妹子来进行更加系统的测试,测试通过之后,就可以交付运维同学上线了(上线过程也需要考虑如何进行处理负载均衡,以保证服务在上线过程中一直处于可用状态)如果上线正常,后台开发同学一般会在一周内持续观察线上日志情况,确保上线的功能正常。Q技术出身的创业者,有哪些优势和劣势?技术出身的创业者,一般逻辑思维能力会比较强,思维也会比较缜密。他们对于技术方面的重视程度也会较高,对于新技术的接受程度可能也会更高一些,有利于提高公司整体的服务的质量,为日后的产品推广做好充足的准备。不过技术人员普遍比较内向,不太擅长沟通和推广可能会成为企业发展的短板。另外在创业方向的选择方面,可能会更多的出于技术方面的考虑,而一定程度上忽视用户的真实需求。Q贵公司的招聘流程是怎样的?大公司一般是HR收集初筛过简历后,给到研发团队,我们看过后会电话联系候选人,一般会有一个电话面试,初步了解候选人的技术基础后,约到公司进行面谈。技术面试一般先由中级工程师进行初面,做一些基础题目,然后派出高级工程师,了解下算法、架构等方面的情况,最后给到负责管理的经理或总监谈谈心。当然具体的流程因公司和部门不同会有差异,每位负责面试的工程师的风格差异也比较大。Q可以成功入职的程序员需要具备什么样的条件?从硬件和软件两个方面来说。硬性条件当然是要有过硬的技术基础,头脑灵活,可以独立分析并解决难度相对较大的问题。如果之前的项目经验和公司现有的项目匹配度较高会更加好。软性条件主要是指沟通能力、理解能力,以及个人的积极主动性,和公司的风格是否匹配(所谓公司认同感)等。创业公司甚至会要求应聘者和所有团队成员见一面,聊聊,以判别能否良好的融入团队。对于后台开发同学来讲,要求对后台服务系统的整个运作过程有深入的理解,对影响性能的地方能做到“一切尽在掌握”,如计算机的各个部分是如何协作完成的,哪些地方会是瓶颈,预计能达到什么负载,了解各个组件的性能。对于自己日常工作负责的服务,要求在系统架构设计阶段就能够根据系统架构和硬件性能大致预测出系统的负载能力。在日常工作中,要求能够根据遇到的问题,主动思考本部门的运营机制,理解服务需要达到的可用性要求。在进行技术选型时,能与相关同事积极沟通,并具备及时重构的能力。Q现在公司主要的业务部门和主要技术?现在创业,技术方面是“全栈”。我之前主要在腾讯无线部门工作,主要使用C++技术,公司内部使用的C++基础类库和基础服务均为自研,部分服务现已开源。Q怎么培养一个小白程序员,并成长成高精尖人才?对于计算机相关专业的同学,上课听讲,把操作系统、编译原理、计算机网络、计算机体系结构等重要的基础课程学好会对日后进入公司并开展工作有很大帮助。对于非计算机相关专业或毕业后想转行做程序员的同学,建议从实际项目开始学习,先了解基本操作和如何使用,之后有时间的话努力学习计算机原理知识会有很大的帮助。Q当前技术的实际应用,以及技术优化的方法。对于C++的基础服务,主要是基于公司内部C++基础库开发,例如下载服务器、分布式缓存服务等。以下载服务器为例,技术优化更多的会