您的位置:首页 > 其它

大众点评2016校招总结和面经

2015-09-22 15:01 232 查看
第一轮,电话面试

首先问我擅长什么,我自然说是java,OK,下面是一堆java问题:
1, int多少字节,integer和int的区别
A:4字节,32位; integer是java的封装类,int是基础类型,int存储在方法区而integer存储在堆上,容器中只能用包装类而不能用基本数据类型;二者初始化也不同;二者有自动装箱和拆箱
2,gc是什么
简要A:java中对象活动在堆中——堆中分为新生代,旧生代,持久代——GC就是将堆中无用的对象回收为新的对象腾出空间。
GC方法: 引用计数法——标记清除法(必须stop-the-world,我竟然思考怎么才能不stoptheworld思考了三分钟,但是思考的过程是重要的,遇到印象不太深的概念一定要努力去回忆,而不是放弃。)
3,java bean是什么 (此答得不理想) 
知乎上一位叫杨博的同志的回答:“Java语言欠缺属性、事件、多重继承功能。所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码。Java
Bean正是编写这套胶水代码的惯用模式或约定。这些约定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述约定的类可以用于若干工具或库。”
4,struts1 和 struts2 的区别
Action 类:
• Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Action是接口。
• Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去 实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式:
• Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
• Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

Servlet 依赖:
• Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
• Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。

和Struts1.x最大的革命性的不同是,Struts2处理Action过程中调用的方法(“execute”方法)是不带参数的。应用了控制反抓
5,servlet的生命周期
又是一个可以写一篇博文的问题, 1,初始化阶段  调用init()方法 2,响应客户请求阶段  调用service()方法  3,终止阶段  调用destroy()方法

有几个注意的点是 ServletRequest对象和ServletResponse对象是容器创建的, 调用service()方法会对执行的方法进行匹配。

6,java 是值传递还是引用传递
按值传递,按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。
按引用传递,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。

java是按值传递的,只是传递对象时有引用传递的假象。

7,RMI
方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。

  •远程服务的接口定义
  •远程服务接口的具体实现
  •桩(Stub)和框架(Skeleton)文件
  •一个运行远程服务的服务器
  •一个RMI命名服务,它允许客户端去发现这个远程服务
  •类文件的提供者(一个HTTP或者FTP服务器)
      •一个需要这个远程服务的客户端程序

8,producer consumer的工作原理  消息队列的工作原理 类似卡夫卡?
所有producer和consumer排队?

9,struts的工作流程
一个请求在Struts2框架中的处理大概分为以下几个步骤:
1, 客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。
2, 请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh等)、最后到FilterDispatcher。
3,FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter。FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
4,ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类.
如上文的struts.xml配置
5,ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor。(Interceptor是struts2另一个核心级的概念)
6,一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。如上文中将结构返回“add.jsp”,但大部分时候都是返回另外一个action,那么流程又得走一遍………

10,熟悉的数据结构,栈 队列 树 堆; 栈常用的场景


11,序列化,什么样的类可以序列化(此题没有答出来)
   序列化算法一般会按步骤做如下事情:                    ◆将对象实例相关的类元数据输出。                    ◆递归地输出类的超类描述直到不再有超类。                    ◆类元数据完了以后,开始从最顶层的超类开始输出对象实例的实际数据值。                    ◆从上至下递归输出实例的数据      
 
 
最后还问了看不看技术方面的书籍。

二面总结:
感觉自我介绍可以好好整理一下,不能每次现场想到什么说什么,面试官说二面比较沉闷,没有一面的反馈好。沉闷一词怎么理解,我觉得可能是思维不够敏捷,面试时应当迅速思考,而不是不思考。

1. 大学最喜欢的课程
二逼的我提到了操作系统,于是有了下一题。

2. 简单介绍一下操作系统
答得不够到位。  理想的介绍,管理系统资源、控制程序执行、改善人机界面、提供服务

3. 操作系统调度线程,如果给一个进程创建很多线程,是不是就可以提高这个进程被执行的概率?
这题没有很好的想法,值得深究,乱七八糟说了些进程是资源分配的基本单位之类的。

4. 实现一个先进先出的队列

HR面总结:

HR面其实要说的不是特别多,看你平常思考或者交流的有多少,面试的时候展示出来就是什么样,只有一个有意思的问题值得玩味。

你怎样看待拥抱变化? 你怎样拥抱变化?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: