本帖最后由 逆风TO 于 2018-1-2 10:34 编辑
公司名称:陕西三思信息技术有限公司 公司地址:西安市高新区锦业路38号粤汉国际A座8F 公司规模:算是中小型外包,人还是挺多的 主要业务:主要做医疗行业的外包项目
公司面试的人还是挺多的, 没有经过笔试,直接进入面试这一个环节。
1、文件读写的基本类 答:File Reader 类和FileWriter类分别继承自Reader类和Writer类。FileReader类用于读取文件,File Writer类用于将数据写入文件,这两各类在使用前,都必须要调用其构造方法创建相应的对象,然后调用相应的read()或 write()方法。
2、线程的基本概念、线程的本状态以及状态之间的关系 •新建 (Born) : 新建的线程处于新建状态•就绪 (Ready) : 在创建线程后,它将处于就绪状态,等待 start() 方法被调用•运行 (Running) : 线程在开始执行时进入运行状态•睡眠 (Sleeping) : 线程的执行可通过使用 sleep() 方法来暂时中止。在睡眠后,线程将进入就绪状态 •等待 (Waiting) : 如果调用了 wait() 方法,线程将处于等待状态。用于在两个或多个线程并发运行时。•挂起 (Suspended) : 在临时停止或中断线程的执行时,线程就处于挂起状态。•恢复 (Resume) : 在挂起的线程被恢复执行时,可以说它已被恢复。 •阻塞 (Blocked) – 在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态。•死亡 (Dead) – 在 run() 方法已完成执行或其 stop() 方法被调用之后,线程就处于死亡状态。
3、socket通信(tcp/udp区别) TCP——传输控制协议,具有极高的可靠性,保证数据包按照顺序准确到达,但其也有着很高的额外负担。UDP——使用者数据元协议,并不能保证数据包会被成功的送达,也不保证数据包到达的顺序,但其传输速度很快。 大多数我们会使用TCP,偶尔才会动用UDP,如声音讯号,即使少量遗失,也无关紧要
4、在java中如何进行socket编程。 答:Sockets有两种主要的操作方式:面向连接的和无连接的。无连接的操作使用数据报协议.这个模式下的socket不需要连接一个目的的socket,它只是简单地投出数据报.无连接的操作是快速的和高效的,但是数据安全性不佳.面向连接的操作使用TCP协议.一个这个模式下的socket必须在发送数据之前与目的地的socket取得一个连接.一旦连接建立了,sockets就可以使用一个流接口:打开-读-写-关闭.所有的发送的信息都会在另一端以同样的顺序被接收.面向连接的操作比无连接的操作效率更低,但是数据的安全性更高. 在服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。在客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
5. 请解释Spring Bean的生命周期? SpringBean的生命周期简单易懂。在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。 Springbean factory 负责管理在spring容器中被创建的bean的生命周期。Bean的生命周期由两组回调(call back)方法组成。 1. 初始化之后调用的回调方法。 2. 销毁之前调用的回调方法。 Spring框架提供了以下四种方式来管理bean的生命周期事件: · InitializingBean和DisposableBean回调接口 · 针对特殊行为的其他Aware接口 · Bean配置文件中的Custom init()方法和destroy()方法 · @PostConstruct和@PreDestroy注解方式 使用customInit()和 customDestroy()方法管理bean生命周期的代码样例如下: <beans> <beanid="demoBean" class="com.howtodoinjava.task.DemoBean" init-method="customInit"destroy-method="customDestroy"></bean> </beans>
6、Spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Springbean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。
7.构造方法注入和设值注入有什么区别? 请注意以下明显的区别: 在设值注入方法支持大部分的依赖注入,如果我们仅需要注入int、string和long型的变量,我们不要用设值的方法注入。对于基本类型,如果我们没有注入的话,可以为基本类型设置默认值。在构造方法注入不支持大部分的依赖注入,因为在调用构造方法中必须传入正确的构造参数,否则的话为报错。 设值注入不会重写构造方法的值。如果我们对同一个变量同时使用了构造方法注入又使用了设置方法注入的话,那么构造方法将不能覆盖由设值方法注入的值。很明显,因为构造方法尽在对象被创建时调用。 在使用设值注入时有可能还不能保证某种依赖是否已经被注入,也就是说这时对象的依赖关系有可能是不完整的。而在另一种情况下,构造器注入则不允许生成依赖关系不完整的对象。 在设值注入时如果对象A和对象B互相依赖,在创建对象A时Spring会抛出sObjectCurrentlyInCreationException异常,因为在B对象被创建之前A对象是不能被创建的,反之亦然。所以Spring用设值注入的方法解决了循环依赖的问题,因对象的设值方法是在对象被创建之前被调用的。
8. jdbc、hibernate、ibatis的区别? jdbc:手动写 sqldelete、insert、update 要将对象的值一个一个取出传到 sql 中,不能直接传入一个对象。select:返回的是一个 resultset,要从ResultSet 中一行一行、一个字段一个字段的取出,然后封装到一个对象中,不直接返回一个对象。 ibatis 的特点:半自动化sql 要手动写delete、insert、update:直接传入一个对象select:直接返回一个对象 hibernate:全自动不写 sql,自动封装delete、insert、update:直接传入一个对象select:直接返回一个对象
9.请说出你所知道的线程同步的方法。 wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
10.描述Cookie 和Session 的作用区别和各自的应用范围 Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。Session:保存在服务端,每一个 session 在服务端有一个 sessionID 作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。
面试总结:
公司的面试官还是很有经验的, 面试不只是面了框架,还有Java基础。现在的外包公司对招人的要求已经不只是要求会简单的使用框架了,慢慢的对代码的质量也会有要求。所以也会问一些java的基础。
|