A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

金蝶软件西安分公司
公司行业:计算机软件 互联网/电子商务
公司规模:500-1000人
公司地址:西安市高新区科技二路72号西安软件园零壹广场22层
笔试题:
面试总结:
1: SpringMVC 执行流程描述:  
1. 用户向服务器发开请求,请求被 sssSpringMVC 前端控制器 DispatcherServlet 捕获;
2. DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回;
3. DispatcherServlet 根据获得的 Handler,选择一个合弁的 HandlerAdapter;(附注:如果成功获得HandlerAdapter 后,此时将开始执行拦截器的 preHandler 方法)
4. 提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler(Controller)。 在填充 Handler 的入参过程中,根据你的配置, SpringMVC 将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如 Json、 xml 等数据)转换成一个对象,将对象转换为指定的响应信息。
数据转换:对请求消息进行数据转换。如 String 转换成 Integer、 Double 等。
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等。
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到 BindingResult 或 Error 中。
5. Handler 执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;
6. 根据返回的 ModelAndView,选择一个弁合的 ViewResolver(必须是已经注册到 SpringMVC 容器中的ViewResolver)返回给 DispatcherServlet;
7. ViewResolver 结合 Model 和 View,来渲染视图;
8. 将渲染结果返回给客户端。  
  
2: 你对Mybatis 的理解 ?
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。 MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。 MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
Mybatis 的优点:
1、简单易学。 mybatis 本身就很小且简单。没有任何第三方依赖,最简单安装只要两个 jar
加配置几个 sql 映射文件,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现;
2、灵活。 mybatis 不会对应用程序或者数据库的现有设计强加任何影响。 sql 写在 xml 里,便于统一管理和优化。通过 sql 基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多;
3、解除 sql 与程序代码的耦合。通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。 sql 和代码的分离,提高了可维护性;
4、提供映射标签,支持对象与数据库的 orm 字段关系映射;
5、提供对象关系映射标签,支持对象关系组建维护;
6、提供 xml 标签,支持编写动态 sql。
3: Sql 之连接有哪些?
外连接:
1)左连接(左外连接)以左表为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为 NULL;
2)右连接(右外连接)以右表为基准进行查询,右表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为 NULL;
3)全连接就是先以左表进行左外连接,然后以右表进行右外连接。
内连接:显示表之间有连接匹配的所有行。  
4: 什么是Sql 之 SQL 注入 ?
举例:
select admin from user where username='admin' or 'a'='a' and passwd=''or 'a'='a'
防止 SQL 注入,使用预编译语句是预防 SQL 注入的最佳方式,如
select admin from user where username=? And password=?
使用预编译的 SQL 语句语义不会发生改变,在 SQL 语句中,变量用问号?表示。像上面例子中, username变量传递的'admin' or 'a'='a' 参数,也只会当作 username 字符串来解释查询,从根本上杜绝了 SQL 注入攻击的发生。
注意:使用 mybaits 时 mapper 中#方式能够很大程度防止 sql 注入, $方式无法防止 sql 注入.   
5: Cookie 和 session 的区别 ?
cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。
下面列出了session和cookie的区别:
无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。
在存储的数据量方面session和cookies也是不一样的。 session能够存储任意的Java对象, cookie只能存储String类型的对象。  
6:Dubbo 的容错机制有哪些 ?  
Dubbo 官网提出总共有六种容错策略:
1) Failover Cluster 模式
失败自动切换,当出现失败,重试其它服务器。 (默认)
2) Failfast Cluster
快速失败,只发起一次调用,失败立即报错。 通常用于非幂等性的写操作,比如新增记录。
3) Failsafe Cluster
失败安全,出现异常时,直接忽略。 通常用于写入审计日志等操作。
4) Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。 通常用于消息通知操作。
5) Forking Cluster
并行调用多个服务器,只要一个成功即返回。 通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=” 2”来设置最大并行数。
6) Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错。 (2.1.0 开始支持) 通常用于通知所有提供者更新缓存或日志等本地资源信息。
总结: 在实际应用中查询语句容错策略建议使用默认 Failover Cluster ,而增删改建议使用 Failfast Cluster 或者 使用 Failover Cluster(retries=” 0”) 策略 防止出现数据 重复添加等等其它问题!建议在设计接口时候把查询接口方法单独做一个接口提供查询。  
7: 简单介绍一下 zookeeper 以及 zookeeper 的原理。
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、 功能稳定的系统提供给用户。
ZooKeeper 包含一个简单的原语集, 提供 Java 和 C 的接口。ZooKeeper 代码版本中,提供了分布式独享锁、选举、队列的接口,代码在 zookeeper-3.4.3\src\recipes。其中分
布锁和队列有 Java 和 C 两个版本,选举只有 Java 版本。
原理:
ZooKeeper 是以 Fast Paxos 算法为基础的,Paxos 算法存在活锁的问题,即当有多个 proposer 交错提交时,有可能互相排斥导致没有一个 proposer 能提交成功,而 Fast Paxos 作了一些优化,通过选举产生一个 leader (领导者),只有 leader 才能提交 proposer,具体 算法可见 Fast Paxos。因此,要想弄懂 ZooKeeper 首先得对 Fast
Paxos 有所了解。ZooKeeper 的基本运转流程:1、选举 Leader。 2、同步数据。 3、选举 Leader 过程中算法有很多,但要达到的选举标准是一致的。 4、 Leader 要具有最高的执行 ID,类似 root 权限。 5、集群中大多数的机器得到响应并 follow选出的 Leader。
8: 动静态代理的区别,什么场景使用?
静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。
静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。
动态代理是实现 JDK 里的 InvocationHandler 接口的 invoke 方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过 Proxy 里的 newProxyInstance 得到代理对象。
还有一种动态代理 CGLIB,代理的是类,不需要业务类继承接口,通过派生的子类来实现代理。通过在运行时,动态修改字节码达到修改类的目的。
AOP 编程就是基于动态代理实现的,比如著名的 Spring 框架、 Hibernate 框架等等都是动态代理的使用例子。  
9: Java 中的设计模式  ?
1. 你所知道的设计模式有哪些
Java 中一般认为有 23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。
总体来说设计模式分为三大类:
创建型模式,共五种: 工厂方法模式、 抽象工厂模式、 单例模式、 建造者模式、原型模式。
结构型模式,共七种: 适配器模式、装饰器模式、 代理模式、外观模式、桥接模式、组合模式、 享元模式。
行为型模式,共十一种: 策略模式、模板方法模式、 观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

130 个回复

正序浏览
哦嗨呦 发表于 2018-10-12 15:27
顶!!!!!!!!

努力奉献!
回复 使用道具 举报
回复 使用道具 举报

努力奉献!
回复 使用道具 举报

努力奉献!
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报

努力奉献!
回复 使用道具 举报

努力奉献!
回复 使用道具 举报

努力奉献!
回复 使用道具 举报
疯子小花花 发表于 2018-10-12 11:45
棒棒哒!!!棒棒哒!!!

努力奉献!
回复 使用道具 举报
小西西哦 发表于 2018-10-12 11:10
66666666666666666666666666666666666666

努力奉献!
回复 使用道具 举报
指间 发表于 2018-10-11 21:24
666666666666666666666

努力奉献!
回复 使用道具 举报
zhuyanting 发表于 2018-10-11 16:44
66666666666666666666666666666

努力奉献!
回复 使用道具 举报

努力奉献!
回复 使用道具 举报
kdhdjdj 发表于 2018-10-11 13:23
666666666666666666666666666666666

努力奉献!
回复 使用道具 举报
大智叔叔 发表于 2018-10-11 12:06
满满的干货只为你!

努力奉献!
回复 使用道具 举报
#风萧萧# 发表于 2018-10-11 12:01
谢谢楼主,辛苦了...........

努力奉献!
回复 使用道具 举报

努力奉献!
回复 使用道具 举报

努力奉献!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马