首页 > 编程语言 >《程序员面试宝典》中的一些面试题

《程序员面试宝典》中的一些面试题

时间:2023-08-29 11:39:53浏览次数:46  
标签:--- 面试题 互斥 ping 宝典 char 程序员 ICMP



文章目录

  • 面试题1--->编程风格问题
  • 面试题2--->不用if等判断语句找出两个数中间较大的那个
  • 面试题3--->写一个交换两个数据的宏
  • 面试题4--->写一个宏返回两个数据中较小的那个
  • 面试题5--->char *和char []的区别
  • 面试题6--->临界区,互斥量,信号量的区别
  • 面试题7--->网络中常见的ping命令属于什么协议?


面试题1—>编程风格问题

// 方式1
if ('A' == a){
	a++
}
// 方式2
if (a == 'A'){
	a++
}

第一种方式比较好一些,因为有时候会把“==”误写成“=”,编译器不允许对常量赋值,所以会在编译的时候就报告错误

// 方式1
for (int i = 1; i < vec.size(); ++i)
// 方式2
int sz = vec.size();
for (int i = 1; i < sz; ++i)

第二种方式比较好一些,不需要重复计算vec.size()

面试题2—>不用if等判断语句找出两个数中间较大的那个

int max = ( (a + b) + abs(a-b) ) / 2;

面试题3—>写一个交换两个数据的宏

#define swap(a,b) \
{
char tmpbuf[10]; 
memcpy(tmpbuf, &a, sizeof(a));
memcpy(&a, &b, sizeof(b));
memcpy(&b, tmpbuf, sizeof(tmpbuf));
}

面试题4—>写一个宏返回两个数据中较小的那个

#define MIN(a,b) ( (a) <= (b) ? (a) : (b) )

面试题5—>char *和char []的区别

#include<iostream>
using namespace std;
int main()
{
	char str1[] = "Hello world";
	char str2[] = "Hello world"; // 这里开辟了两处空间,所以不相等
	if (str1 != str2)
		cout << "str1和str2不相等" << endl;
	char *p1 = "Hello world";
	char *p2 = "Hello world"; // 这里指向相同的字符串。该字符串只用了一个地址
	if (p1 == p2)
		cout << "p1和p2相等" << endl;
	return 0;
}

char str[]这里单独的str表示的是一个char类型的数组指针,该指针所指向的数组内容是保存在栈上面的,是可以修改的。而char *str是一个字符串指针,这个指针指向的是字符串第一个字符的地址,而这个指针存在栈上,但是字符串的内容并不在栈里面,而在字符常量区域里面储存

面试题6—>临界区,互斥量,信号量的区别

  • 临界区:同一个进程内的线程实现互斥,但无法实现同步,因为其具有“线程所有权”。
  • 互斥量:可以跨进程实现互斥。
  • 信号量:用来实现同步也可以用来实现互斥,可以跨进程。

面试题7—>网络中常见的ping命令属于什么协议?

ICMP是“Internet Control Message Ptotocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息尽管并不传输用户数据,可是对于用户数据的传递起着关键的数据。

在网络中常常会使用到ICMP协议。比如用于检查网络通不通的ping命令,这个ping的过程实际上就是ICMP协议工作的过程。还有跟踪路由的trancert命令也是基于ICMP协议的。

ping.exe的原理:向指定的IP地址发送一定长度的数据包依照约定,若指定IP地址存在的话,会返回相同大小的数据包。当然,若在特定时间内没有返回,就是“超时”,会被觉得指定的IP地址不存在。因为ping使用的是ICMP协议,有些防火墙软件会屏蔽ICMP协议,所以有时候ping的结果仅仅能作为參考,ping不通并不一定说明对方IP不存在


标签:---,面试题,互斥,ping,宝典,char,程序员,ICMP
From: https://blog.51cto.com/u_6526235/7273780

相关文章

  • 计算机网络面试题积累之一
    文章目录1、当接受方的接受窗口为0时还能接受数据吗?为什么?还能接受什么数据?那怎么处理这些数据呢?1、当接受方的接受窗口为0时还能接受数据吗?为什么?还能接受什么数据?那怎么处理这些数据呢?零窗口探测报文(发送方发送零窗口探测报文);确认报文段;携带紧急数据的报文段;这些数据可能会被......
  • 程序员要学会交流
    拥有东西还不足够,还要考虑如何包装它。即使你拥有最好的想法、优雅的代码和实用的思考,如果你不能与他人进行有效沟通,这些都将不会结出果实。没有有效的沟通,好的想法就会变成孤儿。作为开发人员,我们必须在多个层面上进行沟通。我们在会议中花费数小时,倾听和交谈。我们与最终用户合......
  • Android开发|备战金九银十,LeetCode高频面试题合集
    金九银十来了,你准备好备战了么!而最高效的准备方式,不外乎刷题、刷题、刷题。刷题就不得不提LeetCode了~俗话说的好:LeetCode刷不好,一面都过不了。所以,今天就将一些LeetCode大厂高频面试题整理成合集分享给大家,希望能助大家一臂之力~有需要的小伙伴,可以点击下方课程链接详细了解!!!h......
  • Linux运维工程师面试题(3)
    Linux运维工程师面试题(3)祝各位小伙伴们早日找到自己心仪的工作。持续学习才不会被淘汰。地球不爆炸,我们不放假。机会总是留给有有准备的人的。加油,打工人!1LVS的工作模式有几种,分别是什么三种:NAT模式:修改请求报文的目标IP,多目标IP的DNATDR模式(默认模式):操纵封装新的M......
  • 每个程序员都应该读的最有影响力的书
    StackOverflow网站上有用户问了一个问题,让大家推荐一些每个程序员都应该读的最有影响力的书。这个问题非常热门,下面是得票最高的回答。 CodeComplete (2ndedition)bySteveMcConnellThePragmaticProgrammerStructureandInterpretationofComputerProgramsThe......
  • Java面试题:顺序锁和轮询锁解决死锁问题
    (目录)死锁(DeadLock)示例两个线程线程1:先获取锁A,再获取锁B线程2:先获取锁B,再获取锁Apackagecom.example.demo;publicclassDeadLockExample{publicstaticvoidmain(String[]args){ObjectlockA=newObject();//创建锁AObjectlockB=n......
  • 程序员要学会“投资知识”
    啊,富兰克林,那家伙总是说些深刻的道理。嗯,我们真的可以通过早睡早起变成优秀的程序员吗?早起的鸟儿可能抓住虫子,但早起的虫子会怎么样呢?然而,富兰克林的开场白确实击中了要害-知识和经验确实是你最有价值的职业资产。不幸的是,它们是有限的资产。随着新技术的出现和语言环境的发展......
  • 程序员应该专注技术还是转管理?
    只要有得选,专注技术或是转管理。都可以。但对于大部分程序员来说,都没得选。专注技术,你得有基础,基础太差,技术发展的天花板很低;想转管理,虽然门槛没有专注技术那么高,但是,公司里的管理岗位非常少,凭什么轮得到你?喜欢技术,自己也有能力去研究,那么做一名技术专家非常好。真没有什么比每天做......
  • 程序员的职业发展思考
    转眼之间,已入程序员将近十年,惶惶然过了这么多年,回头看,向前往,仍是一片茫然。努力地埋头苦干,做了一个项目再做下一个项目,做完一个需求,还有下一个需求。一直在被赶着走,抬起头,发现仍是一无所有,一无所获。不禁对自己的职业发展、人生规划产生了疑惑。程序员,或者准确的说,普通的程序......
  • ⛳ TCP 协议面试题
    ⛳TCP协议面试题......