在网上看到了笔试题的照片,记录一下自己解题的过程,以便以后毕业找工作的时候复习。
【思考】6个珠子,如果是在一条不可旋转不可翻转的排列上,其种数有A66即是720种方案,但是考虑珠子的拨动,即654321和543216是一样的手环,则需要除以6;同时考虑手环的翻转,即654321和123456是一样的,则需要除以2;所以一共的种数有A66/(6*2)=60种;
【思考】线程在操作数据时,可能会出现资源占用的情况,导致数据的不同步,第一种情况,A线程从内存中拿到i=0,B线程也从内存中拿到i=0,A线程i++之后,i=1写入内存,再一次i++,结果为2,写入内存,B线程的结果也为2写入内存,所以打印出的结果为2;第二种情况,A线程拿到i=0,i++,将i=1写入内存,AB线程从内存中取到i=1,A执行i++,得到i=2,写入内存,B执行i+=2,得到i=3,写入内存,所以输出为3;第三种情况,A先执行了,写入i=2,B取到i=2,执行i+=2得到4。因此选择2,3,4。
【思考】cut命令可以从一个文本文件或者文本流中提取文本列。sed(Stream EDitor)功能和awk一样,都是用来处理文本的,但是sed没有awk的功能强大,awk对列操作十分方便。pushd的功能是创建一个目录栈。
【思考】栈可以理解为一个单向的存放铁饼的圆筒,每次只能从栈的最上层拿出数据。A选项中,1先进栈,2进栈后出栈,3进栈后出栈,4进栈后出栈,1出栈,5进栈后出栈,可以实现。B选项中,5最先出栈,说明1,2,3,4都已经入栈且未出,因此只有一种出栈顺序,即5,4,3,2,1所以B不可能出现。C选项中,1先进栈,2进栈后出栈,3进栈后出栈,1出栈,4进栈后出栈,5进栈后出栈,可以实现。D选项中,1进栈出栈,2进栈,3进栈,4进栈,5进栈后出栈,4出栈,3出栈,2出栈,可以实现。
【思考】做这种题的方式,是先画出树,前序遍历,G即为树的root节点,通过中序遍历可知,ADEF为左子树,HMZ为右子树 。左子树中,通过前序遍历可知,D为左子树root节点,A为左子树的左子树,EF为左子树的右子树,由前序可知,左子树的右子树的root为F。右子树的root节点为M,H为右子树的左子树,Z为右子树的右子树。当树出来之后,进行后序遍历,为AEFDHZMG,选c。
【思考】线程间同步的方式主要由以下三种:互斥量,采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问;信号量(临界区),它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。当需要一个计数器来限制可以使用某共享资源的线程数目时,可以使用“信号量”对象;事件(信号),通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。即事件机制允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。
【思考】SMTP:Simple Mail Transport Protocol,简单邮件传输协议,为了使得邮件准确的到达邮箱服务器,使用的是TCP协议。FTP:File Transport Protocol,文件传输协议,使用的TCP协议保证传输的准确性,FTP标准命令TCP端口号为21,Port方式数据端口为20。 Telnet协议是TCP/IP协议族的其中之一,是Internet远程登录服务的标准协议和主要方式,常用于网页服务器的远程控制,可供使用者在本地主机运行远程主机上的工作。DNS(Domin Name System)是域名解析系统,使用的协议为UDP协议,使用端口号53。
【思考】选择排序,时间复杂度为n^2。快速排序时间复杂度为NlogN,可以参考快速排序详解。堆排序,时间复杂度为NlogN,代码和详解可以参考堆排序详解,这篇文章写的十分易懂。并归排序的时间复杂度为O(nlog2n)。我也将在接下来的博客中总结上述几种排序方式,并且给出算法代码。
【思考】死锁的条件:
互斥条件:简单的说就是进程抢夺的资源必须是临界资源,一段时间内,该资源只能同时被一个进程所占有。
请求和保持条件:当一个进程持有了一个(或者更多)资源,申请另外的资源的时候发现申请的资源被其他进程所持有,当前进程阻塞,但不会是放自己所持有的资源。
不可抢占条件:进程已经获得的资源在未使用完毕的情况下不可被其他进程所抢占
在很多情况下这些条件都是合乎要求的。例如,为确保结果的一致性和数据库的完整性,互斥是非常有必要的。同理,不能随意的进行资源抢占。比如,当涉及数据资源时,必须提供回滚恢复机制(rollback recovery machanism)以支持抢占资源,这样才能把进程和他的资源恢复到以前适当的状态,使得进程最终可以重复他的动作。
前三个条件都是死锁存在的必要条件,但不是充分条件。对死锁的产生还需要第四个条件:
循环等待条件:存在一个封闭的进程链,使得每个进程至少占有此链中下一个进程所需要的一个资源。
【思考】TCP采用滑动窗口机制,没有被窗口确认的分组将会重传。TCP采用的校验方式为使用一个校验和函数来检验数据是否有错误,并没有采取冗余方式。当一定时间内,TCP没有收到确认信息,将会实施超时重传。在传输消息时,TCP使用ACK信号作为确认接收信号,TCP发送阶段需要经过3次握手,在取消连接时需要进行4次握手。