一、线程中有哪些同步机制?
(1)互斥锁
(2)条件变量
(3)读写锁
(4)信号量
(5)自旋锁
(6)屏障
二、uboot的启动流程:
第一阶段: 硬件初始化 为加载的bootloader准备RAM空间 复制代码到第二阶段RAM空间 设置栈 跳转第二阶段C入口点
第二阶段: 初始本阶段使用的硬件设备 检测系统内存映射 将内核,根文件系统从FLASH读取到RAM 为内核设置启动参数 调用内核
三、tcp与udp的区别:
(1)、基于连接与无连接;
(2)、对系统资源的要求(TCP较多,UDP少);
(3)、UDP程序结构较简单;
(4)、流模式与数据报模式 ;
(5)、TCP保证数据正确性,UDP可能丢包;
(6)、TCP保证数据顺序,UDP不保证。
四、字符串手动代码实现:
(1)字符串翻转(实现逻辑,就是将字符串从中间一分为二,互相换位置即完成了翻转的效果):
代码语言:javascript复制void rechange_str(char *str)
{
int i, len;
char tmp;
if (NULL == str) {
return ;
}
len = strlen(str);
for (i = 0; i < len/2; i ) {
tmp = str[i];
str[i] = str[len-i-1];
str[len-i-1] = tmp;
}
}
(2)整型转字符串(实现逻辑,每个整数看其转换进制,从个位到十位百位都可以通过%操作加上/操作获得,再用一个字符数组保存0-F,用个位数对应值转为字符, 注意转换出的字符串是反向的,还要考虑传入的若是负数如何处理,再用翻转字符串完成最后整个操作)
代码语言:javascript复制char *sky_itoa(int value, char *str, unsigned int radix)
{
char list[] = "0123456789ABCDEF";
unsigned int tmp_value;
int i, j, k;
if (NULL == str) {
return NULL;
}
if (2 != radix && 8 != radix && 10 != radix && 16 != radix) {
return NULL;
}
i = 0;
k = 0;
if (radix == 10 && value < 0) {
tmp_value = (unsigned int)(0 - value);
str[i ] = '-';
k = 1;
} else {
tmp_value = (unsigned int)value;
}
do {
str[i ] = list[tmp_value%radix];
tmp_value /= radix;
} while(tmp_value);
str[i] = '