这系列帖子用来记录的我凉凉的线上笔试,第一次笔试让我更加深刻的认识到了自己的不足,以及还有许多知识点没有看,算法这一块我看来还没入门,只能说秋招道路任重而道远。希望去北京的这条路自己可以能走得再快一点。
下面来记录一下,在这次笔试的我的一些问题
单选
1.最短路径:用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
2.通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入的排序算法是(插入算法)
3.信号量是对一个共享资源访问控制表示一个事件发生并让两个任务同步,有三个进程共享一程序段,而每次最多允许两个进程进入程序段,则信号量取值范围
信号量
目的:可以使用信号量来限制访问一个共享资源的线程数
含义:信号量指对共同资源进行访问控制的对象。在访问资源之前,线程必须从信号量获取许可,在访问完资源之后,这个线程必须将许可返回给信号量。一旦获得许可,信号量中可用许可的总数减1,一旦许可被释放,信号量中许可数加1.
锁与信号量之间的区分
区别:
作用域
信号量:进程间或者线程间
互斥锁:线程间
信号量:如果信号量的value > 0;那么其他的线程可以执行任务。并且成功执行 后,value--;如果value=0,那么线程sem_wait 使得线程阻塞,直到sem_post被释放后value++,其他的线程才可以根据value执行。
互斥锁:只有一个对象被上了锁(加锁),那么其他任何线程都不可访问被加锁的对象。
信号量:用在多线程多任务的同步的,一个线程完成了某个动作就通过信号量告诉别的线程,别的线程在进行某些动作。
互斥锁:只有一个对象被上了锁(加锁),那么其他任何线程都不可访问被加锁的对象。
信号量:用在多线程多任务的同步的,一个线程完成了某个动作就通过信号量告诉别的线程,别的线程在进行某些动作。
互斥锁:用在多线程多任务互斥的。一个线程占用了某个资源后,那么别的线程就无法访问,直到这个线程unlock,其他线程才可以利用。
4.java NIO
标准的IO基于字节流和字符流进行操作的,而NIO是基于通道和缓冲区进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
java NIO:Non-blocking IO(非阻塞IO)而java IO是阻塞的
java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时。线程还是可以进行其他与事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入铜带也类似。
java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)因此,单个线程可以监听多个数据通道
5.电子邮件系统中,用户代理把邮件发送发送邮件服务器,发送方邮件服务器把邮件发给接收方邮件服务器及用户使用用户代理从接收方邮件服务器上读取邮件
电子邮件系统
一个电子邮件系统应具有三个主要组成部分:用户代理,邮件服务器,邮件发送协议(如SMTP)与邮件读取协议(如pop)
发送和接收电子邮件的几个重要步骤:
(1)发件人调用pc中的用户代理撰写和编辑要发送的邮件
(2)发件人的用户代理把邮件用SMTP协议发给发送方邮件服务器
(3)SMTP服务器把邮件临时存放在邮件缓存队列中,等待发送
(4)发送方邮件服务器的SMTP客户与接收方邮件服务器的SMTP服务器简历TCP连接,然后就把邮件缓存队列中的邮件一次发送出去
(5)运行在接收方邮件服务器中的SMTP服务器进程收到邮件后,把邮件放入收件人的用户邮箱中,等待收件人读取
(6)收件人在打算收信时,就运行PC机中的用户代理,使用POP3(或IMAP)协议读取发送给自己的邮件,请注意,POP3服务器和POP3客户之间通信是由POP3客户发起的
简单邮件传送协议STMP
STMP所规定的就是在两个相互通信的SMTP进程之间应如何交换信息。
由于STMP使用客户服务器方式,因此负责发送邮件的SMTP进程就是SMTP客户。而负责接收邮件的SMTP进程就是SMTP服务器
通信的三个阶段:
(1)连接建立:连接是在发送主机的SMTP客户和接收主机的SMTP服务器之间建立的,SMTP不使用中间的邮件服务器
(2)邮件传送
(3)连接释放:邮件发送完毕后,SMTP应释放TCP连接
邮件读取协议POP和IMAP
POP邮局协议是一个非常简单,但功能有限的邮件读取协议,现在使用的是它的第三个版本POP3
POP也使用客户服务器的工作方式。在接收邮件的用户PC机中必须运行POP客户程序,而在用户所连接的ISP的邮件服务器中则运行POP服务器程序
POP协议支持离线邮件处理,当邮件发送到服务器后,电子邮件客户端会调用邮件客户端程序,下载所有未阅读的电子邮件(这种离线访问模式是一种存储转发服务)当邮件从邮件服务器发送到个人计算机上,同时邮件服务器会删除该邮件(但是目前很多POP3服务器都支持“下载邮件,服务器并不删除邮件”,也就是在POP3中改进了POP协议)
另一个读取邮件的协议是IMAP(InternetMessage Access Protocol),它比POP协议复杂很多。
IMAP 也是按客户服务器方式工作,现在较新的是版本 4,即 IMAP4。
用户在自己的 PC 机上就可以操纵邮件服务器的邮箱,就像在本地操纵一样。IMAP最大的好处就是用户可以在不同的地方使用不同的计算机随时上网阅读和处理自己的邮件
IMAP 也是按客户服务器方式工作,现在较新的是版本 4,即 IMAP4。
用户在自己的 PC 机上就可以操纵邮件服务器的邮箱,就像在本地操纵一样。IMAP最大的好处就是用户可以在不同的地方使用不同的计算机随时上网阅读和处理自己的邮件
注意,不要将邮件读取协议 POP 或 IMAP 与邮件传送协议 SMTP 弄混。发信人的用户代理向源邮件服务器发送邮件,以及源邮件服务器向目的邮件服务器发送邮件,都是使用 SMTP 协议。而 POP 协议或 IMAP 协议则是用户从目的邮件服务器上读取邮件所使用的协议
6.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别0和3。当从队列中删除一个元素,再加入两 个元素后,rear和front的值分别为()
循环队列 约定:front指向队首元素,rear指向队尾元素的下一个位置
入队操作只改变front:front=(front+1)%size;
出队操作只改变rear:rear=(rear+1)%size;
简答
7.java数据库并发中怎么理解两个方法数据库操作在一个事务里面,事务和数据库连接池有什么关系,JTA事务和普通事务的区别
前两个暂时找不到,可能这就是网易吧
事务概述:事务表示一个由一系列数据库操作组成的不可分割的逻辑单位,其中的操作要么全做要么全不做。
事务的特性(ACID)
1.原子性:同一个事务的操作要么全部成功执行,要么全部撤销
2.隔离性:事务的所有操作不会被其它事务干扰 3.一致性:在操作过程中不会破坏数据的完整性
4.时效性:事务的结果必须持久保存于介质上
JTA(Java Transaction API)提供了跨数据库连接(或其他JTA资源)的事务管理能力。JTA事务管理则由JTA容器实现,J2ee框架中事务管理器与应用程序,资源管理器,以及应用服务器之间的事务通讯。
JTA的构成
a、高层应用事务界定接口,供事务客户界定事务边界的
b、X/Open XA协议(资源之间的一种标准化的接口)的标准Java映射,它可以使事务性的资源管理器参与由外部事务管理器控制的事务中
c、高层事务管理器接口,允许应用程序服务器为其管理的应用程序界定事务的边界
JTA的构成
a、高层应用事务界定接口,供事务客户界定事务边界的
b、X/Open XA协议(资源之间的一种标准化的接口)的标准Java映射,它可以使事务性的资源管理器参与由外部事务管理器控制的事务中
c、高层事务管理器接口,允许应用程序服务器为其管理的应用程序界定事务的边界
区别:
JTA提供了跨数据库连接(或其他JTA资源)的事务管理能力。这一点是与JDBC Transaction最大的差异。
JDBC事务由Connnection管理,也就是说,事务管理实际上是在JDBC Connection中实现。事务周期限于Connection的生命周期。同样,对于基于JDBC的ibatis事务管理机制而言,事务管理在SqlMapClient所依托的JDBC Connection中实现,事务周期限于SqlMapClient 的生命周期。
JTA事务管理则由 JTA容器实现,JTA容器对当前加入事务的众多Connection进行调度,实现其事务性要求。JTA的事务周期可横跨多个JDBC Connection生命周期。
JDBC事务由Connnection管理,也就是说,事务管理实际上是在JDBC Connection中实现。事务周期限于Connection的生命周期。同样,对于基于JDBC的ibatis事务管理机制而言,事务管理在SqlMapClient所依托的JDBC Connection中实现,事务周期限于SqlMapClient 的生命周期。
JTA事务管理则由 JTA容器实现,JTA容器对当前加入事务的众多Connection进行调度,实现其事务性要求。JTA的事务周期可横跨多个JDBC Connection生命周期。