linux软件开发如何入门?

linux软件开发如何入门?,第1张

要想在linux下面编程,首先得熟习linux的使用才行,学习的大体过程我描迅在下面,希望对你有帮助:

1基础篇

这是学习linux系统的使用

2服务器篇

可以看些简单的服务器构建:tftp,ftp,nfs,dhcp

以后用的到

3shell编程及高级编程

这里可以了解,不一定深入,有个概念就好了

4c语言编程(cprogramplus第五版,C与指针,C专家编程,C陷阱,这几本书是经典之作)5g,make,ctags,dbg的使用以及makefile的编写(这一步与4同步游并尺进行)

6unix高级环境编程(这是书名,也是你要学的)

7QT的编写,或则GTK的编写(这是图形界面的开始)至此软件工程师结束(下面是开发工程师要继续的)

8gunarm的使用,交叉编译环境的搭建

9arm下面的编程与qtopia的搭建

包括qt/emled(记不下来,你自己搜下蔽卜)交叉编译环境的搭建(完成arm上面的图形化)

10对arm开发板的熟悉

11gunarm汇编的编写与内嵌汇编的编写

12u-boot下面驱动的编写(根据芯片手册来编写)

13u-boot的移植,这里也可以用vivi

14kernel的裁减与移植

15文件系统的构建与移植

16系统级别的驱动编写神高//到此开发工程师初步形成

然后就是不停的练就慢慢成为高级了

一、linux和os:

1、命令:netstat tcpdump ipcs ipcrm 这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验

2、cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握

3、awk sed需掌握

4、共享内存的使用实现原理、然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?

5、c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)

6、ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)

7、使用过哪些进程间通讯机制,并详细说明

8、makefile编写,虽然比较基础,但是会被问到

9、gdb调试相关的经验,会被问到

10、如何定位内存泄露?

11、动态链接和静态链接的区别

12、32位系统一个进程最多多少堆内存

13、多线程和多进程的区别(重点 必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)

14、写一个c程序辨别系统是64位 or 32位

15、写一个c程序辨别系统是大端or小端字节序

16、信号:列出常见的信号,信号怎么处理?

17、i++是否原子 *** 作?并解释为什么???????

18、说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问)

19、列举说明linux系统的各类异步机制

20、exit() _exit()的区别?

21、如何实现守护进程?

22、linux的内存管理机制是什么?

23、linux的任务调度机制是什么?

24、标准库函数和系统调用的区别?

25、补充一个问题:系统如何将一个信号通知到进程?

二、c语言:

1、宏定义和展开(必须精通)

2、位 *** 作(必须精通)

3、指针 *** 作和计算(必须精通)

4、内存分配(必须精通)

5、各类库函数必须非常熟练的实现

6、哪些库函数属于高危函数,为什么?(strcpy等等)

三、c++:

1、一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键)

2、虚函数的作用和实现原理(必问必考,实现原理必须很熟)

3、sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)

4、指针和引用的区别(一般都会问到)

5、多重类构造和析构的顺序

6、stl各容器的实现原理(必考)

7、extern c 是干啥的,(必须将编译器的函数名修饰的机制解答的很透彻)

8、volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻)

9、static const等等的用法,(能说出越多越好)

四、数据结构或者算法:

1、《离散数学》范围内的一切问题皆由可能被深入问到(最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)

2、各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等等

3、hash, 任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)

五、网络编程:

1、tcp与udp的区别(必问)

2、udp调用connect有什么作用?

3、tcp连接中时序图,状态图,必须非常非常熟练

4、socket服务端的实现,select和epoll的区别(必问)

5、epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)

6、大规模连接上来,并发模型怎么设计

7、tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)

8、tcp头多少字节?哪些字段?(必问)

9、什么是滑动窗口(必问)

10、connect会阻塞,怎么解决?(必考必问,提示:设置非阻塞,返回之后用select检测状态)

11、如果select返回可读,结果只读到0字节,什么情况?

12、keepalive 是什么东东?如何使用?

13、列举你所知道的tcp选项,并说明其作用。

14、socket什么情况下可读?

六、db:

1、mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标

学习Linux步骤:

1、先了解了解基础吧,找一本薄一点的,浅一点的书,了解一下什么是linux。有个基本了解即可。不胡嫌建议马上看《鸟哥的Linux私房菜》,这本书很不错,如果你了解linux基础之后再看,对你可以说是不受益匪浅此猛都不行。没基础看《鸟哥的Linux私房菜》比较痛苦,内容很多。

2、了解之后,在自己电脑上弄个虚拟机,装上linux系统(redhat或ubuntu都行)。专攻《鸟哥的Linux私房菜》。当你把这本书攻下来时,才知道原来命令行并不可怕,自己打着打着就很长啦。

学linux最主要靠实践,不实践,只看书对你没好处的哦。自己在虚拟机上慢慢玩吧,玩多了就知道咋回事啦。不懂的多找资料弄懂,弄懂之后再实践,这才会有收森做桥获。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12304776.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存