阿里巴巴2016内推

上传人:kms****20 文档编号:41451492 上传时间:2018-05-29 格式:DOCX 页数:6 大小:119.69KB
返回 下载 相关 举报
阿里巴巴2016内推_第1页
第1页 / 共6页
阿里巴巴2016内推_第2页
第2页 / 共6页
阿里巴巴2016内推_第3页
第3页 / 共6页
阿里巴巴2016内推_第4页
第4页 / 共6页
阿里巴巴2016内推_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《阿里巴巴2016内推》由会员分享,可在线阅读,更多相关《阿里巴巴2016内推(6页珍藏版)》请在金锄头文库上搜索。

1、2016 年阿里内推年阿里内推1.Hashmap,hashtable,concurrentHashmap 底层实现和区别Hashmap不加锁,执行的效率比较高Hashtable每个方法都加锁,执行的效率比较低ConcurrentHashMap采用了二次哈希的方式,第一次哈希映射到对应的 segment,然后对segment 加锁,第二次 hash 映射到不同的 segment 的不同桶中2.Spring 框架的原理,springAOP 可以使用哪些代理,有什么区别 Spring 主要包括两个方面 IOC 和 AOP Spring 的控制反转:把对象的创建、初始化、销毁等工作交给 spring

2、容器来做。由 spring 容器控制对象的生命周期。 AOP:面向切面编程,使用动态代理是实现 JDK 的动态代理(松耦合) 因为利用 JDKProxy 生成的代理类实现了接口 CGLIB 的动态代理 用 CGlib 生成代理类是目标类的子类JDKProxy 代理SpringAop目标对象目标对象拦截器类切面拦截器类中的方法通知被拦截到的目标类中方法的集合切入点在客户端调用的方法(目标类目标方法)连接点代理类AOP 代理代理类的代理方法生成的过程织入 aop:1、切面事务、日志、安全性框架、权限等都是切面2、通知切面中的方法就是通知3、目标类 4、切入点 只有符合切入点,才能让通知和目标方法结

3、合在一起5、织入:形成代理对象的方法的过程 springAOP 的具体加载步骤:1、当 spring 容器启动的时候,加载了 spring 的配置文件2、为配置文件中所有的 bean 创建对象3、spring 容器会解析 aop :config 的配置 1、解析切入点表达式,用切入点表达式和纳入 spring 容器中的 bean 做匹配如果匹配成功,则会为该 bean 创建代理对象,代理对象的方法=目标方法+通 知,如果匹配不成功,不会创建代理对象4、在客户端利用 context.getBean 获取对象时,如果该对象有代理对象则返回代理对象,如果没有代理对象,则返回目标对象 说明:如果目标类

4、没有实现接口,则 spring 容器会采用 cglib 的方式产生代理对象,如果实 现了接口,会采用 jdk 的方式 3 如何实现一个 ORM 框架 ORM 是对 JDBC 的简单封装,我们要对三类文件进行解析文件解析方法作用映射类反射映射文件Saxreader dom描述类的属性和数据库字段 的映射关系数据库配置文件Saxreader dom使用 JDBC 链接数据库从对象到数据库 根据映射文件,使用 jdbc 进行设置 从数据库到对象 有对应的属性名,采用反射技术,进行值得设置(set 方法) 另外的工作: 管理数据库连接池,session 4.hibernate 一级缓存和二级缓存,hi

5、bernate 其他缓存一级缓存:session 级别的缓存,session 的 save(),get(),load(),select()都会将对象放到session 缓存中。二级缓存:sessionFactory 级别的缓存二级缓存应用场景: (1)经常被访问(2)改动不大(3)数量有限 (4)不是很重要的数据,允许出现偶尔并发的数据 二级缓存策略,是针对于 ID 查询的缓存,对于条件查询则毫无作用。Hibernate 提供了 针对条件查询的 Query Cache。 5.hibernate 事务传播行为种类事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建

6、一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常。PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内

7、执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。6 springmvc 原理 Spring 工作流程描述 1.用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet 捕获; 2.DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI) 。然后根据该 URI, 调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器) ,最后以 HandlerExecutionChain 对象的形式返

8、回;3.DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。如果成功获得 HandlerAdapter 后,此时将开始执行拦截器的 preHandler(.)方法 4.提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler(Controller)。 在填 充 Handler 的入参过程中,根据你的配置,Spring 将帮你做一些额外的工作: HttpMessageConveter: 将请求消息(如 Json、xml 等数据)转换成一个对象,将对象转换 为指定的响应信息 数据转换:对请求消息进行数据转换。

9、如 String 转换成 Integer、Double 等 数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等 数据验证: 验证数据的有效性(长度、格式等) ,验证结果存储到 BindingResult 或 Error 中 5.Handler 执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象; 6.根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容 器中的 ViewResolver)返回给 DispatcherServlet ; 7.ViewResolver

10、结合 Model 和 View,来渲染视图,将渲染结果返回给客户端7.Spring 为什么要结合使用 HandlerMapping 以及 HandlerAdapter 来处理 Handler? 符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是代码可复用性高。 如 HandlerAdapter 可能会被用于处理多种 Handler 8.web 中安全性问题的考虑,如何防止 表单验证,防止表单重复提交,权限拦截 9 web 系统整体架构 MVC 整体架构,松耦合,代码重用性好 模型(Model)代表应用程序的数据(data)和用于控制访问和修改这些数据的业务规则 (business

11、 rule) 当模型发生改变时,它会通知视(View) ,并且为视提供查询模型相关状态的能力。同时, 它也为控制器(Controller)提供访问封装在模型内部的应用程序功能的能力。 控制器(Controller)定义了应用程序的行为;它负责对来自视的用户要求进行解释,并把 这些要求映射成相应的行为,这些行为由模型负责实现。 为什么要分层: 主要目的是为了解耦 比如工程的 view 是用 jsp 做的,现在想做成桌面软件,那么我只需要修改 view 层和部分的 controller 层就可以了,model 层不需要变化。 10.hibernate 如何实现声明式事务11.java 并发包 12

12、. volatile 关键字 volatile 让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存” 。 volatile 具有 synchronized 关键字的“可见性” ,但是没有 synchronized 关键字的“并发正确 性” ,也就是说不保证线程执行的有序性。 也就是说,volatile 变量对于每次使用,线程都能得到当前 volatile 变量的最新值。但是 volatile 变量并不保证并发的正确性。13. 平常都看哪些书 推荐系统实战,java 核心卷 14.如何进行反射,如何提高反射的性能 缓存 15. 如何实现 java 的代理,为什么需要实现接口 因为

13、 JDK 的代理对象也 implements 了这些接口,这样可以保证调用代理对象和调用被代理 对像没有区别 16. Struts 的漏洞 可以远程执行服务器脚本代码 重定向漏洞 17.数组和 List 的互相转换 Arrays.asList() list.toArray()18.TCP 协议的三次握手 19.滑动模块协议 滑动窗口协议中,允许对方发送多个分组(当有多个分组可用时)而不需等待确认,但它 受限于在流水线中为未确认的分组数不能超过某个最大允许数 N。滑动窗口协议是 TCP 使用的一种流量控制方法,此协议能够加速数据的传输。只有在接收窗口向前滑动时(与此 同时发送了确认) ,发送窗口

14、才有可能向前滑动。 收发两端的窗口按照以上规律不断地向前滑动,因此这种协议称为滑动窗口协议。 当收发窗口的大小都等于 1 时,就是停止等待协议。 20. mybatis 与 hibernate 有什么区别,为什么不用 hibernate 直接写 sql 语句? Hibernate 和 Mybatis 都是 orm 对象关系映射框架,都是用于将数据持久化的框架技术。 Hiberante 较深度的封装了 jdbc,对开发者写 sql 的能力要求的不是那么的高,我们只要通 过 hql 语句操作对象即可完成对数据持久化的操作了。 另外 hibernate 可移植性好,更换数据库只需要修改配置文件的数据

15、库方言即可。因此使用 Hibernate 框架,数据库的移植较为方便。 hibernate 不足:生成的 sql 语句较为死板,占用资源,难于优化,支持存储过程的能力较 弱。Hibernate 优点:懒加载、缓存、策略模式 Mybatis 也是对 jdbc 的封装,但是封装的没有 hibernate 那么深,我们可以再配置文件中写 sql 语句,可以根据需求定制 sql 语句,易于优化,尤其对于复杂的查询 涉及到大数据的系统使用 Mybatis 比较好,因为优化较方便。涉及的数据量不是很大且对 优化没有那么高,可以使用 hibernate 21. .项目中使用了哪些数据结构? 22.TCP 中

16、断连接四次挥手? 23.项目遇到什么问题,怎么解决? 文件目录树状结构展示,需要 Easyui 展示文件系统,怎么后退? 24.JDK1.8 有什么新特性? Java 8 允许我们给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可, 这个特征又叫做扩展方法 Lambda 表达式表达式 DATE APIHashmap:因为如果冲突链太长,查询效率太低,所以超过一定范围,java 会给冲突 链建红黑树 25.Class 的加载过程 bootstrap classloader:引导(也称为原始)类加载器,它负责加载 Java 的核心类。这个加 载器的是非常特殊的,它实际上不是 java.lang.ClassLoader 的子类,而是由 JVM 自身实现 的。 因为 JVM 在启动的时候就自动加载它们,所以不需要在系统属性 CLASSPATH 中指定这些类 库extension classloader 扩展类加载器,它负责加载 JRE 的扩展目录 (JAVA_HOME/jre/lib/ext 或者由 java.ext.dirs 系

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号