途游第一次笔试题

总结:1)sizeof(str)和strlen(str)区别

           2)Linux查找命令(在指定的文件下查找文件名里包含xxx的文件),显示文件内容的命令。

           3)图解或文字描述TCP的三次握手。(四次挥手也需要明白)

           4)将一个字符串反转。

           5)二叉树前中后序遍历。

           6)有101个硬币,只有一个硬币的质量与其他硬币质量不同,现有一个天平,请问称量多少次可以判断这个假币重还是轻。

  1. sizeof(str)和strlen(str)区别

A.sizeof

     sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
    具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
    数组——编译时分配的数组空间大小;
    指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
    类型——该类型所占的空间大小;
    对象——对象的实际占用空间大小;
    函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

B.strlen

 strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
    它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

  2.Linux查找命令(在指定的文件下查找文件名里包含xxx的文件),显示文件内容的命令。

查找:示例:查找/root下的与test相关的目录(文件)  find /root -name ‘test*’

显示:命令:cat/more/less/tail 文件

示例:使用cat查看/etc/sudo.conf文件,只能显示最后一屏内容

 

示例:使用more查看/etc/sudo.conf文件,可以显示百分比,回车可以向下一行,    空格可以向下一页,q可以退出查看途游第一次笔试题_第1张图片

 

示例:使用less查看/etc/sudo.conf文件,可以使用键盘上的PgUp和PgDn向上 和向下翻页,q结束查看途游第一次笔试题_第2张图片

 

示例:使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束途游第一次笔试题_第3张图片

注意:命令 tail -f 文件 可以对某个文件进行动态监控,例如tomcat的日志文件,会随着程序的运行,日志会变化,可以使用tail -f catalina-2016-11-11.log 监控文件的变化

 3.图解或文字描述TCP的三次握手。(四次挥手也需要明白)

他人的博客总结的很棒:https://blog.csdn.net/qq_38950316/article/details/81087809

4.将一个字符串反转。

用Java来实现:

java的三种实现方法:

1.最简单的方法:

public static String reverse1(String str)
{
return new StringBuffer(str).reverse().toString();
}

SringBuffer类和String一样,也用来代表字符串,相比String, StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。当遇到插入、删除等字符串操作时,可以考虑用StringBuffer。

StringBuffer初始化

使用构造方法对StringBuffer初始化:         

 StringBuffer s = new StringBuffer(); //初始化出的StringBuffer对象是一个空的对象

 StringBuffer s = new StringBuffer(“abc”); //初始化出的StringBuffer对象的内容就是字符串”abc”

StringBuffer与String的转换:

虽然StringBuffer和String都是操作字符串,但两者属于不同的类,不能直接兼容,相互转换的方法为:

String s = “abc”;

StringBuffer sBuff1 = new StringBuffer(“123”);

          StringBuffer sBuff2 = new StringBuffer(s);   //String转换为StringBuffer

          String s1 =sBuff2.toString();                 //StringBuffer转换为String

 

2.最常用的方法:

public static String reverse3(String s)

 { 

   char[] array = s.toCharArray(); 

  String reverse = "";  //新建空字符串

   for (int i = array.length - 1; i >= 0; i--) 

   reverse += array[i]; 

   return reverse; 

  } 

3.常用方法的变形:

 public static String reverse2(String s)

{ 

  int length = s.length(); 

   String reverse = "";  //新建空字符串

   for (int i = 0; i < length; i++) 

    reverse = s.charAt(i) + reverse;//在新字符串前面添加读取字符,实现翻转

   return reverse; 

  } 

 

 

 

5.二叉树前中后序遍历。

C语言实现:https://blog.csdn.net/qq_38181018/article/details/79904291

6.有101个硬币,只有一个硬币的质量与其他硬币质量不同,现有一个天平,请问称量多少次可以判断这个假币重还是轻。

题目:101枚硬币中有一枚假币,有一个无砝码的天平,在最坏情况下最少称 多少 次,可以判断假币比真币重还是轻。 

解答:

先拿出1枚硬币
将100枚对半称重
1)如果平衡,那你RP爆发,拿出来的那枚就是假的,再称一次就可以
2)如果不平衡,那就将轻的50枚对半分
   假如两边平衡,说明轻的都是真的,假币重
   假如不平衡,说明假币就在这里,假币轻
这样就可以2次判断出来
 

你可能感兴趣的:(面试总结)