常见同花顺面试题实例总结

题目来自网上面试过人的记录,我的总结,我的总结,请勿转载html

面向对象的特征? 
(答的封装继承多态)前端

面向对象编程的优势?java

1、易维护
采用面向对象思想设计的结构,可读性高,因为继承的存在,即便改变需求,那么维护也只是在局部模块,因此维护起来是很是方便和较低成本的。
2、质量高
在设计时,可重用现有的,在之前的项目的领域中已被测试过的类使系统知足业务需求并具备较高的质量。
3、效率高
在软件开发时,根据设计的须要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于平常生活和天然的思考方式,势必提升软件开发的效率和质量。
4、易扩展
因为继承、封装、多态的特性,天然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,并且成本较低。mysql

 

你熟悉哪些设计模式? 
(答的单例,Builder,abstract工厂,策略,适配器,代理)ios

单例用了面向对象的什么特性? 
(封装。。。)web

你会写几种单例? 
(这个问题答的还算不错,总共回答了4种写法,前段时间恰好作了总结,详情能够看博客 
单例模式学习总结面试

线程有哪几种实现方式? 
(一直没懂他问的是什么意思,过后想一想多是想问 
1. 继承runnable 
2. 继承Thread 
3. 利用线程池 
 

知道线程池吗? 
(不熟悉,如实告诉面试官。只知道是线程管理的方式,好比Android的AsyncTask)sql

HTTP和HTTPS的区别? 
(不熟悉,如实告知..可是也提到了https是加密传输的,安全性更可靠。可是监听端口不一样,https须要ssl证书之类的没说)数据库

GET和POST的区别? 
GET直接在url后面,至关于明文传输;POST在报文实体,至关于暗文。二者限制的长度不同。POST的长度限制远大于POST,具体长度忘记了,面试官也没多问)编程

说一下ArrayList的实现? 
(数组封装,主要讲了下add的时候扩容1.5倍的问题)

通常你们都知道ArrayListLinkedList的大体区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问getsetArrayList以为优于LinkedList,由于LinkedList要移动指针。
3.对于新增和删除操做addremoveLinedList比较占优点,由于ArrayList要移动数据。

ArrayList删除操做的时间复杂度?具体过程? 
(线性时间复杂度,解释了一下,顺带提到了一下链表的删除是常数)

接口和抽象类的区别? 
(主要从is a和like a的角度去答,还有一些语法上的区别,好比抽象类能够有含具体实现的非abstract方法,接口不能有具体实现的方法一类的)

在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),可是能够实现多个接口(吃饭接口、走路接口)

第一点. 接口是抽象类的变体,接口中全部的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口能够多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类能够实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。

当你关注一个事物的本质的时候,用抽象类;当你关注一个操做的时候,用接口。

I/0的常见对象

下图说明相关体系:

 

线程互斥的方法?
四种进程或线程同步互斥的控制方法
一、临界区:经过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
二、互斥量:为协调共同对一个共享资源的单独访问而设计的。
三、信号量:为控制一个具备有限数量用户资源而设计。
四、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

tomcat 运行机制

先不去关技术细节,对一个servlet容器,我以为它首先要作如下事情:
1:实现Servlet api规范。这是最基础的一个实现,servlet api大部分都是接口规范。如request、response、session、cookie。为了咱们应用端能正常使用,容器必须有一套完整实现。

1:实现Servlet api规范。这是最基础的一个实现,servlet api大部分都是接口规范。如request、response、session、cookie。为了咱们应用端能正常使用,容器必须有一套完整实现。

2:启动Socket监听端口,等待http请求。

3:获取http请求,分发请求给不一样的协议处理器,如http和https在处理上是不同的。

4:封装请求,构造HttpServletRequest。把socket获取的用户请求字节流转换成java对象httprequest。构造httpResponse。

5:调用(若未建立,则先加载)servlet,调用init初始化,执行servlet.service()方法。

6:为httpResponse添加header等头部信息。

7:socket回写流,返回知足http协议格式的数据给浏览器。

8:实现JSP语法分析器,JSP标记解释器。JSPservlet实现和渲染引擎。

9:JNDI、JMX等服务实现。容器通常额外提供命名空间服务管理。

10:线程池管理,建立线程池,并为每一个请求分配线程。

Tcp三次握手

TCP/IP协议,TCP协议提供可靠的链接服务,采用三次握手创建一个链接.
第一次握手:创建链接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.
完成三次握手,客户端与服务器开始传送数据

 

并发

 

用过哪些数据库 
(移动端sqlite,写服务端的时候用过MySQL 
用复杂sql语句的实践经验吗? 
(没有) 
那通常写过什么? 
(增插删改...) 
那你写一个,根据字段分组查询的语句 
(用是用了group by,可是太长时间不接触数据库,面试官说语法有问题)

看了下我简历上的实习和项目 
问我手机上也没有能够看的 
(暑假以后换了手机,调试都用的旧手机,去以前也忘记在新手机上装一编,这个Android,iOS或者web前端的同窗能够记得之后把项目给面试官展现。没有机会给面试官展现一下聊一会项目,算是个遗憾,就算能拿到offer,估计也拿不到高的薪资了)

最后照旧是面试官问我有没有什么要问他的 
(问了平时的内部培训,技术交流与分享机制)