Professional Documents
Culture Documents
2.线程和进程的区别:进程就是一个可执行程序,一个线程可以有多个线程
3.接口和抽象类的区别
抽象类:可有又构造方法,可以有普通成员方法,方法可以是抽象的或者非抽象的,方法的访问类型可以是
public 和 protected,可以包含静态方法,成员变量可以使用任意变量,一个类只能继承一个抽象类,可以实
现代码重用
接口:不能有构造方法,没有普通成员方法,方法必须是抽象的,不能包含静态方法,成员变量必须 final 修饰,
一个类可以实现多个接口。
4 库存什么时候减的:用户将商品加入购物车并付款以后。
5. 分布式用的什么,dubbo 用什么实现的,对 dubbo 了解吗:
a)Dubbo,Redis
b)服务容器负责启动,加载,运行服务提供者
服务提供者在启动时,想注册中心注册自己提供的服务
服务消费者在启动时,向注册中心订阅自己所需的服务
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费
者。
服务消费者,从消费者地址列表中,基于负载均衡算法,西安一台提供者进行调用,如果调用失败,再
选一台调用
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
6. 服务器用了几台:13 台
7. 后台页面能自己写吗,easyUi 常用控件,常用方法:
a)Form 表单控件,layout 布局控件,gird 控件
b)Datagrid 动态列,访问 url 获取数据,弹出模态框,数据表格
前台页面都是 jsp 吗
首页用的 html
8. Jsp 的核心及核心标签
a)Servlet
b)Core XML Database Funcations
9.Servlet 生命周期
a)初始化阶段 调用 init()方法
b)响应客户请求阶段 调用 service()方法
c)终止阶段 调用 destroy()方法
8. Redis 什么情况下使用,redis 持久化方案
a)处理大数据量的时候
b)Redis 的所有数据都是保存在内存中,
Rdb:快照形式,定期把内存中当前时刻的数据保存到磁盘,redis 默认支持的持久化方案
aof 形式:append only file。把所有对 redis 数据库操作的命令,增删改操作命令,保存到文件中,
数据库恢复是把所有命令执行一遍即可。
10.SpringMVC 和 Struts2 有区别
a)Struts2 是类级别拦截器,一个类对应一个 request 上下文;
SpringMVC 是方法级别的拦截,一个方法对应一个 request 上下文。
b)Struts2 需要对每个 request 进行封装,比较消耗内存
c)拦截器实现机制上,Struts2 有自己的 interceptor 机制,springMVC 用的是独立的 aop 方式
d)SpringMVC 的入口是 servlet,而 Struts2 的入口是 filter
e)SpringMVC 集成了 Ajax 使用非常方便,只需要注解@ResponseBody 就可以实现
f)SpringMVC 和 Spring 是无缝的,从项目管理和安全性上比 Struts2 高
g)Spring 开发效率和性能高于 Struts
11. Hibernate 和 Mybatis 的区别和优劣
a)Sql 优化方面:hibernate 的查询会将表中所有的字段查询出来,这一点会有性能的消耗
Mybatis 的 sql 是手动编写的,所以可以按需求指定查询的字段,sql 会更灵活,可控性更好
b)Hibernate 是在 JDBC 上进行了一次封装
Mybatis 是基于原生的 JDBC,运行速度有优势
c)Mybatis mapper xml 支持动态 sql;Hibernate 不支持
d)Hibernate 与具体数据库的关联只需在 xml 文件中配置即可,所有 hql 语句与具体的数据库无关,移植性好
Mybatis 项目所有的 sql 语句都是依赖所用的数据库的,所以不同数据库类型的支持不好
12.Hibernate 映射关系
a)单向一对一关联映射
b)单向一对多关联映射
c)单向多对一关联映射
d)单向多对多关联映射
13.Spring 的理解,如何依赖注入
a)Spring 是一个轻量级的控制反转和面向切面的容器框架
b)Spring 使得对象管理集中化和简单化
c)依赖注入类型:setter 注入和构造方法注入
setter injection 对象被创建后将被依赖对象通过 set 方法设置进去
constructor injection 对象创建时被依赖对象以构造方法参数的方式注入
d)Spring 核心功能:
BeanFactory:产生一个新的实例,可以实现单例模式,是核心容器的主要组件,是工厂模式的
实现。
BeanWraper:提供统一的 get 及 set 方法
ApplicationContext:提供框架的实现,包括 BeanFactory 的所有功能
14.面试思想
OOA 是面向对象的分析 Analysis
OOD 是面向对象的设计 Design
OOP 是面向对象的编程 Programming
都是相辅相成的: 分析是为了设计,设计是为了编程。
都属于软件工程的不同课题
15
16.Dubbo 协议:采用 NIO 复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,在大文件传
输时,单一连接会成为瓶颈
为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索
引也要随之变动)
Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大
于服务提供者机器数的情况。
索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。如果想按特定
职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到 ID 等于 10000
的这一行被找到为止;有了索引之后(必须是在 ID 这一列上建立的索引),即可在索引中查找。由于索引是经过某
种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
相当于对指定的列生成目录啊,可以加快查找速度,对读多写少的列,可以添加索引
RPC(Remote Procedure Call)是一种远程调用协议,简单地说就是能使应用像调用本地方法一样的调用远程的过
程或服务,可以应用在分布式服务、分布式计算、远程服务调用等许多场景。说起 RPC 大家并不陌生,业界有很
多开源的优秀 RPC 框架,例如 Dubbo、Thrift、gRPC、Hprose 等等。
17
上面是直坨数字阵型
18.
19.
20.SQL 语句优化策略
阅读( )暂无评论时间:2014-03-10 18:06:32
总体来说,SQL 语句优化策略有以下几个方面:
● 创建表的时候。应尽量建立主键,根据主键查询数据;
● 大数据表删除,用 truncate table 代替 delete。
● 合理使用索引,在 OLTP 应用中一张表的索引不要太多。组合索引的列顺序尽量与查询条件列顺序保持一致;对
于数据操作频繁的表,索引需要定期重建,以减少失效的索引和碎片。
● 查询尽量用确定的列名,少用*号。
21.请求转发和重定向的区别?
forword -- 请求转发 :
1、服务器端跳转,地址栏不改变
2、执行到跳转语句后马上无条件跳转,之后的代码不再执行(跳转之前一定要释放全部资源)
3、request 设置的属性在跳转后的页面仍可以使用
4、使用<jsp:param name="参数名" value="参数值" />传递参数
redirct-- 重定向:
1、客户端跳转,地址栏改变
2、所有代码执行完毕后跳转
3、跳转后的页面不能使用上一个页面的 request 属性
4、使用地址重写传递参数(response.sendRedirect("URL?参数名=参数值"))
22.String,StringBuffer、StringBuilder 的区别?
答: String 是一个特殊的引用数据类型,是一个长度不可变的字符序列,没有缓冲区,一旦创建就不会发生变化
了。即使重新赋值不是在原来对象的基础上改变的,而是创建了一个新的对象,将引用指向这个新的对象,浪费
空间,效率比较低。
StringBuffer、StringBuilder 是容器,是可变的字符串序列,存放于堆内存。
StringBuffer 是 JDK1.0 版本的,线程是安全的,效率比较低。StringBuilder 是 JDK1.5 出现的,线程不安全,效
率高。
24.事务就是访问可能更新数据库各种数据项的一个可执行单元
25.Struts2 中访问多个 Action 怎么办?
通过配置 method 属性,通配符,或者动态访问
序列化是一种用来处理对象流的机制
,所谓对象流就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络
之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
什么时候使用序列化:
一:对象序列化可以实现分布式对象。主要应用例如:RMI 要利用对象序列化运行远程主机上的服务,就像在本地
机上运行对象时一样。
二:java 对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次
写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象
本身及引用的对象本身。序列化一个对象可能得到整个对象序列。
30.浅谈 Shiro 框架
1.Spring security 与 apache shiro 差别:
shiro 配置更加容易理解,容易上手;security 配置相对比较难懂。
在 spring 的环境下,security 整合性更好。Shiro 对很多其他的框架兼容性更好,号称是无缝集成。
shiro 不仅仅可以使用在 web 中,它可以工作在任何应用环境中。
在集群会话时 Shiro 最重要的一个好处或许就是它的会话是独立于容器的。
Shiro 提供的密码加密使用起来非常方便。
2.控制精度:
Shiro 也支持注解方式。
注解方式控制权限只能是在方法上控制,无法控制类级别访问。
URL 权限过滤
shiro 安全框架:
+ehcache 缓存
1)、引入依赖 pom.xml
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
/>
</ehcache>
4)、applicationContext-shiro.xml,配置校验的策略,哪些校验,哪些放行
<description>Shiro 的配置</description>
</beans>
//授权
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
System.out.println("授权");
//获取当前用户
User user = (User)principals.fromRealm(getName()).iterator().next();
//得到权限字符串
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
}
6)、修改传统登录为 shiro 登录
package cn.itcast.jk.action;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.subject.Subject;
import cn.itcast.common.SysConstant;
import cn.itcast.jk.service.UserService;
/**
* @Description: 登录和退出类
* @Author: 靳磊
* @Company: http://java.itcast.cn
* @CreateDate: 2014 年 10 月 31 日
*/
public class LoginAction extends BaseAction {
try{
subject.login(token); //自动调用 AuthRealm.doGetAuthenticationInfo
return "login";
}
return SUCCESS;
}
}
7)、授权(另一种加载数据的思想 可省略因为在登录时已加载)
根据用户查询出角色对应的权限,并返回权限串
-hql,service
for(Module m : moduleList){
if(m!=null){ //观察 hibernate 实现的 SQL,会多出一条 Null 记录
_list.add(m.getName());
}
}
return _list;
}
//授权
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
log.info("执行授权...");
return authorizationInfo;
}
<shiro:hasPermission name="sysadmin">
<span id="topmenu" onclick="toModule('sysadmin');">系统管理</span>
</shiro:hasPermission>