1.WinXP
常用的网络命令:netstat(端口state)、ipconfig(ip,dhcp,dns)如ipconfig /flushdns或 ipconfig /displaydns、nslookup(dns)、ping(icmp)、tracert(icmp)、route(路由表), arp查看ip和mac地址,telnet或ssh进行远程登录,net start 显示系统正在运行的服务,如dhcp client、dns client、Plug and Play, 如文件服务的ftp等,最后还有强大的netsh
系统配置实用程序:msconfig(优化启动项) 注册表程序:regedit(管理程序的配置信息) 服务设置:services.msc(管理后台服务程序)
这些简单而有用的命令可以解决关于系统启动慢和解决一些基本的网络问题。
2.Linux
进程间的通信:管道,FIFO,消息队列,信号量(同步如sem_wait, sem_post, PV操作),共享内存(mmap),Unix套接字
线程间的同步:互斥锁(如pthread_mutex)和条件变量(如pthread_cond_wait, pthread_cond_broadcast)
3. C/C++
*p++,++的优先级高于*
union联合体进行sizeof,得到的是占用最大内存的那个,且需考虑对齐的问题
局部变量(函数内定义, 栈中分配),全局变量(extern,包含的文件都可以使用),静态变量(static 限定在本文件使用或本函数使用)
在编程方式上对递归(自动栈,如对二叉树的遍历,快速排序)和迭代(需添加栈或者不需要,如斐波拉契数列,二分查找)的深入理解
C语言释放了指向的内存空间的指针,叫野指针,最好赋值为NULL,防止再次使用,导致程序崩溃
对C++虚函数的实现的理解,vptr指向虚函数表,实现动态绑定
C++中的const的使用,在函数后修饰的意味着传入的对象不能修改
4.computer network
TCP/IP的层次:帧头,以太头,ip头,UDP/TCP头,应用协议,层层封装,层层解析
UDP与TCP的深入了解:TCP的状态机(三次握手,四次分手),TCP的可靠传输(超时重传和选择重传)、TCP流量控制(滑动窗口),TCP的拥塞控制(慢启动和拥塞避免),TCP序列,分片
(DNS)本地域名服务器递归查询和迭代查询DNS的两者方式,使用的UDP协议,速度快。
accept或读取I/O时阻塞,利用异步非阻塞
I/O复用:内核发现进程指定的一个或多个I/O条件就绪,就通知进程,如select和poll,而accept是阻塞与一个I/O
select,poll, epoll的区别:select的缺点:a. select需要将fd从用户态拷贝到内核态,当fd很多影响效率;b.每次调用select是内核都遍历检查传递进来的所有fd,这个开销也较大;c.select支持的文件描述符太小,默认是1024
epoll的事件驱动模型有待深入了解
5. operating system
共享动态库的进程A和B,当A修改了动态库的全局变量时,并不影响B,因为当修改时,B会有其数据副本。而进程A和进程B共享内存时mmap,A修改全局变量当然会影响到B
elf文件的格式:.text 已编译程序的机器代码 .rodata:只读数据,比如printf语句的格式串和开关语句的跳转表
.data已初始化的全局C变量 .bss:未初始化的全局C变量
nginx:多进程(主进程+工作进程(核)),epoll事件驱动,进程间通信:共享内存或Unix域套接字