总结:1)sizeof(str)和strlen(str)区别
2)Linux查找命令(在指定的文件下查找文件名里包含xxx的文件),显示文件内容的命令。
3)图解或文字描述TCP的三次握手。(四次挥手也需要明白)
4)将一个字符串反转。
5)二叉树前中后序遍历。
6)有101个硬币,只有一个硬币的质量与其他硬币质量不同,现有一个天平,请问称量多少次可以判断这个假币重还是轻。
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可以退出查看
示例:使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束
注意:命令 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次判断出来