经常被问到的问题, 如何学习C++, 如何学习Linux, 如何开始?

其实这个问题对于不同的人答案往往不尽相同,每个人所处的环境就不同。一个普遍的现象是有一些windows开发基础的人,他们想转Linux开发,那我就以这个点和大家讨论一下。

相对于Linux下的C/C++开发,在windows下的初学者往往容易入门,原因是visual studio, 这个强大的工具隐藏了很多的细节,好多人甚至以为拖拖控件,写写消息响应函数就是软件工程师了,这点在入门的时候尤为明显,出生牛犊不怕虎,信心满满。但是在这个强大工具的背后,隐藏了太多的东西,其中许多对于我们来说是非常重要的东西,比如Make, debug, call stack, 汇编代码,OS,哪些功能是系统提供的,哪些是工具提供的。所以很多人转过来的时候往往去类比以前windows的知识,但是又对不上,再加上无人指点,工作不用,可能慢慢的就会失去信心。

但是我认为作为一个有追求的软件工程师,如果不了解Linux, 我不认为他合格,当然此处无意挑起平台之争,实在是对于软件工程师而言Linux给了我们另一个选择,另一种思路,同时也提供了我们很多的轮子和一座宝库。

如下总结出一些建议,希望对Windows转Linux开发的朋友有所帮助。

  1. 不要一开始就去搞内核,先装上系统用Linux来完成一些日常的事情,比如:看电影,拷贝文件,添加修改用户,文件,学学shell 脚本。

  2. 试着用命令行去编译一些简单的代码,然后逐步增加难度,然后学学make。

  3. 学习Linux的一些基础知识,找本书看看。

  4. 尝试自己去写一些小的东西,动起手来,别总看书而不去实践,实践出真知。

  5. 学习如何调试代码。

  6. 学习主要的一些系统调用,文件操作,socket操作等等。

  7. 学习简单的驱动开发,比如:串口驱动。

  8. 学习…

  9. 学习内核源代码。

另外在此需要指出的是,当你真正看透了Windows和Linux的软件开发的时候,你可能并不觉得他们有很大的区别,所谓殊途同归,说的可能就是这个道理,比如这两个平台的代码最后都会转换为IA32架构的指令序列,在转换过程中使用了不同的工具,反出来的汇编代码区别也不是太大。还是那句话,做同样的事情,每个人的切入点不同,所谓站得一山方望得另一山高,千万不要畏而不前,迟迟不敢动手。

LinuxC/C++开发大厂职级技能要求

一、编程语言

  • 开发环境搭建、运行第一个hello word【T1】
  • 运用基本数据类型、表达式与操作符进行简单开发【T1】
  • 字符串、向量和数组【T1】
  • 语句和函数【T1】
  • 分支控制、循环【T1】
  • 对象生命周期 & 垃圾回收【T2】
  • 错误和异常处理【T2】
  • 标准库使用【T2】
  • 日志分析、断点调试等简单代码调试方法【T3】
  • 面向对象设计原则【T3】
  • 单例模式、工厂模式等简单的设计模式【T4】
  • gdb高级调试技巧和常用系统分析工具使用【T5】
  • 适配器模式、代理模式等常见设计模式【T6】
  • 创建型、结构型、行为型设计模式的应用技巧【T7-T8】
  • 代码耦合的产生原因和规避方法【T9】
  • 整洁代码的设计思路和落地【代码能力】
  • 复杂系统重构,识别系统潜在风险以及优化点,进行模块划分以及分层设计,提高系统内聚性降低模块间的低耦度【架构能力】
  • 对编程范式有深入的了解,并对语言新特性熟悉,能够针对具体的问题场景分析,交付优秀的代码【代码能力】
  • 熟悉常见的并发编程模型,并能根据业务场景进行落地【代码能力】
  • 代码质量管理,熟知测试理论,并能运用测试各阶段的设计原则,高质量的输出测试用例【工程素养】

二、数据结构与算法

  • 初识数据结构和算法 - 冒泡排序【T2】
  • 数组、列表、栈,队列等基本线性数据结构【T2】
  • 递归、排序、二分查找算法【T2】
  • 跳表、散列表、hash算法【T3】
  • 二叉树、红黑树、字典树【T3】
  • 堆排序、归并排序、二分查找等高阶算法【T4】
  • 字符串匹配、KMP算法【T4】
  • 熟悉图论算法:dijkstra算法、最小生成树、深度/广度优先搜索等【T5】
  • 贪心算法、动态规划【T5】
  • 能够分析算法的执行效率和资源消耗、时间和空间复杂度分析【T6】
  • 能够根据实际场景,选用合适的数据结构和算法进行程序设计【T7-T9】
  • 位运算(异或非)【T7-T9】

三、数据库

  • MySQL服务器的安装与配置【T1】
  • 数据表的新建、查询和删除操作【T1】
  • 标准语言SQL和CURD能力【T2】
  • 表、主键、索引、视图【T2】
  • 表结构设计规范与范式运用【T3】
  • 事务的使用以及其ACID特性【T3】
  • 不同存储引擎的区别【T3】
  • 事务的隔离级别和实践原理【T4】
  • 数据库的连接池管理【T4】
  • 数据库的权限管理【T4】
  • SQL注入、web shell攻击的危害和规避方法【T4】
  • 数据库的集群和高可用【T5】
  • SQL语句优化、执行计划查看、索引和参数调优【T5】
  • 运用Redis进行数据缓存处理,提高系统性能【T6】
  • redis内存模型【T7-T9】
  • redis的持久化、主从同步以及集群【T7-T9】
  • 针对业务数据特点,对存储进行选型
  • 数据库理论(关系型非关系型)

四、网络原理

  • 利用ping、ifconfig、telnet等命令查看计算机网络状况【T1】
  • 网络体系中每一层的作用和基本协议【T2】
  • TCP和UDP的基本原理【T3】
  • http协议基础与应用【T3】
  • TCP协议的可靠传输机制【T4】
  • TCP协议的流量控制和拥塞控制【T4】
  • Session、Cookie 与 Application【T5】
  • 网络安全的加密算法与数字签名【T5】
  • https协议的基本原理【T5】
  • http2.0与http3.0特性【T6-T9】
  • XSS攻击的危害和规避方法【T6-T9】
  • Wireshark、tcpdump等网络抓包工具使用和结果分析【T6-T9】
  • 网络故障分析与问题解决【T6-T9】
  • 网络规划与网络拓扑

五、操作系统

  • 常用的文件、目录操作命令使用【T1】
  • 程序的编译与运行【T1】
  • shell脚本与vi使用【T2】
  • linux系统性能监控命令的使用【T2】
  • 线程、进程的概念、创建与调度【T3】
  • 用户态和内核态的基本概念、区别【T3】
  • CPU的上下文切换、中断处理与系统调度【T3】
  • 磁盘文件系统、虚拟文件系统与文件缓存【T4】
  • 物理内存和虚拟内存【T4】
  • 进程间通信机制【T5】
  • 死锁的危害、出现原因、解决方法【T5】
  • 内存溢出、内存泄漏的原因与解决【T6】
  • 如何高效利用CPU缓存【T7】
  • 内存问题分析与性能优化【T7】
  • 磁盘 I/O 性能优化【T7】
  • 系统网络性能评估与优化【T8-T9】

六、网络编程

  • 熟悉TCP/IP 四层模型,利用socket编程编写简单客户/服务器程序【T2】
  • 基本TCP/UDP套接字编程【T3】
  • 五种常见I/O模型【T4】
  • I/O多路复用技术【T5】
  • time_wait、close_wait状态产生的原因、危害与避免方法【T5】
  • 熟练掌握各种I/O模型的运用场景【T5】
  • 掌握C10k问题的基本解决方案(这个是不是不合适呀?现在都在攻克C10M问题了)【T5】
  • 掌握常用网络框架,并能根据场景灵活应用【T6-T9】

七、分布式架构

  • 简单rpc协议设计和框架搭建【T5】
  • rpc的服务寻址、数据流的序列化与反序列化和网路传输【T5】
  • 分布式事务理论与常见的互联网公司落地方案【T5】
  • 一致性算法【T5】
  • 分布式锁的设计与实现【T5】
  • 主流的微服务rpc框架【T5】
  • 服务注册、服务发现【T6】
  • 分布式trace、监控告警【T7】
  • 常见负载均衡算法以及各算法的适用场景【T7】
  • 主流分布式系统架构设计,比如分布式缓存、API网关、分布式消息组件【T8-T9】
  • 分布式系统的缓存设计、缓存雪崩、缓存击穿等问题的解决方案【T8-T9】
  • 微服架构熔断保护、降级熔断、流量控制、故障隔离、故障恢复方案设计【架构能力】
  • 分布式架构的高并发、高可用、可扩展【架构能力】

八、云原生

  • Docker原理与搭建【T4】
  • Kubernetes【T5】
  • 容器编排、容器网络【T6】
  • 集成构建【T6】
  • 云上常见的SaaS服务和组件【T7】
  • 弹性扩缩容【T8】
  • 服务网格Istio和Serverless【T9】

九、软技能【T9】

  • 需求分析
  • 项目设计方法
  • 项目流程管理
  • 项目风险控制
  • 跨部门合作
  • 沟通技巧
  • 组织协调
  • 目标管理

可以看到,对于定岗的每一个技术模块都会有相对的技术掌握标准,可以对照着技术提纲与自我的技术掌握情况进行对比参照。

LinuxC/C++服务器开发T9职级系统性学习路线学习资料、教学视频和学习路线图

C/C++Linux服务器开发/高级架构师 学习

Linux C/C++开发的难度到底在哪?大厂岗位要求相关推荐

  1. BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!

    目前从事 Linux C/C++ 开发的程序员很多,尤其是像百度.腾讯.阿里这样的大公司,他们的网站流量巨大,业务逻辑复杂,会遇到很多瓶颈,需要开发底层服务来提高程序效率,快速响应用户请求. 这些公司 ...

  2. 【经验总结】10年的嵌入式开发老手,到底是如何快速学习和使用RT-Thread的?(文末赠书5本)

    [经验总结]一位近10年的嵌入式开发老手,到底是如何快速学习和使用RT-Thread的? RT-Thread绝对可以称得上国内优秀且排名靠前的操作系统,在嵌入式IoT领域一直享有盛名.近些年,物联网产 ...

  3. Linux下服务器端开发流程及相关工具介绍(C++)

    原文:Linux下服务器端开发流程及相关工具介绍(C++) 去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把 ...

  4. Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用

    关与设备树的概念,我们在Exynos4412 内核移植(六)-- 设备树解析 里面已经学习过,下面看一下设备树在设备驱动开发中起到的作用 Device Tree是一种描述硬件的数据结构,设备树源(De ...

  5. C语言开发里指针到底快还是不快?(底层汇编解释)

    C语言开发里指针到底快还是不快? 答:不快,甚至比一般变量要慢! 近日我能看到网上很多人说指针快,我非常纳闷,因为我在学习汇编和cpu底层架构时去翻译过c语言的一些指针代码,给我的答案是:指针从来不快 ...

  6. Linux应用开发【第四章】Linux进程间通信应用开发

    文章目录 4 Linux进程间通信应用开发 4.1 初识进程 4.1.1 进程的概念 4.1.1.1 程序 4.1.1.2 进程 4.1.1.3 进程和程序的联系 4.1.1.4 进程和程序的区别 4 ...

  7. 《Linux设备驱动开发详解(第2版)》隆重出版

    Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级) [新品] 点击看大图     基本信息 * 作者: 宋宝华       * 出版社:人民邮电出版社     * ISBN:97 ...

  8. Linux/c++服务器开发方向的重点

    作者:NULL 链接:https://www.zhihu.com/question/37247264/answer/2352680534 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  9. 2 Linux环境基础开发工具

    2 Linux环境基础开发工具 2.1 Linux软件包管理器yum 2.1.1 软件安装的方式 1. 源码安装 大多数开源的软件都是源码的形式.拿过来自己编译,安装. 优点:源码安装兼容性好. 缺点 ...

最新文章

  1. 张芯译老师 实战销售管理专家
  2. 软件项目管理0717:开发一定要了解客户
  3. 华为抢购助手_华为荣耀20系列手机采用的五项新科技,科普简介
  4. PaddleOCR和ChineseOCR的对比
  5. 天津科技大学计算机网络,计算机网络PPT(天津科技大学讲稿-张强)第一章英文对照...
  6. 错误记录(五)Error creating bean with name 'sessionFactory' defined in file
  7. Java引用类型分析
  8. 菜鸟学Linux 第026篇笔记 LVM
  9. 4 相机切换_价格屠夫、训练伴侣——海鸟4K运动相机简评
  10. 东北大学计算机学院拟录取分数线,东北大学全国各省各专业录取分数线汇总!(含艺术类)...
  11. [小结] flexbox
  12. .NET 中的对象序列化
  13. 绘制永磁同步电机定子绕组示意图——Visio制图总结【电控类】(一)
  14. 使用scrapy来抓取 ChinaPub 这个网站上的图片_并且将其下载到本地
  15. 如何为您的客户创造价值?
  16. 今日恐慌与贪婪指数为25 等级转为极度恐慌
  17. RMQ---csu1809
  18. CLIENT_ACKNOWLEDGE机制测试
  19. EM4001射频模块读卡
  20. 指针和地址之间的关系是什么?

热门文章

  1. win7\win10加域的电脑不输入密码直接登录登录电脑桌面
  2. 玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!
  3. iVMS-4200 Vs区别_异地恋 VS 网恋,哪个更难坚持到最后?| Newth互动158
  4. Finished with error:Navicat 运行SQL文件 报错
  5. Excel如何将工作表按数值大小排序
  6. 什么是PT,PT和BT有什么不同?
  7. Hazel游戏引擎(001-003)
  8. 流程审批类系统数据库结构怎么定义
  9. 求一个n*n矩阵对角线元素之和C语言,求一个n*n矩阵主对角线之和,次对角线元素之和.用指针完成...
  10. 大学毕业生找不到工作的原因何在?