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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 就业高冷派 黑马粉丝团   /  2018-8-28 16:40  /  8480 人查看  /  137 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 就业高冷派 于 2018-8-28 16:45 编辑

软通动力信息技术(集团)有限公司
公司行业:互联网/电子商务
公司规模:1000+
公司地址:西安雁塔区西安环普科技产业园
1.2.jpg
笔试题:

面试总结:
1: 简述一下 hibernate 的开发流程 ?  
第一步:加载 hibernate 的配置文件,读取配置文件的参数(jdbc 连接参数,数据 库方言, hbm 表与对象关系映射文件) 

第二步:创建 SessionFactory 会话工厂(内部有连接池) 

第三步:打开 session 获取连接,构造 session 对象(一次会话维持一个数据连接, 
也是一级缓存) 

第四步:开启事务 

第五步:进行操作 。
第六步:提交事务 

第七步:关闭 session(会话)将连接释放 

第八步:关闭连接池 
  
2: hibernate 中对象的三种状态  ?
瞬时态(临时态、自由态):不存在持久化标识 OID,尚未与 Hibernate Session 关联对象, 被认为处于瞬时态,失去引用将被 JVM 回收

持久态:存在持久化标识 OID,与当前 session 有关联,并且相关联的 session 没有关闭 , 并且事务未提交 

脱管态(离线态、游离态):存在持久化标识 OID,但没有与当前 session 关联,脱管状态 改变 hibernate 不能检测到
3: 如何使用 ActiveMQ 解决分布式事务?
在互联网应用中,基本都会有用户注册的功能。在注册的同时,我们会做出如下操作:
1. 收集用户录入信息,保存到数据库
2. 向用户的手机或邮箱发送验证码
等等
如果是传统的集中式架构,实现这个功能非常简单:开启一个本地事务,往本地数据库中插入一条用户数据,发送验证码,提交事物。
但是在分布式架构中,用户和发送验证码是两个独立的服务,它们都有各自的数据库,那么就不能通过本地事物保证操作的原子性。这时我们就需要用到 ActiveMQ(消息队列)来为我们实现这个需求。
在用户进行注册操作的时候,我们为该操作创建一条消息,当用户信息保存成功时,把这条消息发送到消息队列。验证码系统会监听消息,一旦接受到消息,就会给该用户发送验证码 .
问题:
1.如何防止消息重复发送?
解决方法很简单:增加消息状态表。通俗来说就是一个账本,用来记录消息的处理状态,每次处理消息之前,都去状态表中查询一次,如果已经有相同的消息存在,那么不处理,可以防止重复发送。
4: 简单介绍一下 solr ?
Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。 用户可以通过 http请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以 通过 Http Get 操作提出查找请求,并得到XML 格式的返回结果。
特点:
Solr 是一个高性能,采用 Java5 开发,基于 Lucene 的全文搜索服务器。同时对其进行 了扩展,提供了比Lucene 更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能 进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
工作方式:
文档通过 Http 利用 XML 加到一个搜索集合中。查询该集合也是通过 http 收到一个 XML/JSON 响应来实现。
它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮 显示搜索结果,通过索引复制来提高可用性,提供一套强大 Data Schema 来定义字段,类 型和设置文本分析,提供基于 Web 的管理界面等 。  
5: 简单介绍一下 Struts2   ?
Struts2 框架是一个按照 MVC 设计模式设计的 WEB 层框架,是在 struts 1 和 WebWork 的技术基础上进行了合并的全新的框架。其全新的 Struts 2 的体系结构与 Struts 1 的体 系结构差别巨大。 Struts 2 以 WebWork 为核心,采用拦截器的机制来处理用户的请求, 这样的设计也使得业务逻辑控制器能够与 ServletAPI 完全脱离开。 

我们可以把 struts2 理解为一个大大的 servlet,而这个 servlet 就是 ActionServlet。struts2 在处理客户端请求时,会先读取 web.xml 配置文件,根据前端控制器将符合条件的请求 分给各个不同的 Action 处理。 在此之前,会把ActionServlet 会把数据封装成一个 javaBean。 
Struts2 框架提供了许多的拦截器,在封装数据的过程中,我们可以对数据进行一些操 作,例如:数据校验等等。当Action 执行完后要返回一个结果视图, 这个结果视图可以跟据 struts2 的配置文件中 配置,选择转发或者重定向。  
6: Java 中异常分为哪些种类 ?  
1) 按照异常需要处理的时机分为编译时异常(也叫强制性异常) 也叫 CheckedException 和运行时异常(也叫非强制性异常) 也叫 RuntimeException。只有 java 语言提供了 Checked 异常, Java 认为 Checked异常都是可以被处理的异常,所以 Java 程序必须显式处理 Checked 异常。如果程序没有处理 Checked 异常,该程序在编译时就会发生错误无法编译。这体现了 Java 的设计哲学:没有完善错误处理的代码根本没有机会被执行。对 Checked 异常处理方法有两种:
1 当前方法知道如何处理该异常,则用 try...catch 块来处理该异常。
2 当前方法不知道如何处理,则在定义该方法是声明抛出该异常。
运行时异常只有当代码在运行时才发行的异常,编译时不需要 try catch。 Runtime 如除数是 0 和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。
7: SQL 之连接查询(左连接和右连接的区别) ?
外连接:
左连接(左外连接):以左表作为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配则显示为 null。
右连接(右外连接):以右表作为基准进行查询,右表数据会全部显示出来,左表如果和右表匹配的数据则显示相应字段的数据,如果不匹配则显示为 null。
全连接:先以左表进行左外连接,再以右表进行右外连接。
内连接:
显示表之间有连接匹配的所有行。
8: SQL 之 sql 注入 ?
通过在 Web 表单中输入(恶意) SQL 语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行 SQL 语句。举例:当执行的 sql 为 select * from user where username = “admin”or “a” =“a” 时, sql 语句恒成立,参数 admin 毫无意义。
防止 sql 注入的方式:
1. 预编译语句:如, select * from user where username = ?, sql 语句语义不会发生改变, sql 语句中变量用?表示,即使传递参数时为“admin or ‘a’ = ‘a’ ”,也会把这整体当做一个字符创去查询。
2. Mybatis 框架中的 mapper 方式中的 # 也能很大程度的防止 sql 注入($无法防止 sql 注入)。
9: Mysql 性能优化  ?
1、 当只要一行数据时使用 limit 1
查询时如果已知会得到一条数据,这种情况下加上 limit 1 会增加性能。因为 mysql 数据库引擎会在找到一条结果停止搜索,而不是继续查询下一条是否符合标准直到所有记录查询完毕。
2、 选择正确的数据库引擎
2、 Mysql 中有两个引擎 MyISAM 和 InnoDB,每个引擎有利有弊。
MyISAM 适用于一些大量查询的应用,但对于有大量写功能的应用不是很好。甚至你只需要update 一个字段整个表都会被锁起来。而别的进程就算是读操作也不行要等到当前 update 操作完 成之后才能继续进行。另外, MyISAM 对于 select count(*)这类操作是超级快的。InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用会比 MyISAM 还慢,但是支持“行锁”,所以在写操作比较多的时候会比较优秀。并且,它支持很多的高级应用,例如:事物。
3. 用 not exists 代替 not in
Not exists 用到了连接能够发挥已经建立好的索引的作用, not in 不能使用索引。 Not in 是最慢的方式要同每条记录比较,在数据量比较大的操作红不建议使用这种方式。
4. 对操作符的优化,尽量不采用不利于索引的操作符
如: in not in is null is not null <> 等某个字段总要拿来搜索,为其建立索引:
Mysql 中可以利用 alter table 语句来为表中的字段添加索引,语法为: alter table 表明
add index (字段名);

137 个回复

倒序浏览
感谢分享
回复 使用道具 举报
辛苦啦!
回复 使用道具 举报
回复 使用道具 举报
顶!!!!!!!!!!
回复 使用道具 举报
不错, 不错 ..................
回复 使用道具 举报

感谢分享....................
回复 使用道具 举报
感谢分享....................
回复 使用道具 举报
666666666666666666666666
回复 使用道具 举报
谢谢楼主,辛苦了...........
回复 使用道具 举报
回复 使用道具 举报
传智我龙哥,人狠话不多
回复 使用道具 举报
66666666666666666666666666
回复 使用道具 举报
感谢分享    辛苦啦     受益很大
回复 使用道具 举报
淡写薰衣草的香 来自手机 中级黑马 2018-9-12 12:17:41
15#
回复 使用道具 举报
很不错的分享,谢谢啦!
回复 使用道具 举报

感谢分享    辛苦啦     受益很大
回复 使用道具 举报
感谢分享
回复 使用道具 举报
热爱我大黑马。。。
回复 使用道具 举报
666666666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马