1、iBatis相比JDBC优势的优势有哪些?
答: 简单易上手、开发速度快、面向对象,数据库可移植。 (此处应该将优缺点一起分析,才是满意得到回答)
延伸学习:MyBatis和iBatis的区别: ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis (1)Mybatis实现了接口绑定,使用更加方便: 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件,而Mybatis实现了DAO接口与xml映射文件的绑定, (2)对象关系映射的改进,效率更高
iBatis: 优点 : 代码量减少、简单易上手、SQL语句和代码分离(便于修改)、数据库可移植 缺点:SQL语句需要自己写、参数只能有一个
Hibernate: 优点:对象关系数据库映射、完全面向对象、提供缓存机制、HQL编程 缺点:不能灵活使用原生SQL、 无法对SQL优化、全表映射效率低下、N+1的问题
JDBC、iBatis、Hibernate明显对比: JDBC更为灵活,更加有效率,系统运行速度快。但是代码繁琐复杂,有的时候用了存储过程就不方便数据库移植了。 hibernate,iBatis 关系数据库框架,开发速度快,更加面向对象,可以移植更换数据库,但影响系统性能。 JDBC:手动 手动写sql,不能直接传入一个对象、不能直接返回一个对象。 iBatis的特点:半自动化 手动写sql,能直接传入一个对象、能直接返回一个对象。 Hibernate:全自动 不写sql,自动封装,能直接传入一个对象、能直接返回一个对象。
2、PrepareStatement相比statement,有哪些优点?
答: (1)直接使用Statement,驱动程序一般不会对sql语句作处理而直接交给数据库; 使用PreparedStament,形成预编译的过程,并且会对语句作字符集的转换(至少在sql server)中如此。 如此,有两个好处:对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;另外,可以比较好地解决系统的本地化问题。 (2)PreparedStatement还能有效的防止危险字符的注入,也就是sql注入的问题。(但是必须使用“对?赋值的方法”才管用)
3、TCP/IP对应于OSI七层模型的哪些层?
答: OSI七层模型分别是:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。
TCP/IP协议不是TCP和IP协议的合称,而是指因特网整个TCP/IP协议族。从协议分层模型方面来看,TCP/IP由四个层次组成:网络接口层、网络层、传输层和应用层。
延伸学习:应用层:由用户自己规定,只要形成的消息能与表示层接口。这包括各机互访协议,分布式数据库协议等。 表示层:是在满足用户需求的基础上,尽可能的节省传输费用而设置的。如文本压缩、常用词转换、加密、变更文件格式等。这就是说,只要能表示用户所需的信息,形式上可以改变,并尽可能形成标准格式,以利于传送。 对话层:是为用户之间对话的进行而设置的 ,这包括建立和拆除对话,确定对话对象。如不是授权的对话者,就不予送出信息,以达到可靠的要求,这一层也可与传输层合并。 传输层:就是使主机之间或信源和信宿之间能互通信息。这一层因此也可以被称为源–宿层或端–端层,这一般是主机操作系统的一部分。它负责把上一层(对话层)来的信息传输给网络层,后者已能保证把各信息包送达目的地,本层把信息处理得适于网内传送,包括把信息分给各种网络去传递,也可规定服务方式,如点对点通信或点对多的广播式通信。 网络层:是规定通信网内的路由选择等方式,以使建立用户间的信息报传输设施。这包括地址的标明,把消息分成信息包或把信息包组成消息,一些调整阻塞所需的规定,路由选择等。这些功能可由计算机的输入输出设备来完成,也可专用一些具有处理功能的接口板来完成。 数据链路层:是规定建立链路的过程。这在信息包传送过程中就需有一定的帧结构,其中包括收发数据的相互应答。 物理层:是规定一些机电性能。例如代表“0”和“1”的电压值、匹配阻抗、每个比特的时长以及插脚的多少和功能等。也包括工作方式如双工、单工或半双工,建立通信的启动和终止等,这一层协议满足后,从上一层看去,已提供了一个合适的数字新到,也就是数据已可通过它传输出去。
4、为什么3次握手,4次挥手?
答: 3次握手建立连接: 第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)即握手信号。 第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
4次挥手断开连接: 对于一个已经建立的连接,TCP使用改进的4次挥手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下:
第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。
第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。
https://blog-1258233124.cos.ap-beijing.myqcloud.com/TCP_IP4.png
5、进程和线程区别是什么?
答: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。 一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。
线程与进程的区别归纳: 地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
调度和切换:线程上下文切换比进程上下文切换要快得多。
本文转载自冷血之心博客