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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 就业高冷派 黑马粉丝团   /  2018-9-29 15:38  /  8752 人查看  /  130 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

金蝶软件西安分公司
公司行业:计算机软件 互联网/电子商务
公司规模:500-1000人
公司地址:西安市高新区科技二路72号西安软件园零壹广场22层
1.jpg
笔试题:
面试总结:
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 个回复

倒序浏览
感谢分享
回复 使用道具 举报
yy1134787753 来自手机 中级黑马 2018-10-10 11:47:34
藤椅
感谢分享
回复 使用道具 举报
6666666666666666666666666666666666666666666666666666
回复 使用道具 举报
感谢分享
回复 使用道具 举报
感谢分享
回复 使用道具 举报
淡写薰衣草的香 来自手机 中级黑马 2018-10-10 12:03:51
7#
回复 使用道具 举报
感谢分享
回复 使用道具 举报
SunYan 来自手机 中级黑马 2018-10-10 12:20:27
9#
黑马66666666666
回复 使用道具 举报
duanshaobo 来自手机 中级黑马 2018-10-10 12:36:05
10#
你说的对
回复 使用道具 举报
致橡树 来自手机 中级黑马 2018-10-10 13:20:55
11#
6666666666666
回复 使用道具 举报
黑马66666666666
回复 使用道具 举报
66666666666666666666666
回复 使用道具 举报
6666666666666666666666666
回复 使用道具 举报
huochao 来自手机 中级黑马 2018-10-10 14:39:03
15#
好厉害,66666666666666666666666
回复 使用道具 举报
好厉害,66666666666666666666666
回复 使用道具 举报
pcdate 来自手机 中级黑马 2018-10-10 15:10:30
17#
66666666666666
回复 使用道具 举报
兮兮哈哈 来自手机 中级黑马 2018-10-10 15:14:58
18#
666666666666666666666666666
回复 使用道具 举报
黑马666666666666
回复 使用道具 举报
感谢分享6666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马