26:30 专注 别碎片化学习
34:20 接下来讲这一周要学习的内容
前言 主要讲的是职业规划 ;
书的特点 不用看了
C语言 编程练习 -》 掌握数据结构和算法(算法导论)
刷题 PAT,剑指offer,LeetCode
36:00 第一章
第一章 开发环境搭建及调试窗口设置
开发环境的搭建
了解下历史: A语言(ALGOL60 过度设计,只考虑人的需求,性能一般)&B语言(BCPL,比A语言简洁)
Rust 性能很好,但学习曲线太高了 难度太大了 很难取代C/C++
C语言混乱编程大赛 太灵活 很难 语法规则很严格
第一个C语言编译器是用B语言写的
(Visual Studio,) Codeblocks, mac上C Lim?, Xcode(Eclipse, Pycharm,) 等等集成开发环境IDE
内有编辑器(窗口,代码) ,编译器(可执行 exe),调试器(调试)
主流编译器 - - 微软Windows vs使用的masm编译器/ linux使用的gcc编译器
(平台/操作系统 win linux mac)
老员工用什么编译器,就用什么编译器
Unix 打基础
Linux
大型机:不好搬 非常不方便;升级也不方便;虽然能力很强
小型机:今天 软件层, 软件定义硬件 (谷歌 笔记本都可以作为服务器)
Ken Thompson & Dennis M.Ritchie, 不是谭浩强
Ken Thompson 发明了Go语言,(Go, python 像C)
问为什么学Linux系统编程?Java就不需要学系统编程
C/C++ 不是跨平台的,可移植性强的语言 - Windows & Linux 接口是有差异的,代码要大改
Java, Python 才是跨平台的,就是写的代码几乎不需要任何改变
会不会创建两个进程 | 市面上的书不会写和操作系统硬件相关的接口 (效率不高)| Windows/Linux原生提供的文件操作接口,如进度调度(创建多进程,多线程),网络编程socket等等
学了Linux系统编程,是不是就可以 去操作 Windows下的硬件资源?原理是一样的
Windows的服务器在市场上是不行的。大厂都用Linux,很少用Windows 因为微软Windows按服务器机器收费,收费很贵
华为服务器 买服务器 一般系统是免费的,还会提供一段时间维护
因此在Linux下写的C接口(系统编程的接口),在Windows下是不可以运行的。代码要大改,因为接口不一样。
C/C++都只提供语言层面的东西,都要用到C接口。
现在C++程序员都是要学Linux系统编程的。西工大,清华,上交有开这些课
华为(人口基数先赚钱,硬件,解决方案,系统买Intel,CPU买 IBM, 然后组装 卖通信产品)
C/C++ 可移植性强 是相对于汇编语言而言的
汇编语言是和CPU强绑定的,同样的汇编,Intel和AMD的CPU有差异。 虽然都是X86架构 还是有差异的 ( 高通 华为改了RM架构指令 , 改了汇编 就不能运行了
现在很少有人写汇编代码,包括底层的,开发效率太低,还有包括跨平台的问题; 嵌入式一般用纯C
开发环境安装 ----程序的编译过程 略过没讲
50:40 断点及调试窗口设置
为啥要把调试窗口设置好,先来看一下 学习C语言后的境界(目的 目标 - - 有目标规划才能专注) - -
理解程序的执行过程,其实就是内存的变化过程(通过内存来存储数据,就像通过衣柜来存储衣服) 数据存储要有规律,方便高效取出;衣服存放要有次序,否则可能会花很长时间找想要的衣服
达到什么样的目标?程序员的级别更高级,更像裁缝。 衣柜里放的原始布料(原始数据),裁缝使用剪刀、尺子等加工布料;程序员采用运算符并选择循环处理数据 , 程序员需要把处理哈的数据存放好,以便在用户需要时显示给用户!
另外,调试能力, 灵活掌握 单步调试、判断打印等手段,要能在清晰理解程序执行过程的基础上准确分析数据的变化过程,定位程序的问题点,进而解决问题
国内选拔制
国外培养制 :技能树 – 发展优势 – 关注个人成长
学会谈判
看一下目的,学习C语言要达到的效果:1没有学过语言,调试能力要提升上来(学任何语言,虽然开发环境不太一样,但调试都是一样的) 怎么调试?单步调试等等;2 要理解程序执行原理 每个硬件是怎么把程序呈现出最终效果(内存的变化过程 | 数组的长度压根没存,数组名也没存 每一个变量名都没有。。。)
理解了原理,可以做代码级的性能调优 或者做框架(改MySQL,hadoop 。。 产品对性能要求比较高,就要改产品,包括通信/互联网产品,如谷歌gRPC 百度的bRPC。。看源码 在代码上进行优化,要非常清晰的理解程序执行原理。
代码调试:
先说断点,再说程序编译过程
断点:
行号调出来 - 工具 选项 文本编辑器 C/C++ 行号
神器调出来
可以看程序的每一步
程序为什么难?变化不定
- 程序执行原理其实就是内存的变化过程
59:50
定义变量int i = 10 ,打个断点 , 先打断点才能调试
CPU速度都很快,每秒钟的频率都是多少个G的(10^12),你是跟不上的
先打断点 然后运行 ,程序在这里停下来了 , 三个窗口:内存窗口,监视窗口,调用堆栈窗口(学到函数才会用到这个窗口)
监视窗口
输入 取地址&I , 有个值,这个地址有4个字节(16进制) 把它拖过来(到内存窗口), i就在这里,这就是内存
我们写的程序是32位的,因为任何学校,在讲程序的时候 为了你理解程序,虽然今天所有计算机程序编写都是64位的,因为虚拟地址空间可以超越4G了,32位的虚拟地址空间就是2的32次方~ 4G
虚拟地址和物理地址会转
1:F10逐过程(Fn+F10)变成红色
地址 7C=12; 13 14 15 16; 16就是80 拉一下宽度5个字节
System(“Pause”) 请按继续键打印 (C语言嵌套其他语言, 微软的脚本语言 bet ) 可以嵌套python等等语言
一定要有简历,写你掌握的 如问:红黑树 咋旋转的?
看你是否愿意做充分的准备,学习能力是否还行
窗口一定是在调试过程中才出现的(程序已经跑起来了)
调试 – 窗口 – 内存窗口(C语言都是写单进程的,一个内存窗口就可以了)
监视(变量的值)& 调用堆栈(函数)
(自动窗口 但不能看i的地址 & ; 监视比自动窗口更好用,监视可以看想看的)
调用堆栈暂时用不着
报错了要看日志
C/C++ 可移植性强的语言 - Windows & Linux 汇编
Java 跨平台
以上编译型的
Python 不编译的
编译型的就会存在编译错误
编译错误 &执行错误
去掉;~~编译警告 否
执行错误:可以输出,但是输出不符合你的预期
编译错误是简单的 有限的, 可以分种类



