- 博客(44)
- 收藏
- 关注
原创 使用Logback进行日志管理
最近才开始在项目中使用logback,有一种相见恨晚的感觉,因为它很轻易的满足了我的几个需求: 1. 配置简单,易于上手 2. 一个日志文件中只能某一个级别的日志 3. 一个类中可以指定多个不同的日志,并且生成的每个日志文件中只包含其本身的内容 4. 可以关闭或者打开某几个包的日志,并且可以设置不同的包
2016-11-30 23:31:36
2013
原创 spring中的lifeCycle(生命周期)
spring的生命周期.1. 容器启动,实例化所有实现了BeanFactoyPostProcessor接口的类。他会在任何普通Bean实例化之前加载.2. 实例化剩下的Bean,对这些Bean进行依赖注入。3. 如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用4. 如果Bean有实现BeanFactor
2016-11-25 00:20:39
3729
原创 PO、VO、BO、DTO、POJO、DAO的含义与联系
J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了(听过老罗对这种现象的批判的朋友会会心一笑)。 首先声明偶也不是什么高手,以下总结都是自己的体会。不对之处请您多指教。PO:persistant object持久对象最形象的理解就是一个PO就
2016-11-13 16:04:56
786
原创 Spring任务调度器之Task的使用
最近发现真的凹凸了,Spring升级到3后原来已经自带任务调度器了,之前还一直使用着Quartz。其实也不是Quartz不好,只是相比之下,使用Spring task真的简单很多,无论是理解还是使用。 Spring Task提供两种方式进行配置,正如大家所想吧,还是一种是annotation(标注),而另外一种就是XML配置了。但其实这里我觉得比较尴尬,因为任务调度这样的需求,通常
2016-11-08 22:48:09
1548
原创 正确的打日志姿势
程序中记录日志一般有两个目的:Troubleshooting和显示程序运行状态。好的日志记录方式可以提供我们足够多定位问题的依据。 这周看过很多代码,对里面的日志记录方式有些想法,今天是周末,也想总结下我对这个问题的看法。日志记录大家都会认为简单,但如何通过日志可以高效定位问题可不是简单的事情。这里我会写下面三个方面的内容,主要是举例为主,提醒我以后得注意这些方面 怎样记日志可以方便Trouble
2016-10-26 22:14:20
619
原创 IntelliJ + Maven + 内Jetty 实现热部署项目
热部署的好处:代码修改后,不必关闭Jetty再重新启动,Maven启动时间不太和谐。 环境:IntelliJ IDEA11.1.4, Maven2.2.1 Jetty8.1.5 步骤:1,在pom.xml文件中配置jetty插件的参数:scanIntervalSeconds,我的pom.xml片断如下:
2016-10-07 18:45:57
7750
原创 javahome和classpath详解
很多人在初学Java的时候经常会被书中介绍的一堆环境变量的设置搞得头昏脑胀,很多书中都会在初装JDK的时候让他大家设置JAVA_HOME环境变量,在开发程序的时候设置CLASSPATH环境变量,而很多人并不理解这两个环境变量的作用,我们来分别进行详细的阐述。首先是JAVA_HOME环境变量,我们先来掌握这个环境变量的设置内容,JAVA_HOME这个环境变量的设置内容是JDK的安装目录,比如说您
2016-09-11 23:08:37
1035
1
原创 servlet3.0学习之文件上传
在servlet技术出现之后不久的那段时期,文件上传仍然是一项比较具有挑战性的任务,包括在服务器端解析原始的http响应。值得庆幸的是,Apache Software Foundation 于2003年发布了它的开源Commons FileUpload 组件,并且很快就受到了世界各地servlet/jsp 爱好者的追捧。 几年之后,servlet的设计者才意识到文件上传的重要性
2016-08-30 21:47:52
593
原创 java挑战高并发(14): LinkedBlockingQueue和ConcurrentLinkedQueue的区别及用法
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。注:什么叫线程安全?这个首先要明确。线程安全就是说多线程访问同
2016-08-20 22:33:43
6164
原创 servlet listener(用法+代码)
Listener采用了观察者模式(24种模式之一),Listener是servlet的监听器,他可以监听客户端的请求、服务器端的操作等, 通过监听器,可以自动激发一些操作。比如:监听在线用户数量当增加一个HttpSession时,就会激发sessinCreated(HttpSessionEvent sce)方法,这样就可以给在线人数+1了。常见的监听器接口:ServletC
2016-08-16 16:56:03
1206
原创 java挑战高并发(13):synchronized对内存可见性起到的作用
加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另外一个重要的方面:内存可见性。我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且还希望确保当一个线程修改了对象状态后,其他线程能够看到该变化。而线程的同步恰恰也能够实现这一点。 内置锁可以用于确保某个线程以一种可预测的方式来查看另一个线程的执行结果。为了确保所有的线程都能看到共享变量
2016-08-12 23:37:33
1810
原创 设计模式 之 模板方法模式
使用场景 考虑一个计算存款利息的例子。假设系统需要支持两种存款账号,即货币市场(Money Market)账号和定期存款(Certificate of Deposite)账号。这两种账号的存款利息是不同的,因此,在计算一个存户的存款利息额时,必须区分两种不同的账号类型。 这个系统的总行为应当是计算出利息,这也就决定了作为一个模板方法模式的顶级逻辑应当是利息计算。由于利息计算
2016-08-11 17:22:51
1154
原创 java挑战高并发 之(11):生产者—消费者模型(含代码)
生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。 这里实现如下情况的生产--消费模型: 生产者不断交替地生产两组数据“姓名--1 --> 内容--1”,“姓名--2--> 内容--2”,消费者不断交替地取得这两组数据,这里的“姓名--1”和“姓名--2”模拟为数据的名称,“内容--1 ”
2016-08-09 23:20:29
1739
原创 java挑战高并发 之(10):使用wait/notify/notifyAll实现线程间通信的几点重要说明
在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调用notify()方法或notifyAll()方法),在线程中调用notify()方法或notifyAll()方法,将通知其他线程从wait()方法处返回。 Object
2016-08-09 00:08:15
1184
原创 Mac 用RVM安装ruby 2.0.0的时候出现错误
Mac 用RVM配置ruby环境的时候出现错误:LuohandeMacBook-Pro:~ LuohanCC$ rvm 2.0.0 --defaultruby-2.0.0-p643 is not installed.To install do: 'rvm install ruby-2.0.0-p643'LuohandeMacBook-Pro:~ Luohan
2016-08-03 17:50:29
3158
原创 java挑战高并发(9):死锁
当线程需要同时持有多个锁时,有可能产生死锁。考虑如下情形: 线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2。接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B正持有lock2,因此线程A会阻塞等待线程B对lock2的释放。如果此时线程B在持有lock2的时候,也在试图获取lock1,因为线程A正持有lock1,因此线程B会阻塞等待A对lock
2016-08-03 17:00:08
1994
原创 java挑战高并发(8):使用synchronized获取互斥锁的几点说明
在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。 采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个锁
2016-08-02 00:13:06
3605
1
原创 基于物品的协同过滤算法
基于物品的协同过滤算法(ItemCF)是业界应用最多的算法,主要思想是利用用户之前有过的行为,给用户推荐和之前物品类似的物品。基于物品的协同过滤算法主要分为两步:1)计算物品之间的相似度。2)根据物品的相似度和用户的历史行为给用户生成推荐列表。第一步的关键点在于计算物品之间的相似度,这里并不采用基于内容的相似性,而是去计算在喜欢物品i的用户中有多少是喜欢物品j的,这样计算的前提是用
2016-07-31 23:58:39
1114
原创 为什么匿名内部类参数必须为final类型
1) 从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自然的2) 为什么JAVA中要加上一条限制:只能访问final型的局部变量?3) JAVA语言的编译程序的设计者当然全实现:局部内部类能访问方法中的所有的局部变量(因为:从理
2016-07-31 00:19:00
3621
5
原创 java挑战高并发(7):java 线程中yield的用法
Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。 yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。 结论:yield()从未导致线程
2016-07-30 12:22:11
2027
原创 基于用户的协同过滤算法实验
本代码是在学习《推荐系统实践》一书时完成的,参考了原书作者项亮的算法完成了程序,并且可运行和测试,本部分是基于用户的协同过滤算法的实现,测试结果如下图,基本与书上结论一致,希望对于学习推荐的同学有帮助,本人刚接触,如果有什么错误,请大家多多指教。1 实验结果2 实验代码 基于用户的协同过滤算法-参考《推荐系统实践》一书,作者:项亮'''Created on 201
2016-07-29 23:57:35
2803
原创 java挑战高并发(6):Runnable和Thread实现多线程的区别(含代码)
Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势: 1、可以避免由于Java的单继承特性而带来的局限; 2、增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的; 3、适合多个相同程序代码的线程区处理同一资
2016-07-29 23:43:15
3139
1
原创 springmvc中从servletRequest中去post发送过来的数据取不到的问题
客户端发送一个http请求,请求方式是post,现在我不想用ServletRequest.getParameter("")这种方式取数据,而想从输入流servletInputStream中得到所有的请求体字符串,再自行转换(各位读者别管这种方式在生产环境中会不会用,在这里只是用于学习讨论)。客户端发送的http请求数据如下:POST /webInterface/testPost HTTP/
2016-07-27 17:34:20
7970
5
原创 java挑战高并发(5):volatile变量修饰符的使用与问题
在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值
2016-07-27 13:58:01
1610
原创 java过滤敏感词实现字符串替换功能
很多网站都需要对于某些关键字或者某些敏感词汇进行过滤替换的功能。比如在输入框中输入些js 脚本,或者输入些政府类型的词汇等都是不允许的,但是你不能限制用户的自由。所以对于网站的过滤功能就显得很有必要了。对于一般的网站使用来说,不需要非常复杂的过滤算法等比较高端的实现。简单的用 filter 和 HttpServletRequestWrapper 就可以实现。HttpServletReque
2016-07-26 17:50:09
8317
原创 java7新特新(一) Try-with-resources (TWR)
Try-with-resources (TWR) 在处理IO的代码中,我们会使用大量的try...catch()...finally...语法,其中会在finally进行IO的close操作,写过python的都知道,这种操作可以使用try-with-resources操作,幸运的是Java7也有了此特性,比如之前的语法:private void test(URL
2016-07-26 01:07:08
5701
原创 Java挑战高并发(4):守护线程与线程阻塞的四种情况
守护线程 Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检测仅剩一个守护线程,而用户线程都已经退出运行时,VM就会退出,因为没有如果没有了被守
2016-07-25 20:12:11
2155
原创 在解析XML文件的时候报出异常,应该有为伪属性名!!!
先看我的一个xml文件的片段: 爱是最大权利 C:\chengxu\eclipse\Clock\music\爱是最大权利.mp3 笔记 C:\chengxu\eclipse\Clock\music\笔记.mp3 无声仿有声 C:\chengxu\eclipse\Clock\music\无声仿有
2016-07-25 16:23:54
5428
原创 java字符串 输入流 相互转换
/*** 将一个字符串转化为输入流*/public static InputStream getStringStream(String sInputString){if (sInputString != null && !sInputString.trim().equals("")){try{ByteArrayInputStream
2016-07-25 15:55:40
5917
1
原创 java-web之servlet中的线程安全问题
一,servlet容器如何同时处理多个请求。Servlet采用多线程来处理多个请求同时访问,Servelet容器维护了一个线程池来服务请求。线程池实际上是等待执行代码的一组线程叫做工作者线程(Worker Thread),Servlet容器使用一个调度线程来管理工作者线程(Dispatcher Thread)。当容器收到一个访问Servlet的请求,调度者线程从线程池中选出一个
2016-07-25 00:01:14
3922
原创 Java挑战高并发(3) 线程挂起、恢复与终止的正确方法(含代码)
挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件——其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁。另外,在长时间计算期间挂起线程也可能导致问题。下面的代码演示了通过休眠来延缓运行,模拟长时间
2016-07-24 23:07:16
2366
原创 Java挑战高并发(2):线程中断
]使用interrupt()中断线程当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行。下面一段代码演示了休眠线程的中断: public
2016-07-24 01:03:25
2241
原创 Java挑战并发(1):可重入内置锁
每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁。获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置锁是可重入的,因此如果摸个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味着获取锁的操作的粒
2016-07-24 00:47:46
1183
原创 自己动手写javaweb mvc框架 之 项目准备
从今天开始我将通过使用Java语言实现一个完整的框架设计,这个框架中主要内容有第一小节介绍的Web框架的结构规划,例如采用MVC模式来进行开发,程序的执行流程设计等内容;第二小节介绍框架的第一个功能:路由,如何让访问的URL映射到相应的处理逻辑;第三小节介绍处理逻辑,如何设计一个公共的 调度器,对象继承之后处理函数中如何处理response和request;第四小节至第六小节介绍如何框架的一些辅助功
2016-07-22 23:11:09
3484
原创 正则表达式之密码效验(检验密码是含有小写字母、大写字母、数字、特殊符号的两种及以上)
背景: 公司的新项目需要做一个注册功能,涉及到密码匹配。规则为密码含有小写字母、大写字母、数字、特殊符号的两种及以上。答案:采用正则表达式如下: ^(?![A-Z]+$)(?![a-z]+$)(?!\d+$)(?![\W_]+$)\S{6,16}$解析:
2016-07-22 15:11:35
25037
2
原创 java造轮子之自己写简单的HTTP服务器
大概介绍一下原理吧,浏览器打开网页可以简单分为3个阶段:1.通过socket向服务器发送一个符合一定格式的请求字符串(里面包含了用户输入的网址),比如:Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Encodinggzip, defl
2016-07-20 23:38:00
2897
原创 论线程安全的单例模式
一 懒汉式第一种懒汉式 (性能消耗最大)(不是线程安全,只是用来做讨论)public static synchronized Singleton getInstance() { if (single == null) { single = new Singleton(); } retu
2016-07-19 22:20:10
1462
原创 springboot下配置junit测试环境
项目中使用到了spring_boot,我想在项目中写一些单元测试,但是由于对springboot 不熟悉并且springboot的中文资料非常的少,所以花了很长的时间才把springboot的junit测试环境搭好,虽然很简单,但是也发出来给大家参考一下吧。一 准备1 首先编写一个测试环境基类BaseDaoTestpackage com.gome.superman.web.bussin
2016-07-19 21:47:47
18379
3
原创 linux网络编程之 select 机制的使用
select机制简介: 在传统的网络编程方式中,在使用accept和recv等阻塞函数的时候,会造成应用程序阻塞,进而造成程序响应不及时(比如服务器在等待一个客户端发送数据,那么没有被等待的另一个客户端此时发送给服务器的数据不会被立即处理,造成客户等待)和CPU使用率低(经常等待数据,造成CPU经常没有活干)等等问题。为了解决传统网络编程方式存在的这些问题,linux设计者们提出了IO复用的
2016-01-11 16:42:35
2060
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人