笔记
1. 异常:Runtime Exception、CheckedException
2. 注解:SuppressWarnings(“unchecked”),指示编译器取消警告。
3. getSession(false,true,null)的用法:
3.1:request.getSession(false):返回当前request中的session,如果没有,返回null。
3.2:request.getSession(true)等同于request.getSession(),如果没有session,就创建一个。
4. spring注解:@Autowired与@Qualifier
4.1:@Autowired是根据类型来装配,当上下文中不存在该类型或不止一个该类型,就会报错;可以是使用@Qualifier来解决;
a:@Autowired
@Qualifier(“UserDao”)
b:若可能不存在UserDao实例:@Autowired(required=false)
5. WSDL是什么?
网络服务描述语言
6. XSD是什么?
指Xml结构定义
7. 日志级别:DEBUG、INFO、WARN、ERROR、FATAL、AllLevel、OFFlevel
AllLevel:最低等级、打开所有日志记录;
OFFlevel:最高,关闭所有。
8. JMS:Java消息服务
Java消息服务是Java关于面向消息中间件的API,用于在两个应用程序之间或者分布式系统中发送消息,是一个与具体平台无关的API。
9. Document与element、Node的关系?
10. 如何配置jar包关联的源码:
Java Build Path →libraries→某个jar包→Source attachment → edit选择源码
另:sourceattachment、Javadoclocation、Nativelibrary location、Accessrules 分别是什么意思,做什么的?
11. DeploymentAssembly 是什么意思?干什么的?
12. request.getParamenterValues(pName)会返回一个Enumeration对象,这个如何使用?
13. getAttribute(“key”)与getParament(“key”)的区别?
14. doGet()与doPost()与service():
servlet在默认情况下,无论是post或get请求都会经过service()方法方法处理,然后转向到doGet()或doPost()方法,如果你在自己的servlet类中重写了service()方法,这是service就不是用来转向的,而是处理业务。
15. log4j的使用:添加不同级别的日志信息,调用不同方法加入日志内容,如:Log.info(“……….”),Log.error(“……..”),Log.debug(“………”),Log.warn(“…….”)
16. Mybatis的mapper文件中的变量引用方式#{}与${}的区别?
默认使用#{},MyBatis会产生preparedStatement语句,安全地设置其参数,还会使用必要的安全检查。
${}不进行预编译,可能会产生sql注入问题,也会影响sql语句的预编译,如果需要插入一个不做任何修改的字符串到sql中,则使用${}。
17. UTF-8占用几个字节?
1个字节的:数字,英文字母;
2个字节的:拉丁、希腊等;
3个字节的:类似 GBK,21000个汉字;
4个字节的:中日韩超大字符集里的汉字,5万多个。
18. ASCII、Unicode、UTF-8、GBK、GB2312、ISO-8859-1?
UTF-8是Unicode的实现方式之一,
ASCII是最早出现的,美国制定的一种表示常用制度的编码方式,128个。
Unicode是万国码,它的出现时因为 每个国家标准不统一,导致同一个二进制数字在不同的国家代表的字符不一样。因为ASCII码只能表示常用的128个,而各国的字符都要在128个之后表示,每个国家就出现了不同的表示方式。Unicode规定了字符对应的二进制的值。
19. Java的接口与抽象类:
① 语法上:抽象方法,是否可以有实例方法,实例变量等。
② 概念上:一个是对行为的抽象,一个是对类的抽象。
20. Spring的几个注解:
@Controller:表现层的bean,不指定bean名,默认为首字母小写的类名;
@Component:受Spring管理的组件的通用注释;
@repository:数据访问组件,即Dao组件;
@service:业务层的bean;
@scope:作用域,prototype:原型,singleton:单例
21. Spring注解扫描配置:
<context:annotation-config/>
<context:Component-sacnbase-package=”…”/>
22. Spring注解
@RequestMapping(…..)
@ResponseBody(……)
23. 配置<MVC:annotation-driven/>时报前缀未绑定?
MVC:annotation-driven
↓ ↓
命名空间 元素
为什么要有命名空间?
为了避免发生命名冲突。比如两xml文档中均含有带有不同内容的同一标签,两文档合并时候回发生冲突。此时引入命名空间,给两xml各自给一个命名空间,命名可见一般用一个全球唯一的网址表示。
24. RequestMapping六个属性:
1. value:指定请求的实际地址
2. method:请求的method类型(get、post)
3. cosumes:指定处理请求的提交内容类型(content-Type:application/json;text/html)
4. produces:指定返回的内容类型,仅当request请求头中的accept类型中包含该指定类型才返回。
5. params:指定请求中必须包含某些参数时,才让该方法处理。
6. headers:指定request中必须包含某些指定header值,才让该方法处理。
25. linux查看指定行:(xxx表示文件名)
grep -A 100 xxx:显示关键字后100行;
grep -B 100 xxx:显示关键字前100行;
grep -C 100 xxx:显示关键字前后100行
26. DOS查看端口占用:
① netstat–ano:找到端口对应IP;
② tasklist|findstr“PID”:找到任务列表;
③ taskkill/f /t /im 任务名:杀死进程;
27. linux:tar命令
tar –cvf 目标文件 源文件:打tar包;
tar –xvf xxxx.tar:先cd到目标路径下,再解包;
tar –zcvf xxxx.gz 源文件 :以gzip压缩;
tar –jcvf xxxx.bzz 源文件:以bzip压缩;
28. Jsonp跨域请求:
① What:非官方的跨域数据交换协议;
② 扩展:跨域请求与同源策略:
同源策略:目前,所有的浏览器都引入的一个规则,一个域内的脚本仅具有本域内的权限(同域脚本只能读取本域资源);
同源:同IP并且同端口且同协议
29. Prototype,AlphaGo
30. grep–n “关键字” 文件:显示关键字行数;
head –n 2 文件:查看前两行;
tail –n 2 文件:查看最后两行;
cat 文件|grep–n “关键字”:查看关键字所在行数;
sed –n ‘5,10p’ 文件:查看5-10行;
awk ‘NR==2,NR==11{print}’文件:同上一条;
31. windows下安装启动MySQL:
① 下载包,解压到路径X:XX下;
② 配置环境变量:MYSQL_HOME:x:xx….;Path添加:%MYSQL_HOME%/bin
③ 向windows注册mysql服务;
1) 管理员打开命令行;
2) 切换到bin目录;
3) Mysqld.exe–install MySQL –defaults –file=”x:xx/my-default.ini”
4) 启动服务: net start mysql
④ Mysql:查看当前用户: select user();
查看所有用户:selectuser,host,password from mysql.user;
⑤ 修改密码,修改空密码:
1) SETPASSWORD FOR ‘root’@’localhost’=PASSWORD(‘newPWD’);
2) a:usemysql
b:UPDATE user SET password=PASSWORD(‘root’)where user=’root’;
3) FLUSHPRIVILEGES;
32. MySQL:
① 修改sql语句结束符:delimiter 结束符(注意:该语句后面没有跟旧的结束符)
② 创建一个存储过程:
CREATE PROCEDURE produce_name(IN param_nameTYPE,OUT param_name TYPE)
READS SQL DATA
BEGIN
……….(SQL)
END
$
注意:执行前后修改sql默认结束符;
33. SpringMVC中使用Interceptor拦截器:
① 实现HandlerInterceptor 接口或继承实现该接口的类
② 实现WebRequestInterceptor接口或继承实现该接口的类
③ HandlerInterceptor接口定义了三个方法:
a) preHandler(HttpServletRequestreq,HttpServletResponse res,Object obj){}:请求处理之前调用,返回boolean,若false不再执行后续步骤,若true则调用下一个拦截器或controller;
b) postHandler(HttpServletRequestreq,HttpServletResponse res,Object obj,ModelAndView view){}:controller处理之后,视图解析器之前执行,所以是对ModelAndView进行处理的,与preHandler相反,先声明的会后执行;
c) afterCompletion(HttpServletRequestreq,HttpServletResponse res,Object handle,Exception ex){} 与postHandle方法同样都是都是preHandle方法返回true才执行。该方法还在请求之后执行。
34. 配置Tomcat连接池(Server.xml文件配置)
① Server.xml中配置DataSource,并为其指定参数;
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- Editable user database that can alsobe used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="Userdatabase that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFacto"
pathname="conf/tomcat-users.xml"/>
<!--
|-name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任更换,但是程序中最终要查找的就是此名称,
为了不与其他的名称混淆,所以使用jdbc/oracle,现在配置的是一jdbc的关于oracle的命名服务。
|- auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
|-type:此名称所代表的类型,现在为javax.sql.DataSource
|-maxActive:表示一个数据库在此服务器上所能打开的最大连接数
|-maxIdle:表示一个数据库在此服务器上维持的最小连接数
|-maxWait:最大等待时间。10000毫秒
|-username:数据库连接的用户名
|-password:数据库连接的密码
|-driverClassName:数据库连接的驱动程序
|-url:数据库连接的地址
-->
<!--配置Oracle数据库的JNDI数据源-->
<Resource
name="jdbc/bmos_ds"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="lead_oams"
password="p"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.1.229:1521:lead"/>
<!--配置MySQL数据库的JNDI数据源-->
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.144:3306/leadtest?useUnicode=true&amcharacterEncoding=utf-8"/>
<!--配置SQLServer数据库的JNDI数据源-->
<Resource
name="jdbc/sqlserver"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="p@ssw0rd"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://192.168.1.51:1433;DatabaseName=demo"/>
</GlobalNamingResources>
② Web.xml中引用资源;
<resource-ref>
<res-ref-name>jdbc/bmos_ds</res-ref-name>
<res-type>javax.sql.Datasource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
③ Javabean、servlet中使用资源。
获取连接的方式变了,
原来:加载驱动,获取连接;
现在:使用连接池,如下:
Context context = new InitialContext();
Datasource ds = ()context.lookup(“java:comp/env/jdbc/bmos_ds”);//对应上面name
Connection conn = ds.getConnection();
//java:comp/env/为固定写法,后面跟server.xml中资源名;
//lookup方法会从资源中获取一个数据源。
35. Javax.sql.Datasource接口:
用于提供此Datasource对象表示的物理数据源的连接。作为DriverManager的替代。实现该接口的对象通常基于JDNI注册,该接口驱动由驱动程序供应商实现。
方法:
Connection getConnection()
Connection getConnection(Stringusername,String password)
36. JNDI:Java命名和目录接口:
J2EE的重要规范之一,就是为某个Java对象起一个名字。
Ps:打jar包的方法:
i. 先编译.java文件为.class文件
ii. jar –cvf 生成包的名字class文件或者文件夹(一个或者多个)
例如:jar–cvf test.jar ./com
37. HashMap的实现原理:(数组+链表)
1) 数组:寻址容易,插入、删除难;
2) 链表:寻址难,插入、删除容易
哈希表结合了二者的有点:
HashMap -> Entry[] Entry为HashMap的静态内部类(三个属性:key,value,next)
3) 存取:大致算法是 先用key.hashCode()方法得到hash值,用hash%Entry[].length对数组取余(源码是:hash&(Entry[].length-1))得到的index即value存放在数组中的下标。具体还是看这个吧http://www.importnew.com/16301.html
38.没意思
39.transient关键字:不会序列化,只能修饰变量。
40.soap,WSDL。UDDI
RMI调用 RMI Registry
SOAP(Simple Object Access Protocol,简单对象访问协议),是一种数据交换的协议格式,SOAP=HTTP+xml+RPC
RPC可以选择走TCP还是HTTP
41.nio:
nio的核心组件之一:channel,类似io里面的stream,nio的操作是基于channel,同一可以读取数据到buffer,再写入通道,不过,通道既可以读又可以写,通道有非阻塞io模式。
42.Java设计模式:
1) 分类:
a) 创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。(5个)
b) 结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。(7个)
c) 行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。(11个)
d) 并发模式和线程池模式
2) 六大原则:
a) 开闭原则:对外扩展开放,对修改关闭。(接口和抽象类的使用)
b) 里氏替换原则:任何基类可以出现的地方,子类一定可以出现。
c) 依赖倒转原则:开闭原则的基础,针对接口编程,依赖于抽象而非具体实现。
d) 接口隔离原则:使用多个隔离的接口,比使用单个接口要好。
e) 迪米特原则(最少知道原则):一个实体应该尽可能少得与其他实体间发生互相作用,使得系统模块互相独立。
f) 合成复用原则:尽量使用合成/聚合的方式,而不是使用继承。
43.Web Service
a) wsimport
使用:wsimport [options] <WSDL_URI>
-WSDL_URI 统一资源标识符
-d 指定要输出的文件的位置
-s 指定要解析java的源码,默认解析出的是class字节码
-p 指定输出的包名
b) 看懂WSDL文件:
Service:服务名
Port:服务的访问方式(get、post、soap11、soap12)
Soap:address:服务的地址
Binding name:绑定名,对应port里binding
c) 面试相关:
1. soap:简单对象访问协议 http+xml
2. soa:面向服务架构,一种思想;
组成:首先,面向web的服务,面向web的组件:webservice(内存,cpu,显卡);然后,企业服务总线(ESB),相当于主板。
3. wsdl:webservice的描述语言。
4. UDDI 统一描述,发现,集成
这是目录服务,通过该服务可以注册和发布webservice,以便于第三方调用者统一调用。
d) Webservice 在mvc架构中属于哪一层?业务层
e) Webservice没有严格的服务端和客户端
f) 使用EndPointPublish发布WebService时,遇到wrapper class package….is notfound 。Have you run APT to generatethem?
这是因为没有使用工具生成对应的工具类,可以使用wsgen 工具。
Wsgen –keep –cp 包.类 需要先cd到classes目录的根目录。
g) WebService框架:
i. axis,xfire,axis2
ii. CXF框架:Celtrix(ESB框架)与xFire(Web Service)合并
h) CXF框架:soa框架
1) 是两个框架的合并;
核心是org.apache.CXF.BUS(总线),类似于Spring的ApplicationContext;
依赖于Spring;
需要JDK1.6以上;
内置Jetty容器
2) 特点:
1. 与spring、servlet无缝对接,CXF框架里面继承了servlet容器Jetty
2. 支持注解的方式发布WebService
3. 能够显示WebService的服务列表;
4. 能够添加拦截器:输入拦截器,输出拦截器(日志拦截器,权限认证)
5. ServletFactoryBean:不支持注解,不支持拦截器
6. JaxWsServerFactoryBean:可注解,可拦截。
7. WebService访问步骤:
A. 检测本地代理描述的WSDL是否与服务端的WSDL一致,俗称握手;
B. 通过SOAP协议进行通讯,采用POST请求,数据服装在满足SOAP约定的xml中。
C. 返回数据同样封装在xml 中。
i) Spring与CXF整合:
l 添加jar包
l 编写业务类,通过CXF来发布WebService
l 添加一个CXF请求的Servlet,用来处理WebService的请求(过滤地址/ws/*)
l 配置Spring的配置文件:applicationContext.xml,配置CXFde bean
l web.xml中配置cxf的Servlet,添加Spring监听;
l 通过wsimport生成本地代理,访问WebService。