『腾讯后台开发』实习生技能要求

如题,应届生除了要良好地掌握算法和数据结构以外,以下一些技能点列表希望对大家有帮助,有兴趣的朋友可以参考这个针对性地补缺补差。文章列出的技能点有的要求熟悉,有的了解即可,注意技能点前面的修饰词。如果没有明确给出“熟悉”“了解”等字眼,要求均为熟悉。

一、操作系统方面

  • 多线程相关与线程之间同步技术
  • 熟练使用(但不局限于)以下linux API
  • linux下的线程创建、等待、获取线程id
1int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
2int pthread_join(pthread_t thread, void **retval);
3pthread_t pthread_self(void);

  • 常见线程之间的同步技术(何时该用那种技术)

互斥体

1int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
2int pthread_mutex_destroy(pthread_mutex_t *mutex);
3int pthread_mutex_lock(pthread_mutex_t *mutex);
4int pthread_mutex_trylock(pthread_mutex_t *mutex);
5int pthread_mutex_unlock(pthread_mutex_t *mutex); 

信号量

1int sem_init(sem_t *sem, int pshared, unsigned int value);
2int sem_destroy(sem_t *sem);
3int sem_wait(sem_t *sem);
4int sem_post(sem_t *sem);
5int sem_getvalue(sem_t *sem, int *valp);

条件变量

1int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
2int pthread_cond_destroy(pthread_cond_t *cond);
3int pthread_cond_signal(pthread_cond_t *cond);
4int pthread_cond_broadcast(pthread_cond_t *cond);
5int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
6int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime);

读写/自旋锁

 1int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
 2int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
 3int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
 4int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
 5int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
 6int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
 7int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
 8//这两个函数在Linux和Mac的man文档里都没有,新版的pthread.h里面也没有,旧版的能找到
 9int pthread_rwlock_timedrdlock_np(pthread_rwlock_t *rwlock, const struct timespec *deltatime);
10int pthread_rwlock_timedwrlock_np(pthread_rwlock_t *rwlock, const struct timespec *deltatime);
11int pthread_spin_init (__pthread_spinlock_t *__lock, int __pshared);
12int pthread_spin_destroy (__pthread_spinlock_t *__lock);
13int pthread_spin_trylock (__pthread_spinlock_t *__lock);
14int pthread_spin_unlock (__pthread_spinlock_t *__lock);
15int pthread_spin_lock (__pthread_spinlock_t *__lock);
  • 熟悉守护进程的创建、原理
  • 了解计划作业crontab
  • 熟悉进程、线程状态查看命令(topstracepstack
  • 熟悉内存状态查看命令memstatfree
  • 熟悉IO状态查看命令iostatdfdu
  • 了解linux文件的权限、用户、时间(ctime、mtime、atime)、inode等文件基本属性,熟练使用chmodchownchgrp等基本命令。
  • 熟悉文件传输命令scprzsz命令、
  • 熟悉文件定位命令findwhereis命令。
  • 熟悉软链接,熟悉ln命令。
  • 熟悉lsof命令。

二、网络

  • 熟悉tcp状态机(三次握手、四次挥手)。
  • 熟悉tcpdump命令。
  • 熟悉网络状态和防火墙状态查看命令:netstat、ifconfig、iptables
  • 熟悉socket API,包括但不限于(connectacceptbindlistensend/sendtorecv/recvfromselectgethostbyname
 1int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
 2int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
 3int bind(int socket, const struct sockaddr *address, socklen_t address_len);
 4int listen(int sockfd, int backlog);
 5ssize_t send(int sockfd, const void *buf, size_t len, int flags);
 6ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
 7ssize_t recv(int sockfd, void *buf, size_t len, int flags);
 8ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
 9int select(int nfds, fd_set *readfds, fd_set *writefds,
10                  fd_set *exceptfds, struct timeval *timeout);
11void FD_CLR(int fd, fd_set *set);
12int  FD_ISSET(int fd, fd_set *set);
13void FD_SET(int fd, fd_set *set);
14void FD_ZERO(fd_set *set);
15struct hostent *gethostbyname(const char *name);

  • 熟悉epoll,熟悉水平触发与边缘触发。

1int epoll_create(int size);
2int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
3int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

  • 熟悉阻塞socket和非阻塞socket在connect、send、recv等行为上的区别,如何将socket设置为非阻塞的

三、脚本工具

  • 了解shell基本语法、变量操作、函数、循环/条件判断等程序结构。
  • 熟练使用文本编辑工具vi/vim。
  • 了解使用文本处理命令grep、sed、cut。
  • 了解awk命令。

四、数据库

  • 熟悉数据表结构设计(三范式、字段属性)。
  • 了解查询优化(索引的概念与创建、sql优化)。
  • 熟悉常见的mysql API函数:
1mysql_real_connect
2mysql_select_db
3mysql_query
4mysql_store_result
5mysql_free_result
6mysql_num_rows
7mysql_close
8mysql_errno

五、编程语言

C/C++方面

  • 熟悉内存分布(堆、栈、静态/全局/局部变量、虚指针…)
  • 熟悉Makefile。
  • 熟悉gdb调试(断点、查看内存、执行跟踪、了解CPU主要寄存器作用…)。
  • 熟悉性能分析工具(gprof)。
  • 熟悉C-Runtime常用函数(如字符串格式化函数printf、scanf,字符串比较连接函数、内存分配函数、文件与目录操作函数等)。
  • 熟悉stl库。
  • 熟悉OO思想、常见设计模式(如单例模式、工厂设计模式、装饰者模式、Builder模式、生产者消费者模式、策略模式等)。
  • 熟悉RAII、pimpl惯用法。
  • 有一定的代码质量和重构能力。

文章版权所有,转载请保留文章末尾版权信息和公众号信息

欢迎关注公众号『easyserverdev』。如果有任何技术或者职业方面的问题需要我提供帮助,可通过这个公众号与我取得联系,此公众号不仅分享高性能服务器开发经验和故事,同时也免费为广大技术朋友提供技术答疑和职业解惑,您有任何问题都可以在微信公众号直接留言,我会尽快回复您。

原文地址:https://www.cnblogs.com/balloonwj/p/9093620.html

时间: 2024-10-15 19:27:01

『腾讯后台开发』实习生技能要求的相关文章

(转)Linux后台开发应该具备技能

Linux后台开发应该具备技能 分类: 杂谈 2013-04-14 12:45 741人阅读 评论(0) 收藏 举报 Linux后台开发应该具备技能 一.linux和os: 1.命令:netstat tcpdump ipcs ipcrm  这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验 2.cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握 3.awk sed需掌握 4.共享内存的使用实现原理

强烈推荐一本今年八月份的新书《后台开发:核心技术与应用实践》,作者腾讯资深后台开发工程师徐晓鑫

   昨天被华章安利了一本今年8月份的新书<后台开发:核心技术与应用实践>,极好的书,评价和口碑超高.   这本书腾讯公司资深研发工程师多年后台开发经验总结,获腾讯.Facebook.微软.阿里.百度多位资深技术专家高度认可. 完整勾勒后台开发技术能力体系,多维度讲解了成为一名后台开发工程师所需掌握的核心技术.开发工具和实践方法,后台工程师修炼必读.作者sharexu是位值得推崇的女性开发者.   后台开发是一个“历史悠久”的领域,同是也是一个沉淀深厚,高技术价值的领域.本书清晰.严谨.务实的

做后台开发用到的技能都在这儿——《后台开发:核心技术与应用实践》

大多数面向对象语言没有指针的概念,C语言也没有对象的概念,同时具有指针和对象的C++语言在学习时有高昂的门槛,同时在服务端后台开发.处理多并发的海量网络请求等方面有天然的优势.就像Android开发对性能要求比较高的地图.视频.即时通讯由NDK开发一样,当网络应用的用户量. 并发量迅速增长,达到一定量级之后,后端服务的技术架构都会适用于自己玩玩的JavaScript(Bmob云端代码).适用于小规模网站的PHP和适用于中等规模网站的Java转变为Linux C++. 徐老师的<后台开发:核心技术

『浅入浅出』MySQL 和 InnoDB

作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的.不了解数据库的有所帮助. 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出. 数据库的定义 很多开发者在最开始时其实都对数据

重新学习MySQL数据库2:『浅入浅出』MySQL 和 InnoDB

重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的.不了解数据库的有所帮助. 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者

NHibernate框架与BLL+DAL+Model+Controller+UI 多层架构十分相似--『Spring.NET+NHibernate+泛型』概述、知识准备及介绍(一)

原文://http://blog.csdn.net/wb09100310/article/details/47271555 1. 概述 搭建了Spring.NET+NHibernate的一个数据查询系统.之前没用过这两个框架,也算是先学现买,在做完设计之 后花了一周搭建成功了.其中,还加上了我的一些改进思想,把DAO和BLL之中相似且常用的增删改查通过泛型T抽象到了DAO和BLL的父类中,其DAO 和BLL子类只需继承父类就拥有了这些方法.和之前的一个数据库表(视图)对应一个实体,一个实体对应一

Force.com - 微信接口后台开发与配置

为寻找国内免费云资源作为微信后台,花了一天时间试用SinaAppEngine(SAE),调试太不方便用户体验差.新浪作为媒体公司技术功底经不起考验,亚马逊能推出AWS,新浪还不行!更好选项是百度BaiduAppEngine(BAE),但最近尽然开始收费,还是安心回到force.com,至少老外承诺免费的东西一直免费且可靠. 第一步,申请force.com账号,请至developer.force.com申请,如是www.salesforce.com申请下来的是作为客户的账号,不适合开发人员:第二步

后台开发:核心技术与应用实践(边写代码边读书才是最好的学习方式)

写下这些文字的时候是我在腾讯工作的第五个年头,这五年让我对效率有了更深刻的认识.还是一个学生的时候,和大家一样,我也曾一字不落地读过<UNIX环境高级编程>,<UNIX环境网络编程>一二三卷,<TCP/IP详解>一二三卷,<C++ Primer>等书籍,这些都是非常经典的开发书籍.它们的共同特点是大而全,不漏掉任何一个知识点,并且每个知识点都讲得非常详细.但在实际的开发工作中,可能用到的知识点只有20%,其他的80%则很少用到.这也是我写这本书的初衷:用最短

腾讯敏捷开发及快速迭代

腾讯敏捷开发及快速迭代 http://www.edu-hb.com     2013-6-4 15:23:50     来源: itwriter      从 2006 年开始,腾讯的研发规模开始膨胀,开发模式急需规范和标准化,到底走 IPD(集成产品开发)还是 Agile(敏捷)的开发路线,公司管理层也在为拿不定主意而犯愁,之后研发管理部开始与 ThoughtWorks 公司接触,逐渐将敏捷产品开发引入进来,并正式命名为 TAPD(Tencent Agile Product Developme