- 博客(220)
- 资源 (1)
- 收藏
- 关注
原创 JDBC和数据库事务详解(二)
行锁假设每个数据行支持两种锁RS和RX;RS表示Row Share,行共享锁,不同的连接可以对同一行记录同时上RS锁,即行共享锁,多个连接被允许同时对一条记录上共享锁;RX表示Row Exclusive,即行排它锁,只能有一个连接可以对一行记录上RX锁。另外,锁可以升级,如果期望给一行数据上RX锁而当前行已经存在一个RS锁,那么RS所会升级成RX锁。但是反过来,锁不能降低级,如果已经存在RX锁,希望
2016-12-12 11:14:49 935
原创 JDBC和数据库事务详解(一)
现在还在写JDBC事务的文章,我觉得我一定是相当的Out了,现在主流的java应用,框架都是分布式的,各种分布式的事务,或者容器事务才是需要学习的重点,在这里谈JDBC确实有点不合时宜,但任何的java 开发人员,如果不能够深入的理解数据库的事务,那在做数据处理的方面就一定是有所欠缺的,另外确实很少有文章能够谈到JDBC和数据库事务的精髓,希望这里能够让你深度的了解到什么是JDBC的事务以及它和数据
2016-12-10 16:10:22 1668
转载 JPA与Hibernate的关系
1.JPA JPA全称: Java Persistence API JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA的出现? JPA的出现有两个原因: 其一,简化现有Java EE和Java SE应用的对象持久化的开发工作; 其二,Sun希望整合对ORM技术,实现持久化领域的统一。 JPA
2016-11-21 15:37:27 1341
原创 Wireshark抓取本地Tcp包(任何数据包)
没有任何一个程序员在做项目的时候不会遇到网络编程的问题,要解决这些问题除了对各种网络协议深入了解之外,还需要掌握各种网络分析工具的用法,不用多说wireshark绝对是这方面的翘楚,可惜的是,wireshark不能对本地接口(loopback,或者127.0.0.1)进行直接抓包。wireshark的工作原理这里面的原理其实很简单,wireshark可以通过操作系统来访问所有的网络adapter,通
2016-11-14 11:03:55 47677 1
转载 基于redis构建消息队列
一般来说,消息队列有两种场景:一种是发布者订阅者模式;一种是生产者消费者模式。利用redis这两种场景的消息队列都能够实现。定义:生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有。(常用于处理高并发写操作)发布者订阅者模式:发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情
2016-11-11 14:23:31 4157
转载 用 Redis 轻松实现秒杀系统
导论曾经被问过好多次怎样实现秒杀系统的问题。昨天又在CSDN架构师微信群被问到了。因此这里把我设想的实现秒杀系统的价格设计分享出来。供大家参考。秒杀系统的架构设计秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路:写入内存而不是写入硬盘、异步处理而不是同步处理、分布式处理用上这三招,不论秒杀时负载多大,都能轻松应对。更好的是,Redi
2016-11-11 14:12:14 1886
转载 可持久化数据结构
这篇文章的原文是英文的:http://www.codeproject.com/Articles/9680/Persistent-Data-Structures中文的翻译是转载的:Persistent Data Structures可持久化的数据结构Contents内容Introduction
2016-10-11 10:59:17 1403
翻译 EJB的约束
以下是你应该回避使用的一些Java特色,并且在你的EJB组件的实现代码中要严格限制它们的使用: 1.使用static,非final 字段。建议你在EJB组件中把所有的static字段都声明为final型的。这样可以保证前后一致的运行期语义,使得EJB容器有可以在多个Java虚拟机之间分发组件实例的灵活性。 2.使用线程同步原语来同步多个组件实例的运行。避免这个问题,你就可以使EJB容器灵活的在多个Ja
2016-09-26 16:12:59 985
原创 J2EE程序中如何正确的管理自己的custom线程
在这里,我们要讨论的话题包含了一个明确的前提,在J2EE程序使用线程。必须说明的是,在我们学习如何编写J2EE程序的时候,就被明确告知了,不允许在J2EE程序中自己创建和管理线程。具体可以参见http://www.oracle.com/technetwork/java/restrictions-142267.html。为何不能在J2EE程序中创建线程Container control. The co
2016-09-26 16:05:41 1162
转载 算法的时间复杂度和空间复杂度-总结
通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 算法
2016-09-18 17:09:49 1140
原创 用Maven Archetype Plugin快速创建项目
还在用mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common这样的方式来创建mvn项目吗?一长串需要输入的名字让人记着头疼,更要命的是,你不知道有哪些可用的archetypeArtifactId和对应版本。 各种插件和工具的目标本质上都
2016-08-17 10:22:50 1263
翻译 JPA2.1 中三个提升应用性能的新功能
经常在网上看到开发者们抱怨 JPA 性能低下的帖子或文章,但如果仔细查看这些性能问题,常会发现导致问题的根本原因大致包括以下几个:使用过多的 SQL 查询从数据库中获取所需的实体信息,即我们常说的n+1查询问题逐个更新实体,而不是使用单条语句进行更新使用 Java 应用程序而非数据库进行大量数据处理JPA提供了处理这类问题的方法,并给 J
2016-08-16 22:03:09 1829 1
原创 Hibernate中OneToOne延时加载的问题-解决方案
在上一篇文章中我们已经解释了延迟加载的问题。那我们该如何解决? 我觉得该分两个方面来讨论。 如果这是一个新的项目,在发布之前我们有足够的时间来修改数据的映射和关联关系、以及已经存在的sql语句,或者我们可以更改客户的数据库,并且不存在复杂的数据关系,可以做数据更新。那么我们可以通过修改两端的关联关系来解决这个问题。 但如果这是一个老的项目,已经发布,并且客户那里有大量的数据,那么建议是通过增加
2016-08-16 14:47:35 1541
原创 Hibernate中OneToOne延时加载的问题-现象和原因
关于OneToOne的延迟加载(fetch = FetchType.LAZY),我觉得是非常需要注意的一个问题。它不只是存在于Hibernate中,其他的ORM persistence framekwork也有同样的问题,至少我用过的eclipseLink也是一样的。这个问题之所以重要,是因为它在背后偷偷的降低了查询数据库的效率,但又极难发现,特别是当你进入一个老项目,发现软件的运行效率极低时,你就
2016-08-16 13:57:11 3565 1
转载 Hibernate 延迟加载剖析与代理模式应用
Hibernate 的延迟加载(lazy load)是一个被广泛使用的技术。这种延迟加载保证了应用只有在需要时才去数据库中抓取相应的记录。通过延迟加载技术可以避免过多、过早地加载数据表里的数据,从而降低应用的内存开销。Hibernate 的延迟加载本质上就是代理模式的应用,当程序通过 Hibernate 装载一个实体时,默认情况下,Hibernate 并不会立即抓取它的集合属性、关联实体所以对
2016-08-15 16:56:28 1156
转载 httpclient和异步httpclient
本文偏重使用,简单讲述httpclient,其实在网络编程中,基于Java的实现几乎都是包装了socket的通信,然后来模拟各种各样的协议;httpclient其实就是模拟浏览器发起想服务器端的请求,而这种更加类似于JS的请求或页面的POST、GET,不过这种数据的返回一般需要得到有意义的数据,才方便做其他的交互,否则得到一个页面结果,全是标签了,毕竟不是浏览器,所以我们用httpclient更多
2016-08-11 13:35:41 14139
原创 SocketInputStream.socketRead0 导致线程hangs的解决方案
SocketInputStream.socketRead0需要通过Connection eviction policy去监控。不仅要设置timeout,还需要close掉已经expire的connection
2016-08-10 14:42:04 22359
原创 如何Troubleshooting当Java Application发生死锁或Hangs
前言作为一个Java开发人员,特别是资深的Java开发人员(其实只要是一个软件工程师),你一定会遇到过app挂起的问题,在英文里,挂起叫做Hangs。前一天你的软件还运行的好好的,突然就没有任何响应,无论是log file还是stand output都没有任何响应。上司或者客户给的压力让你的心焦黑。在不知道是什么问题的情况下,重启一下应用服务器,发现问题突然解决了。但没过几天,又像幽灵一样死亡缠绕。
2016-08-09 16:13:11 1237
转载 Locking and Concurrency in Java Persistence 2.0
The Java Persistence API (informally referred to as JPA) provides a plain old Java object (POJO)-based persistence model for Java EE and Java SE applications. It handles the details of how relationa
2016-08-08 11:28:51 1061
原创 AngularJs渲染完毕后执行指定操作
最近用AngularJs做了一个Web的项目,AngularJs的设计真的很适合CRUD。真的建议很多内部的提高生产力的工具转而采用Web,以AngularJs为框架。 通常的Web程序,我们需要在页面加载完成的时候执行某些特定的操作,在没有AngularJs的时候一般采用的是监听onLoad event。但在使用AngularJs来渲染页面时,onLoad不能保证AngularJs已经完成了页面
2016-07-27 11:17:07 28959 2
原创 用IntelliJ自动检查并生成serialVersionUID
网上这样的教程很多了,打算再写一篇这样的博客是因为有些东西还是可以更详细一些。不同的地方体现在检查上面。设置先打开Intellij的settings. 在Inspections(检查)中把Serializable class without ’serialVersionUID’勾上: Setting->Inspections->Serialization issues->Serializable
2016-07-25 12:56:17 5235
原创 Hibernate用Query删除数据表中的数据的问题(EntityManager.clear())
前段时间把项目中的JPA从EclipseLink换成Hibernate。这其中遇到了很多问题,也记录了一部分在其他的文章中。这里介绍一个UT中遇到的问题。 当时的测试是忘H2数据库中插入多项数据,然后用Query的方式删除,assert读出来的数据是null。这个测试用例在EclipseLink下面是可以通过的,但换成Hibernate之后发现数据仍然可以读出这个数据。 测试用例如下: @Tes
2016-07-21 14:27:09 11653
原创 Node里面的require和RequireJs的区别
作为一个前端的新手,总是诧异于js的模块载入方式,看到了通过requireJs提供的require()命令之后,发现node也是通过类似的方法加载模块,我就好奇,这两个是一个东西吗?用electron写了一个web desk app,想通过CI上建一个job刷新repository,然后通过网页可以在team里面随时share软件的进度和功能,发现通过浏览器直接打开的这个app没法加载其他的库:
2016-07-20 11:28:44 8314
转载 Javascript模块化编程(三):require.js的用法
转自(http://www.ruanyifeng.com/blog/2012/11/require_js.html)这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战。我采用的是一个非常流行的库require.js。一、为什么要用require.js?最早的时候,所有Javascript代码都写在一个文件里
2016-07-20 11:27:36 3934
转载 YAML 语言教程
转自(http://www.ruanyifeng.com/blog/2016/07/yaml.html)编程免不了要写配置文件,怎么写配置也是一门学问。YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。本文介绍 YAML 的语法,以 JS-YAML 的实现为例。你可以去在线 Demo 验证下面的例子。一、简介YAML
2016-07-20 10:29:42 3846
转载 什么是大数据
大数据,官方定义是指那些数据量特别大、数据类别特别复杂的数据集,这种数据集无法用传统的数据库进行存储,管理和处理。大数据的主要特点为数据量大(Volume),数据类别复杂(Variety),数据处理速度快(Velocity)和数据真实性高(Veracity),合起来被称为4V。大数据中的数据量非常巨大,达到了PB级别。而且这庞大的数据之中,不仅仅包括结构化数据(如数字、符号等数
2016-07-20 09:36:36 3025
转载 Ad hoc query
(转载自http://tonyguxu.blog.51cto.com/1148713/470862,转载请标明出处) 即席查询(Ad Hoc)是用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的选择生成相应的统计报表。即席查询与普通应用查询最大的不同是普通的应用查询是定制开发的,而即席查询是由用户自定义查询条件的。 在数据仓库领域有一个概念叫Ad hoc queries
2016-07-19 17:57:37 5127
转载 Javascript模块化编程(二):AMD规范
这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块。(接上文)七、模块的规范先想一想,为什么模块很重要?因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模
2016-06-30 08:19:09 2834
转载 Javascript前端模块化
随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂。网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑。Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。但是,Ja
2016-06-30 08:15:36 3088
原创 js生成.zip压缩包并保存到本地
近日用electron平台做了一个web desktop的小程序,通过这个小程序可以生成并校验服务器各个节点需要的ini文件。因为服务器的节点繁多,所以会生成多个ini文件,也就提出了一个需求,把这多个ini文件压缩成一个zip返回给用户。 这是我的第一个js的web desktop app,忍不住上来分享一下:var ini = require('ini');var zip = new req
2016-06-28 22:04:48 15919
转载 web service开发时,wsdl2java 客户端代码的生成
在用到web service时,如果是调用自己开发的web service还好,可以有一个方法的接口或参数对象实体类什么的,但如果是调用第三方的服务,除了得到web service服务地址的wsdl文档外,没有任何实质性编码的东西,写原生调用太麻烦,这时就需要自己写一个方法的接口类。这个,目前已经有比较成熟的工具,可以自动生成,下面作一下简单的介绍。 apache的wsdl
2016-06-15 09:32:43 2014
原创 Jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件
虽然现在已经有各种智能的IDE可以为我们生成jar包,war包,ear包,甚至带上了自动替换,部署的功能。但一定会有那么些时候,你需要修改或是替换jar包,war包,ear包中的某个文件而不是整个重新生成。比如说,你有一个ear包已经部署到客户的服务器上,运行了有那么久了,版本也很老,但一个让你头痛的bug需要立即在客户那里fix,这个ear包很大,并且客户的网络很慢,你也没有那么老的整套代码,但是
2016-06-14 11:21:46 13823
原创 如何用maven运行特定的test case
最近碰到了一些特殊的问题,有些test case在IDE里面运行是可以pass的,但通过Maven运行就一定会出问题。这里不深入讨论,这类测试一般都是和entity manager有关的。今天记录一下在这过程中,maven的一些测试特性:如何用Maven运行特定的test case。运行一个单独的test在开发过程中,你有可能需要重复的单独运行一个test class。要用mavan做到这个,需要把
2016-06-07 13:33:36 28923
原创 Could not enlist in transaction on entering meta-aware object
不知道大家有没有遇到过类似的问题,hibernete没法open connectionCaused by: javax.ejb.EJBException: Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not open connection
2016-06-07 13:03:37 3445
原创 实战记录:从EclipseLink迁移到Hibernate上(2)调试错误
尝试去运行我们的代码,你会发现各种形形色色的问题:@Id一上来就不能persisntence,先看看问题,column: id (should be mapped with insert=”false” update=”false”)Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: co
2016-06-03 18:00:25 6412
原创 实战记录:从EclipseLink迁移到Hibernate上(1)替换
前言正在做的项目因为用了比较老,所以JTA居然还用老古董的EclipseLink,这玩意曾经把我坑惨,比如: JBoss会莫名其妙的偶现’eclipseLink Module not found’而导致PU无法persistence,从而导致整个EAR无法deploy的问题(虽然我不确定是不是和EclipseLink有关)。又比如: 系统中集成了jBpm之后,由于jbpm用的是另外一个datas
2016-06-03 17:29:32 7442 2
原创 Postman使用小技巧 - 用Postman生成Request代码
Postman这款工具可以让你很方便的测试你的Web API,那如果你实在是没办法用Postman,必须手写代码,又或者你有别的需求是Postman没法实现的,你必须写一个特殊的script或App来测试你的接口,那这时候是不是Postman就没有用武之地了? 我来个你share一个小技巧吧,管不管用你说的算。 假设我现在要这样来测我的接口: 我们要设置用户名和密码: 我们要设置参数和H
2016-06-03 10:51:22 83218 15
原创 最强PostMan使用教程(2) - 在test suite中运行test case
我们已经知道如何用Postman组装并发送消息,那我们如何根据需求用Postman来做测试呢?在这开始之前,我们先来看看Postman的左边面板:这里包含了History和Collection,我们可以在History里面看到我们曾经发送过的HTTP Request, 我们可以很方便的通过点击上面的项重新构建我们的request。而右边的Request Builder面板上,还有两个按钮,Pre-r
2016-06-01 17:58:46 64672 33
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人