- 博客(30)
- 收藏
- 关注
原创 二分查找 (java实现)
package com.li.test01;import java.util.Scanner;/** * * @author lixiang * */public class BinarySearch { //存在返回数组下表,不存在返回-1 //递归实现 public static int binarySearch(int key, int[] ar
2017-09-25 16:15:00
400
原创 hibernate动态读取配置及创建数据源
public static Configuration initDBConfig(String dialect, String driver, String url, String user, String pwd){ Configuration cfg = new Configuration().configure("/hibernate.cfg.xml"); cfg.setProper
2017-09-19 16:18:44
1107
原创 java如何删除文件的前几行数据(不使用临时文件)
private List readAndRemoveFirstLines(File file, int lineNum) throws IOException{ List strList = new ArrayList(); RandomAccessFile raf = null; try{ raf = new Random
2017-09-19 16:06:17
5544
1
原创 gdb调试core分析jvm(JNI)奔溃原因
前几天服务(服务中使用了JNI调用了C++的so库)在并发测试几天后jvm突然奔溃,只在控制台打印出了一句话: terminate called after throwing an instance of '._0'。因为只根据这句话无法确定奔溃原因,于是查看linux系统日志,进入/var/log下,打开message文件,看到下面的话:Sep 16 13:44:04 localhost
2017-09-19 15:19:08
8360
原创 hibernate QueryPlanCache引发的heap区内存溢出
这个问题是很久之前解决的问题,今天在整理电脑资料的时候,发现了当时解决问题的一些截图,在此发记录一下,以免自己忘记。 有一个项目中用到了hibernate作为数据持久层,当项目完成,使用loadrunner进行并发测试的时候,当测试跑了几天,就因为内存溢出挂掉了。当对奔溃场景进行重现的时,利用了JvisualVM工具对其进行监控,发现了其heap区内存一直在持续增长,利用heap dump
2017-08-16 16:12:54
9258
4
原创 并发delete导致oracle死锁问题的解决
项目中有一个批处理任务,用来删除数据库中过期的数据(包括说话人的语音、模型、记录等),当程序被分布式部署后,就会有多个批处理线程同时进行删除,不过不同的线程,会根据元信息表得到不同的说话人信息,从而删除不同的数据,并不存在竞争的问题,但是,当项目使用oracle数据库在线上运行时,却频繁出现了ORA-00060: deadlock detected while waiting for resour
2017-08-16 14:57:33
10477
原创 JVM在SUSE下奔溃的原因
今天同事去厂商部署项目的时候发现项目启动一会便会奔溃,但是项目已经在其他的厂商和自己公司的云服务器上稳定运行了很长时间,且经过了大量严格的功能、并发测试,这让我有些诧异,通过了了解,知道了对方机器的操作系统为SUSE,同事发回了jvm奔溃时生成的hs_err_pid文件。通过查看hs_err_pid文件,发现以下信息较为关键。Stack: [0x00007f823bcfd000,0x00007
2017-05-24 19:38:46
1598
原创 Weblogic: Managed Server: java.lang.OutOfMemoryError: PermGen space
最近在一次上线过程中遇到了这个问题,在这里将解决方案记录一下。 当项目在weblogic中部署的时候,如果你是使用脚本启动managed server的话,则关于jvm 内存的相关设置去修改$DOMAIN_HOME目录下的env file即可,但是如果你是使用网页控制台的方式去启动managed server的话(通过nodeManger),这样的方式是不起作用的。 java.
2017-04-07 09:43:35
860
原创 Tomcat迁移到WebLogic 11g部署项目注意事项
最近将web项目从tomcat中迁移到weblogic中产生了很多问题,特此记录一下:Tomcat 迁移到 WebLogic 11g部署项目注意事项==============================1.不要依赖容器特有类库 现象:interface接口中使用了org.apache.catalina.tribes.util.Arrays.equals(byte[],b
2017-03-28 18:19:36
3340
原创 Too many open files问题解决
昨天项目上线的时候,服务器程序在读写文件的类中,频繁出现IOException---Too many open files的问题,出现这个问题的原因是:当前打开的文件句柄数超过了系统的默认值,调大系统的默认文件句柄数,程序正常,但是运行了一段时间后,程序再次出错,使用lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|grep pid命令进行查看,发现程序
2017-03-19 17:00:28
1249
原创 Java集合源码解析-ArrayList
从今天开始,会用一段时间对Java集合框架中的一些常用数据结构进行源码解析。首先入手的是ArrayList,部分的源码解析会以注释的方式出现。public class ArrayList extends AbstractList implements List,
2017-03-08 15:57:05
382
原创 oracle建库脚本
把之前写的项目中的oracle数据库的建库sql脚本放在这里备份一下。 -- create_db.smb.orcl.sql-- SHOULD EXECUTE WITH THE SUPPER USER 'sysdba'.-- Before executing this script, should create a directory for the tablespace, -- th
2017-03-07 11:30:56
612
原创 sqlplus执行语句报错:unknown command beginning解决方案
今天在sqlplus中执行一个建表脚本的时候,报错“SP2-0734: unknown command beginning "crea..." - rest of line ignored."。但是这个建表脚本在navicat客户端执行是正常的。因为sql脚本是在windows下编写的,一开始认为是windows和linux的一些格式符不同导致sqlplus不识别脚本中的命令,于是打开vim
2017-03-07 11:19:20
14024
转载 Struts2拦截器实现异常处理机制
Struts2拦截器实现异常处理机制在j2ee项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印到浏览器可能会让用户感觉莫名其妙,也有可能让某些用户找到搞定系统的方法。 所以不要在页面上输出错误信息,使用log日志的方式处理异常并记录异常。就拿struts2+hibernate+spring项目说明:通常一个页面请求到后台以后,首先是到action(也就是所谓mvc的contr
2017-03-03 15:42:40
543
原创 struts2 request.getInpustream()及multipart上传获取不到数据的解决方案
此问题是之前在项目中遇到并解决的,今天将其记录一下。项目中遇到的需求是,要在拦截器中将请求post过来的数据流进行解析,然后手动将解析的各参数其压到struts2的valueStack中,post过来的数据流可能是json串形式(客户端没有标记content-type)或者以multipart/form-data形式发送过来的语音文件(二进制)和json串两种情况。我的实现思路是,判断如果requ
2017-03-03 14:13:55
4027
1
原创 基于hibernate的BaseDao
1.BaseDao接口:package com.dear.simpler.dao;import java.io.Serializable;import java.util.List;import com.dear.simpler.db.utils.SPLDBException;/** * * @author lixiang * * 定义所有表的公共的方法接口 */pu
2017-03-03 11:02:45
754
原创 java程序启动脚本
在公司开发的系统包含多个服务进程,每个服务以单独的jvm进程的方式存在。为了节省存储空间以及对不同进程使用的jar包进行统一管理,要求所有服务使用的jar包都存放在同一个目录中,所有进程使用同一个jdk,每个服务有自己单独的目录存放主程序(服务启动逻辑和非共享逻辑)。我的db_service的启动脚本如下: #!/bin/bash#author:lixiang#the script
2017-02-21 15:46:51
1715
原创 postgresql死锁处理
今天在利用navicat对postgresql数据库某张表进行清空操作时,由于表的数据量太大,导致操作卡死,客户端奔溃。重启客户端后,想分页对表数据进行删除,但发现,怎么都操作不了,甚至单条数据也无法删除,猜想刚刚进行整表清空的sql进程还在,锁住了数据表,所以导致当前的操作无法进行。 1.检索出死锁进程的ID SELECT * FROM pg_stat_activity WHER
2017-02-21 14:33:51
3590
原创 自定义log4j日志文件命名规则
项目中的日志需要采用一致的命名规范和规范,命名规则为:项目模块标识_index_日期时间_日志级别.log,且每个级别日志文件放在单独的文件夹,且每个文件夹下日志的数量不得超过10个,当数量超过限制时,删除相对较旧的日志,保留较新的日志。但是发现log4j并不能满足此要求,于是根据log4j的API定义自己的FileAppender。 代码如下:package com.dear.simpl
2017-02-16 18:18:38
6808
原创 sleep()和wait()
sleep()和wait()的区别:1.sleep()方法是属于Thread类的。wait()方法则是属于Object类中的。2.sleep()方法导致了程序暂停执行的时间,让出cpu给该其他线程,但是它的监控状态仍然保持着,当指定时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。当调用wait()方法的时候,线程会释放对象锁,进入等待此对
2017-02-08 14:24:07
243
原创 添加oracle jdbc到maven仓库
maven中没有提供oracle jdbc驱动,如果要在项目中使用,则需进行手动安装。 步骤: 1.到官网下载oracle jdbc驱动到本地 2.执行maven命令: mvn install:install-file-Dfile={驱动所在本地目录/ojdbc.jar}-DgroupId=com.oracle -DartifactId=ojdbc6
2017-02-08 14:08:45
288
转载 java进程文件锁FileLock
import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; impor
2017-02-08 14:00:09
1951
原创 java使用枚举封装错误码及错误信息
使用枚举类型来封装project中所需要的错误码和错误信息,十分方便。 用法如下: package com.dear.simpler.dbservice;/** * * @author lixiang *使用枚举类型来封装异常码和异常信息 * */public enum DBServiceError { //RPC层调用错误码 DB_SERVICE_OK(2
2017-02-08 13:36:24
19812
2
原创 addShutdownHook
在项目中,为了加快程序的运行速度,将一些耗时的资源生产操作在后台异步进行,然后将生成的资源放到blockingqueue中,但是却面临这样一个问题,当程序因故重启时,内存中的blockingqueue中的资源,就会丢失,由于资源拥有时间特性,所以重启后的资源无法重新获取。所以需要一种手段,可以监控到程序被停止的动作,然后将内存中的blockingqueue持久化到硬盘,这样当程序重新启动时,就可以
2017-01-24 17:46:24
649
原创 监控重启中止线程
项目中有这样一个场景,后台中运行着几组不同的生产线程,每组后台线程负责生产不同的资源,填充到不同阻塞队列中,供业务代码异步调用,以提高程序运行速度。为保证资源的正常生产,需要保证每组后台生产线程出现异常终止情况时,可以被较为即时的拉起,这时就需要对后台生产线程进行心跳监控。以下为线程监控的代码:package com.dear.simple.queue;import java.lang.T
2017-01-24 17:14:54
531
原创 WebLogic配置JDBC数据源
1. 概述最近针对某银行的web项目上线,部署在他们的weblogic机器上,根据银行的规范,部署在WebLogic Server上的应用程序如果需要访问数据库,原则上需要通过WebLogic提供的JDBC连接池来管理数据库连接。在WebLogic Server中,通过配置JDBC数据源创建数据库连接。将数据源定向或部署到服务器或集群的时候,数据库连接就建立了。每个数据源包含一组池化的数据
2017-01-24 16:33:02
31480
1
原创 thrift无法判断连接失效的原因与解决方案
公司的软件系统使用thrift来进行系统内部各服务的沟通调用。thrift客户端采用了连接池的方式减少连接频繁创建销毁产生的开销。连接池之前一直存在无法即时判断连接是否有效的问题。今天抽空看了下thrift的源码,分析出原因如下: 我们在程序中判断连接是否有效时,调用的是TTransport类的isOpen()函数 一路调试跟踪查看TTransport的isOp
2017-01-18 18:05:14
5999
原创 问题记录---java程序内存溢出
前段时间公司更新了新版本的业务系统,并进行了并发测试,并发数仅为20人左右,测试跑到3天左右,系统就开始奔溃了,查看日志信息。错误如下: 系统使用了thrift框架来进行服务的发布,从日志中可以看出由于java.lang.OutOfMemoryError: GC overhead limit exceeded原因导致了thrift服务端负责select线程的异常退出,服务端无法接受到请求
2016-11-08 17:55:31
1020
原创 Java基础回顾---IO(字节流)
IO流是Java基础中很重要的一个知识点,由于IO流的种类繁多,所以在此对其知识点进行整理,方便自己的回顾,总结。1.IO流概述 IO是Input和Output的缩写,即输入、输出。其实所谓的输入、输出都是针对运行的程序(CPU、内存)来说的,输入就是向程序所在的内存输入、 输出就是从内存中向外输出,即输入和输出的参照为为程序(内存),这样就比较容易理解IO,IO关注的是原始数据的读
2016-08-13 17:57:40
628
原创 Java基础回顾---Socket
由于一直以来都在使用Java进行Web相关的开发工作,平常写的比较多的都是servlet,或者是基于servlet(或filter)的框架(springmvc、struts2等)。这些程序都需要运行在像tomcat、weblogic等web服务器(servlet容器)中,web容器负责端口的监听、HTTP请求的接收和返回、并发的处理等工作,程序员们更多的是负责业务逻辑的编写。这样虽然降低了web编
2016-08-11 22:28:37
550
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人