四种读取XML文件读取的办法
1.DOM生成和解析XML文档
为XML文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构。
优点:整个文档树在内存中,便于操作;支持删除,修改,重新排列等。
缺点: 把整个文档调入内存,存在很多无用的节点,浪费了时间和空间。
2.SAX为解决DOM
1、边读边解析,应用于大型XML文档
2、只支持读
3、访问效率低
4、顺序访问
3.DOM4J生成和解析XML文档(解析工具) 性能最好 SUM的JAXM也大量采用DOM4J
HIBERNATE采用DOM4J
虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。
为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。
在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。
DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.
4.JDOM
JDOM
优点:①是基于树的处理XML的Java API,把树加载在内存中
②没有向下兼容的限制,因此比DOM简单
③速度快,缺陷少
④具有SAX的JAVA规则
缺点:
①不能处理大于内存的文档
②JDOM表示XML文档逻辑模型。不能保证每个字节真正变换。
③针对实例文档不提供DTD与模式的任何实际模型。
④不支持与DOM中相应遍历包。
最适合于:JDOM具有树的便利,也有SAX的JAVA规则。在需要平衡时使用
如何防止Sql注入
有两种办法
1.第一种消毒,通过正则匹配过滤请求数据中可能注入的SQL。
2.使用预编译手段preparedStatemengt。
DB第一范式,第二范式,第三范式
第一范式:没一列属性不可再分,没有多值属性
第二范式:在符合第一范式的基础上,存在主键
第三范式:在符合第二范式的基础上,非关键字独立于其他的非关键字,并且依赖关键字。不能存在传递依赖。
**public、protected、private、**默认权限
private:用于修饰类和方法,只允许该类访问。
默认:只允许在同一个类和同一个包中进行访问。
protected:用于修饰类和方法,允许该类和子类访问以及同一个包中访问。
public:用于修饰类和方法,允许该包下面和其他包的访问,即在全局范围都可以访问。
数据库事务
事务的特性:
原子性:事务是不可再分的;
一致性:事务的实行前后,数据库的状态保持一致;
隔离性:事务的并发访问,事务之间的执行互不干扰;
持久性:事务结束后数据永久保存在数据库中。
什么是脏读?
脏读就是一个事务读取了该数据并且对该数据做出了修改,另一个事务也读取了该修改后的数据但是前一个事务并没有提交,这是脏数据。
读取到保存在数据库内存中的数据。
什么是不可重复读?
一个事务:在同一个事务中读取同一数据,得到的内容不同。一个事务读取另外一个事务更新的数据,导致二次的查询的数据不一致。
什么是幻读?
幻读是当事务不独立发生的。比如一个事务删除了所有数据,另一个事务又插入了一条,那么第一个事务的用户会发现表中还没有修改的数据行。一个事务读取到另外一个事务提交的数据,导致查询的结果不一致的问题。
数据库的隔离级别:
Read uncommitted:未提交读:三中都有可能发生
Read committed :已提交读 避免脏读
Repeated read:重复读:避免脏读 不可重复读
Serializable:串行化读 都可以避免
WebService到底是什么
一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。
其实可以从多个角度来理解WebService,从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
WebService平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,WebService平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service平台必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用,这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。
java中锁的优化
1.减少锁持有的时间,可以减少其它线程的等待时间,不能让一个线程一直控制着某个锁不释放,导致竞争加剧。
2.减少锁的粒度,合适的锁的代码块,可以减少竞争,控制锁的范围。
3.锁分离,将锁安功能划分,比如读写锁,读读不互斥,读写互斥,写写互斥,保证了线程的安全,提高了性能。比如阻塞队列中的take和put
4.锁粗化,如果对同一个锁不停的进行请求,同步和释放,这个消耗是非常的大的,所以适当的时候可以粗化。
5.锁消除,编译器可以帮助我们优化比如一些代码根本不需要锁。
虚拟机内的锁优化
1.偏向锁:偏向当前已经占有锁的线程,在无竞争的时候,之前获得锁的线程再次获得锁时,会判断是否偏向锁指向我,那么该线程将不用再次获得锁,直接进入同步块。
2.轻量级锁:偏向锁失败后,利用cas补救补救失败就会升级为重量级锁。
3.自旋锁:会做空操作,并且不停地尝试拿到这个锁。
java中一亿个数找前10000个最大的
先利用Hash法去重复,去除大量的之后 然后等量的分成100份 用小顶堆 来获得10000个,再把所有的1万个都合在一起就OK
java中线程的状态
java中的线程的状态有5种(新建、就绪、运行、阻塞、结束)
1.新建:创建后尚未启动的线程处于这种状态,新建出一个线程对象。
2.就绪状态:当针对该对象掉用了start()方法,该线程等待获取CPU的使用权
3.运行状态:在就绪状态下,获得了CPU处于运行状