博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我在华清的嵌入式课程笔记(至2020.7.5)
阅读量:4082 次
发布时间:2019-05-25

本文共 14066 字,大约阅读时间需要 46 分钟。

必备Linux命令和C语言基础_文件和目录相关命令一_笔记:

嵌入式用linux是因为它是开源的,可以自己裁剪。保留自己想要的,驱动也是。
查命令的帮助内容是用man+命令

命令帮助里所涉及到的英文单词看多了也就那几个,用一个词典实不实地查一查,时间长了这个问题绝对不是问题,不要一开始就手册英文不看而百度,百度里的内容也是把它翻译过去的。

必备Linux命令和C语言基础_文件和目录相关命令二_笔记:
学命令没有捷径,只能反复敲反复练,用多了就熟了。
必备Linux命令和C语言基础_vi编辑器的使用一_笔记:
vi要熟练到本能地去敲一些键,感觉就像做数学题做到条件反射式的。
必备Linux命令和C语言基础_vi编辑器的使用二_笔记:
vi编辑器是嵌入式linux环境下开发人员美图工作都要使用地工具,因此,建议尽可能多地学习熟练关于vi编辑器使用的命令。
必备Linux命令和C语言基础_基础知识_笔记:
x86的汇编和ARM的汇编是不同的。

不同处理器的汇编也不同,因为不同处理器的寄存器也不同。汇编是直接操作寄存器的。汇编的移植性是比较差的,某一款处理器,它的汇编完全不同,而且汇编是直接操作寄存器的,对硬件的依赖是非常大的。

C的话,不同平台代码不需要重写,只需要改变编译器就行了,x86用gcc的编译器。ARM用其他的编译器(这段是我学到后面这节第九次课最后看到的,可以和这里汇编对比着来看,汇编不同平台就需要重写,就可以更好理解这里面所讲的)

必备Linux命令和C语言基础_数据的表示_笔记:
十六进制数会加个0x前缀
八进制前缀是0
必备Linux命令和C语言基础_程序的编译和调试_笔记:
执行一个文件是用./test

ctl+L是清屏,对命令行清屏

数据类型、常量、变量及运算符_数据类型上_笔记:
在ubuntu系统中按:Ctrl+Alt+T即可打开终端,此方法是五种方法中最简便快捷的方法。

bool类型要加头文件stdbool.h

数据类型、常量、变量及运算符_常量_笔记:
单个字符常量是用单引号,字符串常量是用双引号。
‘9’是字符常量,“9”是字符串常量

字符串以斜杠+0结尾,所以“9”其实包含了两个,是字符串。

gcc -E可以生成预处理之后的文件

gcc -E define.c -0 define.i    在视频第41分40秒处
数据类型、常量、变量及运算符_变量一_笔记:
学会浮点型数据指数形式写法

寄存器变量不存在内存,所以没有内存地址,取不了地址,也用不了指针

数据类型、常量、变量及运算符_运算符一_笔记:
逻辑与,逻辑或,有些式子可能没有机会执行
如if(0&&a++)
第一个是0,所以&&右边的就不执行了,实际这个a++是没有执行的,所以a的值是不变的
数据类型、常量、变量及运算符_运算符二_笔记:
为什么可以char x=0xac
字符型可以这样赋值么?

应该多写多练,自然你的编程能力会提高很快,你只看的话确实容易眼高手低。一定要多敲多练。视频第九分钟左右

数据类型、常量、变量及运算符_数据类型下_笔记:
字符型超出那个范围越界输出的结果是什么,要清楚,编译器不会报错。
输入输出专题_字符输出函数和格式输出函数上_笔记:
第五分钟所讲的没有理解

printf的格式字符多查基础,肯定能记得住

字符串  s   string,好记

浮点型 f 这个也好记
十六进制 x,好记,十六进制开头0x
八进制 o  也好记,本身八进制开头就是o
指数 e  好记
单一字符 c  char,好记

编程这个东西,理解了跟这个东西是不是你的不是一码事,你理解你不敲,这个知识早晚还要还给我的。
输入输出专题_字符输入函数和格式输入函数_笔记:
输入两个数,中间可以隔空格或者回车或TAB

输入字符时,空格是有效字符

多敲多练,忘记了多回来查,使用频率高了一定会记得非常清楚。

感觉像朱伟记英语一样反复反复再反复。
输入输出专题_字符输出函数和格式输出函数下_笔记:
反复敲反复练肯定是记得住。

或者先记住个百分之七八十,后面用到的时候回来查,用到的时候回来查,不愁记不住。

控制语句_控制语句-if上_笔记:
我们对自己的要求不能仅仅满足于我只知道了这个语法。你重点要掌握的是说我要通过一个又一个的编程的训练来提高自己的编程的能力,让自己建立起一个写程序的逻辑的思维,知道怎么想问题,知道我的一个脑海当中的一个思路,怎么通过我的编程一步一步地去实现,所以呢从这次课开始我们要有意识地去把这个学习分成两个阶段,第一个阶段实现从语法地角度去掌握这个知识本身,第二步就是通过大量地编程,逼着自己绞尽脑汁地去想怎么写怎么编,然后注重自己代码量地一个积累,注重自己实际地一个动手编程地能力,那么整个语言地学习我们都可以理解成这样两个阶段,你只有第二个阶段走得很扎实了,功夫下到了,这个时候我才能够保证你的C语言达到了一定的水平,才能够说当我在去学习后续的一些其他知识的时候,C语言可以作为我的一个很好的基础,很好的一些工具,辅助我去学习一些更深入的知识。

vi的命令行模式下用gg=G   可以自动调格式,整理代码,变得整齐,特别是如很多个if else嵌套的时候
控制语句_控制语句-switch上_笔记:
switch中的表达式可以是整型,字符型,表达式或枚举,
字符型,short型,int型,枚举,他们其实都是整型。

switch中记得每个case后i按加break,不然跳不出,会继续执行后面的。
控制语句_循环语句-while下_笔记:
(编程题要注意代码规范,基本的代码规范:1.运算符前后要加空格,2.一条语句要放在一行,花括号同样单独放一行;3.代码要进行缩进对齐,可以在命令行模式下按gg=G来让代码自动对齐。)

 

我确实感受到还是自己亲自写代码调试代码提升得快些,多自己去亲自做些编程题。

求一个数得几次方可以用pow,还得引入头文件math.h   注意似乎用不成这个^符号,我亲自写代码试验过了。使用math.h得话最后gcc  test.c  -lm     可以发现后面要加个-lm
使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。本书用到的大部分库函数(例如printf)位于libc.so库文件中,使用libc.so中的库函数在编译时不需要加-lc选项,当然加了也不算错,因为这个选项是gcc的默认选项。
控制语句_循环语句-for上_笔记:
if 下面如果只有一句得话可以不加{}

循环三要素,for( , , )里面要写得这个三个就是那三要素。

第三分钟开始,有的同学是那种眼高手低型的,特别喜欢看书,特别喜欢看这种理论知识,看完之后,代码写不好,有的同学就特别烦看这个,老师这太绕了我直接写个程序就明白了,我的脑子还没我的手快呢,典型的一个是眼高手低,一个是实干派,当然实干派的缺点就是说很多时候没想明白,上来就敲,越敲越错越错越改,一边改一边敲一边敲一边改,弄得自己也没有个大方向,我们还是希望两种方式结合,大概看一下思路之后,然后理论和代码结合着多思考多理思路。
控制语句_循环辅助语句上_笔记:
break可以跳出循环,只能跳一层。
控制语句_控制语句-if下_笔记:
有时候程序调两天调两个小时可能就因为很小很小的一个失误,那从这个角度讲基本功真的是非常重要。
控制语句_控制语句-switch下_笔记:
两个case如果输出一样,一个case可以不写break,什么都不写,这样两个case输出的是一样的,这样程序更简洁。<img src="http://static.makeru.com.cn/upload/eduplat/note/20200324/1585008313877430156.PNG" alt="" />
控制语句_循环语句-for下_笔记:
有一个疑问,运算符前后为什么要加空格?

如果想不出来,哪怕把我敲的代码照着敲几遍,再自己换着花样去写写,又照抄又模仿又微调,又完全自己去写,是一个逐步逐步的找到感觉的过程,所以鼓励大家遇到什么困难咱不怕,多敲多练,这个编程这一块是一定能练出来的,加油啊。

控制语句_循环辅助语句下_笔记:

视频第2分四十五秒,目前是为了学知识,学知识和锻炼能力有时候我们经常分开,知识是说你会你就知道了,用几遍就熟了,而能力呢是你已经什么知识都具备的情况下一种素质的提高,比如说学到一定程度之后任何人的C语言的语法都没问题,但是你编程能力的多少可以通过大量的编程的训练来强化,所以知识和能力的提升还是有一定区别的。

 

return在main函数中是退出,在普通函数中是返回值,这个还没有弄清楚?大概在23分钟

第26分钟,知识本身不难学,理论知识语法本身还是比较简单比较容易接受的,我们对大家的要求是比较严格的,希望可以把课上的每一个程序反复敲反复练,不管你能不能写出来照着敲照着练,然后去改进去调整,慢慢地就有了自己的一个编程的思路,你的编程能力一定会逐步提升的。

控制语句_循环语句-while上_笔记:
很多同学说老师讲的时候能听懂,看别人写我也觉得很简单,但是到自己去写就没思路了,假如说我现在状况是听课能听懂,但是自己不会写,有的时候没思路有的时候有思路,但是我写不出来,出现这样的问题应该怎么办呢。我们有一个对C语言的学习方法就是必须得多编程多敲多练,如果说你不去敲不去练的话,那这个编程的能力,编程的思维始终建立不起来,那么再往后学习就会出现越学越吃力,眼高手低,甚至有一天还听不懂了这样的状态。解决它很简单,你只要每天不停地敲不停地练,(我感觉跟考研数学很像,看视频看书感觉很好,但是自己不敢做题,刷题,反复刷题去吧),哪怕你没有思路不会敲, 你至少可以把我敲过的代码进行模仿,多敲多练多模仿,在模仿的过程中你自然会形成自己的思路,后边就会越走越顺。
(跟着他们培训班学还是有收获的)
数组和字符串_一维数组_笔记:
printf里面,对地址的访问,对指针的访问用%p  也好记,就当作place
printf("%p",&amp;a[i])

数组名是地址常量,是不能改变的,a=a+1是会报错的。

求数组元素个数可以用n=sizeof(a)/sizeof(int);

23分钟40秒左右,我别把编程机会都剥夺了,我怕大家看得懂听得懂写不出来,所以给大家留一些机会自己主动去写一写,逼着自己写出来。

数组和字符串_二维数组一_笔记:
二维数组可以看作多个一维数组构成。
a[0]当作数组名,这样去理解二维数组感觉是很不错的。
数组和字符串_二维数组三_笔记:
26分钟四十秒开始。好好分析一下,是逻辑思路不清楚我没什么思路,还是我有思路但是写不出来,如果你思路是有了写不出来,那说明你写得少,课上老师是怎么去运用这些基础知识的,是怎么去把代码拼起来的,如果你连思路都不是特别清楚,还是因为你写得少,说明你还没有建立起一个很好的编程的思维,这个时候也是要多看多写多模仿,甚至照着敲,照着敲都管用,多编程,加油啊。
数组和字符串_字符数组和字符串一_笔记:
2分钟开始。大家到现在应该有了一种自己的学习方法,你接触任何知识的时候先看它的基本定义,基本的初始化,基本的用法,然后再结合一些实际的编程,这个知识就是可以搞定的。

 

字符数组其实还是属于之前一维二维数组的范畴,只是它的频率太高了,我们就给它相应的重视程度。

 

0   \0    NULL   是一码事,0就是整数0.   \0它的ASCII码值是0,NULL是一个宏定义,它本身代表的也是0.  只是到了指针我们经常写NULL,到了字符我们经常写\0,到了数值型的时候我们经常写0

第十四分钟有些细节没弄懂。
数组和字符串_字符数组和字符串二_笔记:
代码量上来了,思路会来的。你的编程的感觉会来的,量变会引起质变的,放心。
数组和字符串_字符数组和字符串三_笔记:
11分钟左右,其实大家应该感觉到我讲得挺细的,我讲这么细的一个目的是我希望你哪怕没有基础,你也能跟得上,我希望你哪怕有基础,你也能够养成一个好的编程习惯,你如果不注意细节的话,你的代码将来的时候隐患比较多,基本功扎实以后再写代码的时候貌似前面在浪费时间,但是你到后面的话会越走越顺,所以基础知识需要耐心。

gets和scanf的区别,如果说我输入的字符串是一个带空格的如how are you  如果你用gets的话你的数据当中是可以带空格的,scanf用%s输入,空格是作为结束符的,它进不去,作为一个分隔符,数组里存不了空格,如果你一定要存空格的话,要么存gets,要么把scanf这当作字符数组,一个字母一个字母地去输,用%c

数组和字符串_字符串函数之strlen函数_笔记:
用字符串函数需要加头文件 string.h
数组和字符串_字符串函数之strcpy函数_笔记:
多去看一看man手册,就那几个常见的英文单词,你装一金山词霸,肯定是可以搞定的,时间长了慢慢地你就会了。
数组和字符串_二维数组二_笔记:
第十分钟,我相信这样一个理论和编程结合的学习方式是你的印象最深刻的一种方法

二维数组的初始化赋值方式可以很灵活
指针专题二_字符指针与字符串上_笔记:
因为字符在整个C语言当中使用的频率非常高,那我们就非常有必要把字符指针,字符串相关的内容给大家重点去讲解,而这里边也会用到大量的字符串函数,我们讲字符串的时候已经给大家做一些铺垫了,我们到学指针的时候一定能够对这些字符串使用得更加灵活控制得更加准确
指针专题二_多级指针上_笔记:
指针变量加1,是向地址大的方向移动一个目标数据,一个目标数据。
所以怪不得二维数组行指针加一就是跳过一行,一级指针加一就是跳过一个。

指针数组名其实就是个二级指针

<img src="http://static.makeru.com.cn/upload/eduplat/note/20200326/1585211444929486288.PNG" alt="" />

指针专题二_字符指针与字符串下_笔记:
整个C语言中包括C++中,只有这三种情况你的数据是放到静态区的,也就是直到程序结束才会释放的
1,全局变量
2,static 静态变量
3,字符串常量
指针专题二_指针数组下_笔记:
指针数组很适合用来处理二维数组。
指针数组名 就相当于二级指针了,这就引出了二级指针。

拿出蚂蚁啃骨头的精神,

不管多难得知识你就拿着去啃,人是活得知识是死的,你还搞不定啊,一定是搞得定的啊。
指针专题二_void指针和const修饰符下_笔记:
const修饰谁谁不能变
函数1_函数的基本用法_笔记:
后续的课还会经常用指针

main函数的return 0是返回给了调用我这个程序的,像./XXX  是通过系统当中一个进程去调用我们这个程序,这个我们会在后面的课程当中去分析这样的一个原理是怎样跑起来的。

函数有返回值就得写return

函数有一个原则就是必须先说明再调用,其中,形式参数说明可以缺省说明的变量名称,但类型不能缺省

引入头文件因为头文件当中有函数说明

这节课真的学到了很多,帮我理清了一些最为基本的东西。这个很重要
华清再指针和函数这块我觉得还是讲得不错的。
函数1_函数的参数传递_笔记:
函数之间的参数传递方式
全局变量
值传递方式(也叫复制传递)
地址传递方式(也叫指针传递)

 

形参是新开辟的存储空间,因此在函数中改变形参的值,不会影响到实参。我感觉老师举得例子让我很好地理解了形参和实参,两者都是真实占用存储空间的!现在明白为什么要这么叫了。

可以通过传递地址的方式,这样改变形参的值就是改变实参的值了。这么想想怪不得题目喜欢形参用指针啊!!!!!!!真的好好打好基础很重要。如果一个函数要改变实参的值,那只能传递指针也就是地址了。是的,必须传指针。你现在应该不会好奇为什么它要用指针做函数的输入参数了。

还有实参和形参的名字可以是一样的,因为是在不同的空间。你可以不用特地为实参再起一个名。

 

小写字母的ASCII码值和大写字母的ASCII码值差32,32也是空格的SCII码值。小写字母的ASCII码值比大写字母的ASCII码值大32。

函数1_函数中传递数组参数_笔记:
判断字符串有没有结束就看遇到\0没有
函数2_指针函数一_笔记:
在招人过程中喜欢问指针函数的问题

14分钟开始,我告诉大家,以后如果笔试题当中,你找工作的过程当中,有人问你,读一段代码,告诉我这段程序的问题,告诉我这段程序的执行结果,那你要做的事情就是,先看看这段程序,看看里面有没有指针,如果带*号了你几乎可以闭着眼睛回答,这个程序内存有问题,执行结果是不确定,我觉得这样一个很模糊的回答可以百分之九十九的正确率,因为大多数的这种程序都在考察你的内存管理的问题,都在考察一个事,就是说当你内存非法读非法写的时候,程序会有什么样的一个后果,那么这种去啃确实是有不确定因素,全看你这段内存它目前是空闲的还是已经被占用的,还是被占用的数据是不是很重要,决定了你的这种修改对程序的一个影响。

 

全局变量,静态变量,字符串常量,三种情况下你的变量的数据是放到了一个静态区,程序结束是不释放内存的。基于这样的一个考虑我们的代码就有三种改法。

 

<img src="http://static.makeru.com.cn/upload/eduplat/note/20200327/1585308251440337001.PNG" alt="" />
函数2_递归函数和函数指针上_笔记:
递归关键就是两点,递归公式和结束条件。
函数2_指针函数二_笔记:
工作中代码的可读性很重要,你的同事要看得懂,这样任务才能衔接。
函数2_指针函数三_笔记:
atoi这个函数在网络里面用得蛮多。

14分钟所讲的大学再回味一下?

函数2_递归函数和函数指针下_笔记:
9分钟左右,在我们内核当中,在我们API,不管是库函数还是系统调用,后续我们会接触到很多函数里面带有函数指针,那么它的一个意义就是使得这个函数功能更强,。

最后结尾处,希望大家能够把递归函数,函数指针或者说任何编程方面的一些疑问都通过自己的实际动手来去解决它,反复敲反复练反复理解,如果说没有思路照着敲都行,写多了就有感觉了,你的逻辑思维就会建立起来,就会越来越好。
从C到C++及类与对象_类的申明1_笔记:
一般好像类里面的元素不能直接访问

确实听他们讲比单纯自己看书可能好一些,一些细节自己看书可能没注意到,自己看书又求快。

或者自己先看书自学,再来看视频,感觉这样效果好一些。

这节不错,值得听听。

从C到C++及类与对象_类的申明2_笔记:
到底是用vi还是用vim?

有的高手用C写面向对象,linux内核就是这样的。

从C到C++及类与对象_类的成员函数_笔记:
只要你产生一个新的对象,一定调用构造函数。

看了书再来看视频要感觉好一些。

软件包管理及shell命令_Linux介绍_笔记:
MAC OS也是UNIX发展而来

www.kernel.org    这个网站可以去看最新的内核版本

软件包管理及shell命令_deb软件包管理上_笔记:
安装需要管理员权限所以命令行前面加上sudo
软件包管理及shell命令_deb软件包管理下_笔记:
APT采用集中式的软件仓库机制
apt比dpkg好的地方就是它可以自动给你检测软件包的依赖关系,也不是说dpkg就没有用,你单独安装某个指定软件的时候可能还是用dpkg

dpkg 是Debian package的简写
apt的全称是Advanced Packaging Tool
软件包管理及shell命令_shell基本命令_笔记:
shell的英语是贝壳

sudo reboot now这个命令用得蛮多,尤其是我们在以后学到我们底层开发板的时候,开发板有时候你觉得麻烦,不想去拨动开关,然后直接一个reboot你的开发板就重新启动了,这个是一个比较常用的。

bash shell有命令和文件名自动补齐功能,在输入命令或文件名的前几个字符后,按TAB键或ESC键自动补齐剩余没有输入的字符串。

连续按两下TAB键或ESC键,用于命令补齐,按一次TAB键,用域文件名补齐。
如果存在多个命令或文件 有相同前缀,shell将列出所有相同前缀的命令或文件,之后等待用户输入足够的字符。

history  查看历史命令
软件包管理及shell命令_shell中的特殊字符一_笔记:
通配符
linux shell命令_shell基本系统维护命令_笔记:
man 手册里面的英文单词看多了就熟了。

超级用户可以修改所有其他用户的密码,而普通用户只能修改自己的密码。

clear或者CTRL+L可以实现清屏

linux shell命令_进程管理相关命令_笔记:
今天知道它是干什么的,长什么样子就OK。这些命令在level5的时候会用。
linux shell命令_文件系统的类型和结构_笔记:
根文件系统是指文件系统的逻辑结构,应该是要和文件系统的物理类型区分开来。

linux的文件名是严格区分大小写的。

Linux目录是/分隔   windows目录是\分隔

linux shell命令_文件系统相关命令_笔记:
软链接 硬链接是在做题的时候非常常见的辨析题

归档和压缩是不同的,tar的改进版本可以在实现合并归档的同时进行压缩。

linux shell脚本编程_shell脚本-变量_笔记:
shell脚本是解释型语言,它不需要编译,上来就是执行执行到哪里出错,我退出,前面没有问题就一直执行。
C是编译型语言。

shell文件后缀是.sh

写完第一行之后按回车没用,得按esc然后按o

shell不支持数据类型,全部当成字符串处理

命令置环的内容必须有输出

linux shell脚本编程_shell脚本-功能语句._笔记:
我实际用echo时并不需要加双引号

加号前后要加空格

linux shell脚本编程_shell脚本-循环语句_笔记:
视频最后  我们只有多练几遍才能达到效果
linux C语言高级编程_gcc编译器_笔记:
从这节课之后把你所见过的错误以及你的错误原因以及你的对策自己把它总结一下,这是一个日积月累的过程,自己把这个数据一直维护下去,这样对我们以后工作的时候会有很大的帮助。因为我们代码三分写七分调嘛,大多数还是调错误,那遇到这个错误你见得越多,那这个时候你去定位错误原因去修改是有很大的帮助的。

gcc的四个编译步骤可能就是你以后面试的一个问题。

<img src="http://static.makeru.com.cn/upload/eduplat/note/20200401/1585707280361619783.png" alt="" />
linux C语言高级编程_gdb调试工具_笔记:
<img src="http://static.makeru.com.cn/upload/eduplat/note/20200401/1585711703095351948.PNG" alt="" />
linux C语言高级编程_条件编译和结构体_笔记:
结构体里面字符数组的赋值还没搞清楚?

结构体的赋值方式有几种总结一下?

linux C语言高级编程_结构体数组和结构体指针_笔记:
后边在level3的时候你会天天都在用结构体。

结构体的定义是放在mai函数外面么?

结构体指针再理理?

段错误是什么?

linux C语言高级编程_内存管理上_笔记:
malloc和free必须成对使用

我还是没弄清楚什么时候需要使用malloc?不用不行么

Makefile_Makefile变量的使用_笔记:
变量名一般大写

这么多变量不需要你去记忆,你只需要把这几页PPT保存好了,如果说后期你遇到了makefile你自己去理解的时候,我们到这里按ctrl F进行查找你能查找到,就能保证这种状态就OK,因为我们很多像内核我们makefile是已经写好的,你直接敲make就可以了,你的uboot makefile也是写好了,你直接敲make就ok了,我们已经给你了,你自己去理解这时候比你自己去写它要简单得狠多,所以对于这来说把PPT保存好了到时候你能看懂就OK。
STM32 USART串口的应用_串行通信的基本概念_笔记:
串口的通信协议我希望大家学完本章节之后能够背述通信协议,这是一个最基本的一个要求,因为通信协议是非常重要的,不管你是去其他公司面试,还是说进行一些什么样的考试,我们通信协议基本是都是一个必考的内容。

串口通信的协议非常地重要,我希望大家了解完了之后能够下来把它背着表述出来。

标准IO(上)_文件介绍和标准IO介绍1_笔记:
linux里面我们任何的输入输出设备都是通过文件来标识的,所以我们可以统一用一个文件的接口操作不同设备。为软件工程师写代码提供更好的便利。
标准IO(上)_导学_笔记:
linux应用层开发工程师

读写文件,网络通信,驱动的硬件接口都属于IO操作。linux一切皆文件,Linux里文件操作通常(统称?没听清)是IO操作

很多招聘网站都对这个线程要求很高,可以这么说,如果linux下你不会多线程编程的话你根本就不能完胜linux应用层的开发工作,因为我们写的代码基本都是多线程的,如果一个进程里面只有一个线程的话这样跑起来的效率是非常低的,所以说我们要学习多线程编程技术,这是我们linux应用层开发的一个重点。

这门课很大一个特点就是API非常多
API非常多,我们学的很多都是linux提供给我们的接口

你看完视频以后可能对这些API呢还不是特别了解,理解不是很深,这个时候再看下man手册,另外看下书,我们有些书可以看下,Linux系统高级编程,也可以去csdn看很多网友的博客

linux下文件I/O、库的制作及使用_文件IO的打开和关闭_笔记:
为每一个打开的文件分配文件描述符,注意是打开的文件。
linux下文件I/O、库的制作及使用_动态库的制作和使用1_笔记:
-fPIC 位置无关代码
进程编程及守护进程—进程、进程命令、fork、exit、excel、system_进程基本概念_笔记:
CPU不能直接访问磁盘,所以要把程序加载到内存
CPU可以直接访问内存
现在有些电子设备用的flash,flash里面也有程序,它可以直接运行,以为CPU可以直接访问flash
什么样地程序能够直接运行什么样的程序不能够直接运行,就看它放的位置,能运行的程序一个特点就是CPU能够直接访问的,CPU是不能直接访问磁盘的,得通过IO总线间接地访问磁盘,把程序加载到内存。

PID就是processID就是进程的ID
线程专题(上)_线程的概念和使用1_笔记:
这里讲的就比较好理解进程和线程的关系了,举了一些比较好的例子。我之前对线程的理解确实还不到位。
线程专题(上)_线程的概念和使用2_笔记:
在多线程程序里面,任何一个线程执行exit的话,会导致我们整个的进程的结束,也就是其他线程也结束了。
数据结构引入_初识数据结构_笔记:
数据结构+算法=程序
数据结构引入_什么是数据结构_笔记:
python也是拿C写的

你用C语言去实现这些常规数据结构,如果有一天工作需要,用到了一些面向对象的数据结构的时候你用那些数据结构的库你一看就会用,你可以用得特别好,因为你都知道它是怎么实现的,你当然能用好它。

数据结构引入_数据结构导学_笔记:
学数据结构,只和你的代码量有关。你愿意写愿意敲愿意跟着我的节奏走你就能学好它。

你敲得多,你的编程思维就建立得比别人快,你提升得就快。

数据结构引入_数据结构基本概念_笔记:
将来不管你接触任何一种数据结构,你都要用这样的方法想这三个事,不难,就三个事,想明白了,那这个结构在写的时候就会很清楚,学习效果就会好。
线性表之顺序表(上)_顺序表的实现1_笔记:
touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
名词在前动词在后,单词之间下划线分隔

真的讲明白了自然就会了会写了,

结构体的定义为什么是放在头文件里面?之前还看到放在main函数外面?其实编译时头文件的内容也是放进去一起编译的,俺么岂不是头文件和C的内容可以灵活移动?

vsp    vi里面的分屏命令
线性表之顺序表(下)_顺序表的实现2_笔记:
malloc有两个特点,一需要加头文件stdlib.h,二是返回值是一个指针,如果失败返回的是NULL
线性表之顺序表(下)_顺序表的实现3_笔记:
vi里面复制粘贴就ctrl+L  然后yy

想想顺序表为什么要用malloc,不用malloc不行么,像数组就没用malloc?

注意他里面每个函数都有return

感觉看来华清的视频再去写数据结构的一些程序就不难了,真的一点一点地都讲明白了,思路清晰。这种感觉很不错。感觉真的这个视频看懂你就会写了,像方浩那样看懂视频就会做题了,这种感觉比较好,而不是看了视频去做题却不会。

写多练练多了,哪怕照着写写多了你的思维也会得到强化,也会越写越好的。

线性表之顺序表(下)_顺序表的实现4_笔记:
C++ JAVA可以允许函数名字相同,这叫函数的重载。

希望大家下来多写一写多练一练多敲一敲你的这种编程的逻辑会越来越好的,加油。

线性表之顺序表(下)_顺序表的结尾_笔记:
任何人,他的编程思维都是训练出来的,你的代码量决定了你的能力,这个所谓的代码量不一定是原创,你去模仿你去学习你去改进都算,所以呢,整个顺序表我再啰嗦一下希望你能够反复敲反复练,提升自己编程的基本功,让你的逻辑思维能力越来越好,以后的学习,其他的数据结构会越来越顺的。
线性表之链表_什么是链表及原理_笔记:
在实际的开发当中,链式存储链表这种结构用得非常非常多,频率非常高,所以从我们自己的角度来说,以后工作用得比较频繁,当然它是一个重点。另外一个从找工作的角度来讲,对于单链表来说也是我们在这个笔试题,面试过程当中常问的一个点。

做单链表的编程当中,我们一般会设置一个头结点,这样你整个程序的结构非常清楚。

段错误是C语言当中非常典型的一种错误。一般的段错误是由于指针的非法访问内存的越界等等这样的问题。

线性表之链表_单链表的实现-创建_笔记:
malloc需要头文件stdlib.h    不过我写顺序表时没加这个头文件好像也没报错。
线性表之链表_单链表实现-按位置插入_笔记:
多画图
线性表之链表应用_单链表实现-链表释放_笔记:
free之前和free之后指向的地址是一样的,所以free后还要 h=NULL

通过整个链表的编程会发现写程序其实就是在写逻辑,逻辑想明白了逻辑严谨了程序写出来自然也会水到渠成。

一定要把我们讲的程序多写一写多敲一敲多练一练,哪怕你照着敲照着模仿把这个思路输出一遍对你的这个提高也是会非常大的,当然也鼓励你多找一些复杂的链表操作能自己来去扩展一下多练一练。
单链表的操作实现_链表的反转_笔记:
这次课讲一些复杂的操作,而且这些内容在找工作过程当中也会经常被问到,你实际在写代码的时候也经常会遇到,

写程序前各种特殊情况要先考虑到位

栈实现及其应用_栈-顺序栈的实现1_笔记:
逻辑结构是栈,实现主要有两种,一种书顺序结构,一种是链式结构。

malloc需要头文件stdilb.h
栈实现及其应用_栈-链式栈原理及实现_笔记:
链式栈其实就是对单链表加一个限制,只能在一端进行操作。

整个C语言最关键的就是内存的管理要非常严谨
栈实现及其应用_栈-顺序栈的实现2_笔记:
内存泄漏

队列实现及其应用(上)_顺序队列的实现_笔记:

memset的最后一个输入参数为什么是sizeof的,而不是其他什么几个Int类型?那它插入或者插入其他数字时时怎么插入的?
树及实现(上)_二叉树的原理_笔记:
在以后的开发当中像单链表,栈和队列会用得非常频繁。

二叉树就算你只有一个子节点也要分左右

二叉树的创建,遍历是最基本的操作。

查找_hash表原理_笔记:
哈希表在实际的开发当中和找工作当中都是一个重点,所以希望大家能花很多的精力能去把哈希表学明白。

在我们实际的开发当中,包括应用当中,你会发现链式哈希用得是比较多的。哈希函数就是取余,处理冲突就是把冲突的元素放到同一个链表里去处理。

链表是我们学习所有数据结构的基础。

哈希表是所有的查找算法中效率最高的

查找_hash表的实现-创建_笔记:
哈希表是所有查找方法当中效率最高的一种那么哈希表自然是我们学习的重点,其中关于哈希表来讲,两个关键因素,一个因素是哈希函数的选择,另外一个关键因素就是处理冲突的一个办法,那么我们实际在开发当中在找工作当中问得比较多的都是这个链式哈希。
排序_排序的原理_笔记:
排序是我们实际开发当中用得非常频繁的一个操作。

我们在所有排序中用得最多的是快速排序,所有查找里面哈希表效率最高,所有排序当中快速排序效率最高。

17分30秒,链表插入排序是比较重要的,链表插入排序是我们处理链表经常要做的,也是找工作爱问的,(看来华清的那些课后习题出的是有原因的,可能是找工作时爱考的)

树及实现(下)_二叉树的三种遍历_笔记:
我感觉很棒,真的把遍历时程序的递归一步步讲清楚了,我喜欢这点,华清之前讲指针时也是这样,真正深入到内存一点点真正讲清楚。链式队列也是这种感觉。
标准IO(下)_对象的输入和输出1-4_笔记:
EOF其实就是C语言里定义的-1
所以见到返回EOF不要不知道什么意思。
标准IO(下)_流的刷新和定位_笔记:
返回EOF就是返回-1

这个视频没有仔细听。

标准IO(下)_格式化输入和输出_笔记:
把几个字符串拼接成一个字符串用sprintf是很方便的。
进程编程及守护进程—wait函数、waitpid函数、Linux守护进程_守护进程1_笔记:
ps可以查看交互进程
ps -ef可以看全部的进程

终端其实也是一个进程。
shell实际上是先fork,再exec
前台执行的进程都是终端的子进程

 

转载地址:http://jvoni.baihongyu.com/

你可能感兴趣的文章
FMDB的使用
查看>>
UIImage存为本地文件与UIImage转换为NSData
查看>>
[转]打印质数的各种算法
查看>>
[转]javascript with延伸的作用域是只读的吗?
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
TableDnd(JQuery表格拖拽控件)应用进阶
查看>>
[转]开源中最好的Web开发的资源
查看>>
java接口不能实例化原因浅谈
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
Java8 Lambda表达式介绍
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
1.随机函数,计算机运行的基石
查看>>
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>
在mc中直接加aswing组件,该组件还需最后用validate()方法
查看>>