C语言学不会怎么办?

既然C语言基础差,那不如去恶补一下C语言基础吧!

我帮你整理了一下C语言的学习路线,按照这个路线去学习,每个阶段都都认真执行的话,保证帮你从入门到进阶掌握C语言:


一、C/C++基础(3个月)


1、面向对象的三大特性:封装、继承、多态
3、类的构造函数、、赋值函数、拷贝函数
4、移动构造函数与拷贝构造函数对比
5、深拷贝与浅拷贝的区别
6、空类有哪些函数?空类的大小?
7、内存分区:全局区、堆区、栈区、常量区、代码区
14、指针与引用的区别
15、野指针产生与避免
16、多态:动态多态、静态多态
17、虚函数实现动态多态的原理、虚函数与纯虚函数的区别
18、继承时,父类的析构函数是否为虚函数?构造函数能不能为虚函数?为什么?
19、静态多态:重写、重载、模板
20、static关键字:修饰局部变量、全局变量、类中成员变量、类中成员函数
21、const关键字:修饰变量、指针、类对象、类中成员函数
22、extern关键字:修饰全局变量
23、volatile关键字:避免编译器指令优化
30、vector迭代器失效的情况
33、STL容器空间配置器
参考书籍:《》(第5版)、《STL剖析》、《深度探索C++对象模型》


1、OSI7层网络模型:应用层、表示层、会话层、运输层、网络层、、物理层
2、TCP/IP四层网络模型:应用层、运输层、网际层、接口层
综合OSI与TCP/IP模型,学习五层网络模型:
从上向下架构:应用层、运输层、网络层、链路层、物理层
6、为啥有IP地址还需要MAC地址?同理,为啥有了MAC地址还需要IP地址?
7、网络层转发数据报的流程
8、子网划分、子网掩码
9、网络控制报文协议ICMP
11、TCP与UDP的区别及应用场景
13、TCP滑动窗口原理
14、TCP超时重传时间选择
16、TCP(一定要弄清楚与流量控制的区别)
17、TCP三次握手及状态变化。为啥不是两次握手?
18、TCP四次挥手及状态变化。为啥不是三次挥手?
20、SYN泛洪攻击。如何解决?
23、路由器与交换机的区别
24、UDP如何实现可靠传输
25、DNS域名系统。采用TCP还是UDP协议?为什么?
26、FTP协议(了解)
27、HTTP请求报文与响应报文首部结构
34、输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)
参考书籍:《计算机网络》(第5版)、《TCP/IP详解卷1:协议》、《》

三、操作系统(1个月)


2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
3、互斥锁与自旋锁的底层区别
4、孤儿进程与僵尸进程
6、多线程与多进程比较
7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
8、管道与消息队列对比
9、fork进程的底层:读时共享,写时复制
10、线程上下文切换的流程
11、进程上下文切换的流程
13、阻塞IO与非阻塞IO
14、同步与异步的概念
15、静态链接与动态链接的过程
16、概念(非常重要)
17、MMU地址翻译的具体流程
19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法

ps:操作系统的内容看起来不是很多,实际上每个问题答案的底层原理要弄懂还是很考验基本功的。比如:互斥锁与自旋锁的区别,实际上涉及到阻塞时线程的状态是不一样的。互斥锁阻塞的线程是挂起的,此时系统会优先执行其它可执行的线程,就会将阻塞的线程切换到可执行线程,而当临界区执行的时间非常短时,此时线程切换频繁、开销较大,此时就会采用自旋锁的方式,让阻塞的线程处于忙等状态。


四、网络编程(1个月)


1、IO:select、poll、epoll的区别(非常重要,几乎必问,回答得越底层越好,要会使用)
4、基于事件驱动的reactor模式
5、边沿触发与水平触发的区别
6、非阻塞IO与阻塞IO区别
ps:网络编程掌握以上几点就够了,要搞明白还是要花很久时间的。


五、数据结构与算法及刷题(2个月)


6、:二叉搜索树、平衡树、红黑树
9、排序算法:冒泡排序、简单选择排序、插入排序、希尔排序、、堆排序、快速排序
(要求能够面试时手写出堆排序和快速排序)
10、二分法:旋转数组找target
11、回溯法:全排列、复原IP地址
12、动态规划(掌握基本的动态规划的几个题其实就够了,如:、接雨水、股票的最佳买入时机)
参考书籍:《算法》《》
ps:建议刷题与数据结构算法同时进行,这样理解得更深入。刷题网站leetcode,刷完《》其实就能解决大部分面试手撕了。


2、数据库索引类型及原理:B+树索引、哈希表索引
4、事务:事务的四大特性(ACID)、事务并发的三大问题、事务隔离级别及实现原理
5、多版本并发控制实现机制(MCVV)原理
参考书籍:《高性能MySQL》
ps:这里也可以参考本人写的博客:mysql知识点总结。

如果时间够的话就可以写一个项目,当然大部分人写的项目都是一个烂大街的项目,也就是“web高性能服务器”。其实就是根据陈硕大神写的《Linux高性能服务器编程:使用muduo C++网络库》进行改编,当然啦,读懂这本书还是很耗时的,学习其中的思想也会受益匪浅的。
按照上面推荐的内容来学习的话,要学习得深入一点的话1年的时间肯定需要的,甚至2年也不足为其。当然对于非科班的学生来说,大部分都没有充足的时间的,这时候建议尽量把C++基础、计算机网络、操作系统、网络编程、数据结构与算法这五个部分的内容学得很扎实,大概6个月的时间。
然后说一下我本人的学习情况:
2020年3~8月:疫情在家大概3月份开始准备学习C++,因为在家效率极低,玩三天学一天,到7、8月份也只是会用C++,然后写了个MFC的小项目练了练手。
2020年9月:前半个月学习计算机网络,后半个月学习深入理解计算机系统(当然第一遍只看懂个大概)
2020年10月-12月:写多线程服务器项目(即改编muduo),这个过程中伴随学习网络编程、操作系统、C++各种知识(之前C++只学了皮毛)
2021年1月-2月:学习数据结构与算法并刷题,刷了不到200题。(其中寒假在家玩了半个月)
2021年3月:开启海投模式,先投了一批小公司,基本都简历挂,总算有几个小厂给了面试机会,边面试边复习。3月中旬开始投大厂,除了美团一面挂,字节、腾讯、百度面试都很顺利,没挂过,清明之前拿到了字节的口头offer。
2021年4月:字节的正式offer邮件。
(说实话我的学习效率不是很高,因为我喜欢睡懒觉。)


过来人给你讲一讲,c语言其实很简单,简单到就算你精通c语言本身,都找不到工作。

1.玩贪吃蛇,俄罗斯方块,坦克世界,魂斗罗。。。等等fc级的游戏。用c语言的话,一天做几款都是没问题的。

2玩仙剑奇侠传1,然后边看c语言的书,边给sdlpal源码建立架构图。

大致框架就是这样的,先玩游戏,然后知道流程了,想想游戏里有多少元素。然后选择架构,选择分发架构对象,最后c语言就学成了,也能做项目了。

你没发现一件事吗?看中国历史,有很多领导,不论去哪里都能够做的很好,对的,就是学会他们的管理方法,层层解包,分发,转发,最后运到各个叶节点,这个工程就完事了。

说白了,写程序,就是造一个树。上层和中层是枝干,都是解包和转发,分发。最后分解成了最小节点,由worker 去加工。然后再打包,封装,最后就成为了一个产品了。

赶紧点赞啊,我把编程本质都告诉你了,一般的话,你得体验个20年,才会有这种感觉的。

为什么很多人学不会C语言?C语言作为一门入门级语言,是大多数编程者的学习首选,它不是应该是一门容易上手的编程语言吗?而且大学都会有老师教的,为什么很多人学不好C语言呢?其实笔者认为学不好C语言的主要原因都是出在学习者自己的身上!

据我了解,C语言作为一门入门级语言,大多数人在进入IT行业都要先学习C语言的。比如在大学期间,信息工程系、计算机系、通信工程系甚至机械设计与自动化系都要学习C语言基础这门课。对于第一次接触这门机器语言的大学生们,这无疑像是一本天书!所以很多人说学不会C语言,或者中途放弃,再或者转学其他的。

依稀记得我上大学的时候,每天早上小湖边的那位读着“银它,银它(谐音) i n t”的校友,也许这就是一个刚刚接触C语言的人的真实写照吧。但是如果在学习了C语言的基础上再去学习其他语言比如java语言,那么就会变得相对轻松了。大多数Python、java等语言的学习者也都是从c语言的路上过来的。我相信,如果先学习java,然后再回过头来学习C语言也不会感觉太难吧。

C语言的学习枯燥主要表现在两个方面,第一个因为它是一门编程语言,跟计算机打交道,你对它热情以待,它却回报你各种err,无疑是给初学者最大的打击;另外一个方面就是C语言学习并不像学习其他语言那么有乐趣。我的一个学弟,刚开始跟我说以后也想走嵌入式Linux的道路,就在我的指导下学习,天天对着一个Ubuntu的黑框终端敲代码,后来他发现同宿舍有个学习Android的,时不时的搞出来个APP,什么音乐播放器,什么登录系统的,他感觉很有意思,慢慢的他就转行了,受不了Linux

刚开始学习编程的那个阶段是最难熬的,一旦等学会了之后,说不定一下子就爱上了它,这是我对学编程的总结。很多人在学编程的路上坚持不下去,就慢慢的放弃了,很多计算机相关专业的毕业生,认为编程是无聊的、枯燥的、学不会的然后就抛弃了走编程的这条路。我身边有不少C语言的大神,他们都是持之以恒坐上现在的这个位置的,什么Linux驱动开发、嵌入式软件开发、c语言开发等等都是C语言学习后的工作方向。

有志者事竟成,只要你有一颗坚定的心,在配上那么一点热情,我相信每个人都会学会C语言的。

学习C/C++编程知识,想要成为一个更加优秀的程序员,或者你学习C/C++的时候有难度,可以来,和别人一起交流成长会比自己琢磨更快哦!

学习C/C++编程知识,欢迎关注笔者的C语言学习专栏一起加油~

我要回帖

更多关于 C语言难学吗 的文章

 

随机推荐