前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试官啊,这题目我不会.......

面试官啊,这题目我不会.......

作者头像
用户6280468
发布2022-03-21 16:41:49
1640
发布2022-03-21 16:41:49
举报
文章被收录于专栏:txp玩Linuxtxp玩Linux

一、线程中有哪些同步机制?

(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] = '\0';
  //翻转
  char tmp;
  for (j = k; j < (i+k)/2; j++) {
   tmp = str[j];
   str[j] = str[i+k-j-1];
   str[i+k-j-1] = tmp;
  }
  return str;
 }

(3)字符串复制(实现逻辑,逐个赋值直到遇到'\0'停止即可)

代码语言:javascript
复制
char *sky_strcpy(char *dst, const char *str)
 {
  if (NULL == dst ||  NULL == str) {
   return NULL;
  }
  char *ret = dst;
  while (*str != '\0') {
   *dst ++ = *str ++;
  }
  return ret; 
 } 

(4)字符串比较

a、正常比较是否相同(实现逻辑,判断字符串长度是否相同,若相同逐个比较字符是否相同)

代码语言:javascript
复制
int sky_strcmp(char *dst, char *str)
  {
   int i, len;
   if (NULL == dst || NULL == str) {
    return 0;
   }
   if (strlen(dst) != strlen(str)) {
    return 0;
   }
   len = strlen(dst);
   for (i = 0; i < len; i++) {
    if (*dst++ != *str++) {
     return 0;
    }
   }
   return 1;
  }

b、忽略大小写字符串比较(实现逻辑,在比较字符时可以将其统一转换为大写或小写,然后再进行比对即可,和正常对比无其他不同)

代码语言:javascript
复制
#define CONVERT(c) (((c) >= 'A' && (c) <= 'Z') ? ((c) - 'A' + 'a') : (c))
  int sky_strcmp(char *dst, char *str)
  {
   int i, len;
   if (NULL == dst || NULL == str) {
    return 0;
   }
   if (strlen(dst) != strlen(str)) {
    return 0;
   }
   len = strlen(dst);
   for (i = 0; i < len; i++) {
    if (CONVERT(*dst) != CONVERT(*str)) {
     return 0;
    }
    dst ++;
    str ++;
   }
   return 1;
  }

以上的面试题目简单的给大家汇总总结了一下;具体实现原理的可以去找找文章了解一下,加深自己的理解。手写字符串函数实现,这可能在很多面试笔试题目里面是老生常见的题目了,所以不会的小伙伴要多加练习哦!

我是txp,一个只专注于干货分享的博主,欢迎随时来撩我,我们下期见!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 txp玩Linux 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档