
JAVA 基础
文章平均质量分 72
犀利的蛙
安安
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程池 allowCoreThreadTimeOut 小知识
关于线程池:allowCoreThreadTimeOut(true) 的小知识点1.背景 检查别人程序发现堆内存2G,但是常驻内存res到3.2G了,经过一系列操作发现线程特别多(1000+), 当然有重复创建线程池的问题。除此之外,由于是数据域应用,为了加速查询,会定时把数据库数据load到缓存,还不部分是应付也个页面N次(20+)查询,希望能支持稍微高一点的并发响应。所以连接池各方面设置比较大。(线程会持续吃RES内存,不释放,默认1M)2.操作 期望线程数减少,定时任务用了线程线程之后,原创 2020-06-16 20:57:35 · 10110 阅读 · 0 评论 -
排序算法(一)--冒泡排序
/** * 冒泡算法 复杂度:N^2 * 原理:相邻两个元素比较,大的一个后移 * 比如:站一排的士兵,从左第一个开始跟右边的比较,高就交换位置,然后左的第二个又与第三个比 较,类推 比如:水里面的气泡,大的肯定是浮水最快的 (见图) * * @author @Ran */public class Bubble extends AbstractSort<...2013-09-08 15:55:08 · 112 阅读 · 0 评论 -
排序算法(0)--初步设计
最近复习了下,基本算法,发现会写,但是在应用上还是不好,也就是说不知道在什么地方用什么武功最合适! 然后想写一个工具类,可以针对常用的东西进行排序,然后计算它们的效率问题: 1.首先我定义了一个接口:/** * 排序接口 * @author @Ran * */public interface Sort { // 基本排序方法 public <T ...2013-09-08 13:48:31 · 89 阅读 · 0 评论 -
JAVA 深入集合-- ArrayList
一、介绍 ArrayList 简单的说就是一个存放元素的集合,也是一个数组,只是提供了大量方便我们操作的方法, 比数组的优势就是不用我们手动维护了,相信大家用得比较多了,还是看代码吧! 二、源码介绍 2.1 类: public class ArrayList<E> extends AbstractList<E> ...原创 2013-09-06 21:51:54 · 119 阅读 · 0 评论 -
Java深入集合--linkedHashMap
LinkedHashMap 源码介绍 一、介绍: LinkedHashMap 和hashMap 功能类似,都是维护的键值对集合,连遍历 以及方法都类似,唯一的区别在于hashMap 里面的元素是根据hash值来决定存放位置的,是无序的,而LinkedHashMap 维护的是一个按顺序存放的双向链表,是有序的。 所谓的双向链表其实是链表的一种。链表:相当于元...2013-08-28 00:23:06 · 115 阅读 · 0 评论 -
Java 深入集合--HashMap
一、HashMap介绍: 上面一篇介绍了hashTable,这里HashMap的作用就不多啰嗦了。HashMap 实现的功能和hashTable 差不多,具体实现和功能我们从源码进行分析。 二、源码分析:2.1 类实现: public class HashMap<K,V> extends AbstractMap<K,V> i...原创 2013-08-18 21:48:30 · 120 阅读 · 0 评论 -
JAVA深入集合--HashTable
一、介绍 Hashtable 是早期实现的一个哈希存储方式的类,也就是键值对(key-value)的存放方式。实际上市键值对 和 链表的组合,相对同步安全的。 特点: 1.是key-value 方式存放的,并且是无序存放的 2.线程安全的,性能较低 3.key 不允许重复,否者会覆盖数据...原创 2013-08-04 10:57:54 · 175 阅读 · 0 评论 -
Java程序员应该了解的10个设计原则
转自:http://www.cnblogs.com/leehongee/archive/2012/03/18/2404760.html 面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的...原创 2013-12-30 18:09:22 · 111 阅读 · 0 评论 -
JAVA深入集合--Stack
Stack 介绍: 其实Stack 还真没啥好介绍的,主要的知道一点:(LIFO)后进先出 就行了。这东西是线性表(感觉是数据按直线方式存放)一种。直接看源码吧,很简单。 publicclass Stack<E> extends Vector<E> { public Stack() { } ...2013-07-26 23:16:20 · 115 阅读 · 0 评论 -
排序算法(二)--插入排序
/** * 插入排序 复杂度:N^2 * 原理:默认第一个元素为起始位置 从第二个元素开始向前比较,如果前一个元素小,则不移动位置,否则交换 一直重复比较,直到不再交换 * 比如:有a,b,c,d,e,f,g 士兵,然后a 站开始,让b 和a 比较,b>a 不变,b<a 交换 同理让c 和 b 比较,再和a 比...原创 2013-09-09 11:10:24 · 97 阅读 · 0 评论 -
反射(一)----原理机制和基本运用
JAVA 反射的应用还是比较多,这里会对反射的一些原理进行介绍,然后我们才知道如何使用和优化。至 于反射的使用介绍,这里就不在过多叙述了,API 上都介绍得有。 要了解JAVA 反射的原理,我们还得对类在虚拟机中的一些知识做简要介绍... 一、类文件的结构: 1.1 虚拟机加载Class文件过程: 在JVM 类加载机制的博客里面我介绍过整体流...2014-02-27 20:26:42 · 199 阅读 · 0 评论 -
排序算法(三)--选择排序
package sort;import java.util.Arrays;import java.util.Random;/** * 选择排序:复杂度N^2 * 原理: 1.默认从第一个数i开始,假设是最小数,赋值给一个变量tem * 2.用而二个开始和这个数比较,如果小于该数,则赋值给这个变量 * 3.循环第二层循环结束,就交...2013-09-12 14:02:14 · 121 阅读 · 0 评论 -
源码分析-ConcurrentLinkedQueue
一.序言 现在并发操作中都要求高效,都在想怎么去掉直接加锁带来的线程切换的开销,这里分享自己对concurrentLinkedQueue 的部分代码的理解,看看他无锁的原因,了解大神的设计思路。关于 它的工作流程 参考JDK1.6 :http://ifeve.com/concurrentlinkedqueue/ 本文分析基于JDK 1.7.0_79 二.源码分析...2015-06-02 11:22:01 · 155 阅读 · 0 评论 -
lockInterruptibly 和 lock
一.序言 ReentrantLock 锁有好几种,除了常用的lock tryLock 等意外,其中有个lockInterruptibly 用的比较少,看了下JDK 说明,官方的东西总是那么不容易理解,这里用稍微通俗的语言来描述一下。 二.栗子 1.我们用张三和李四 吃水果来描述: 如果张三吃苹果->休息5秒->吃香蕉 ...2015-05-17 11:19:38 · 395 阅读 · 0 评论 -
available 的理解和一些使用
一、序言 这里主要介绍一下我们在读文件流,如何转换成byte[],从而引出这几种写法的一些原理和应用场景的区别。 二、测试代码 2.1 我们先看代码,代码的作用是获得将文件流转换成byte 数组,我们暂时不管它的正确性,代码也精简了很多。 // 这个用缓冲流 public static byte[] getByte1(String n...2014-04-21 18:49:01 · 3008 阅读 · 1 评论 -
设计模式-享元模式
一、介绍 享元模式,英文(Flyweight),这个翻译还是比较OK的。网上解释比较多,也比较抽象,用我的话来说这个模式就是一个公共,共享的区域,里面放了一些大家可以共用的对象。因为我们知道,创建对象是需要花费时间,占用内存的,但是有些对象常常不需要那么多,仅仅需要一个,或者多个就足够了,也就是不需要到哪儿使用就开始创建。上面解释有点像单例模式,其实单例也是享元 特殊的一种,都...原创 2013-10-19 11:59:35 · 107 阅读 · 0 评论 -
生产者与消费者 模型理解,与简单设计
题外话:从中秋请假到现在,接近20天的假期,让我彻底耍晕了,现在来写代码,发现始终没进入状态。以后建议大家没特殊事情,还是别请这么久啦,分开耍,有利于放松,也不至于耍得忘乎所以。我是一直想做互联网 并发 大数据方面的工作,有兴趣才有动力嘛,企业开发感觉活力不强,太多重复的劳动,还是喜欢研究 解决问题,有挑战的东东。线程这块,生产者与消费者模型一直是很经典的东东,这里我用自己的理解分享一下,有误...原创 2013-10-13 23:17:36 · 641 阅读 · 0 评论 -
源码分析--ThreadLocal
一、序言 这里会分析ThreadLocal 源码以及原理,和它的正确使用原则,还有我们应用过的地方,帮助大家更深刻的理解这个类的使用。 ThreadLocal 在JDK1.2的版本的就提供的一个类,它提供了一种新的思路去解决多线程问题,同时ThreadLocal 不是线程类,仅仅是一个线程的变量副本,他是如何来实现这个功能的呢,我们从源码进行分析。 ...2014-03-23 22:15:05 · 113 阅读 · 0 评论 -
多线程(三)--线程安全与锁
一、引言: JAVA 是一个多线程并发的语言,现在只要有点经验的JAVA程序员,对于多线程、并发等词汇相信并不陌生,但是对于具体的运行原理,很多也都没深入,这里我也分享一部分自己的经验,主要对于线程安全以及锁的一些机制原理,进行介绍。关于线程的基本知识点,前面也说过了,可以了解一下。 1.1 什么是线程安全? 这里我借“JAVA 并发实践”里面的话:当多...2014-03-13 00:03:20 · 650 阅读 · 0 评论 -
排序算法(四)--快速排序
package sort;import java.util.Arrays;import java.util.Random;/** * 快速排序 * 复杂度:N^2 * 原理:1.任意选定一个元素key,然后将大于key 的元素放右边,小于key 的元素 放左边 * 2.将key左右两边元素分别看成一个新的数组,然后再用1 步骤方法,重复,直到只有一...2013-09-17 16:15:59 · 135 阅读 · 0 评论 -
JAVA深入集合--Vector
一.介绍Vector 本质是一个数组,当然他具有数组的通过下标访问等特性,同时这玩意儿继承了 AbstractList 。当然他具有了集合的通用功能,同时他实现了 List,RandomAccess,Cloneable ,Sertializable 接口。这里大概提一下RandomAccess 和 Cloneable 。1.1 RandomAccess 可以让其拥有随机访问的能力,...2013-07-26 23:13:19 · 119 阅读 · 0 评论 -
java 加密解密简单实现[转]
感谢:http://blog.youkuaiyun.com/qiushyfm/article/details/4464512 加密算法有很多种:这里只大约列举几例: 1:消息摘要:(数字指纹):既对一个任意长度的一个数据块进行计算,产生一个唯一指纹。MD5/SHA1发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要,最后进行比较摘要是否相同。2:单匙密码体制:DES:比较简便高效,密...原创 2013-07-22 23:15:37 · 247 阅读 · 0 评论 -
多线程 (multithreaded)介绍
了解计算机的人都知道,系统我们可以同一时刻运行多个程序,还能了解 多个CPU(双核,多核心)等称呼。这里简单记录一下 信息。 进程:当我们运行一个程序,比如QQ 等工具,那么这就算是一个进程,你在win 环境下,对任务栏,点击右键,打开任务管理器,就能看见你自己打开的进程,也叫一个任务。 多进程:这个类似,比如你可以开打QQ,同时打开魔兽,也就多个任务,就是多进...原创 2013-03-29 10:18:33 · 1314 阅读 · 0 评论 -
JAVA的位操作符
最近几种进制,加上各种位操作符,发现都比较模糊,不能完全掌握,这里就再熟悉熟悉。 1.按位操作符 : 按位操作符是用来操作基本数据类型中的单个bit,即二进制位,会对两个参数执行布尔代数运算,获得结果。 与(&)运算: 1&1 = 1, 1&0 = 0, 0&0 = 0; 这里相当于做乘法,也可以认为男女双方都有感觉才有结果。...2013-03-28 16:52:53 · 112 阅读 · 0 评论 -
JAVA 常用进制 转换
那天别人问了一道题:0010>4和 010>>2.类似这个,发现都以忘了,然后又从新补充,记录一下。JAVA 中几个进制的表示: 二进制:比如 int a = 1;表示应该是 0001.是四位的,但是前面的全是0可以不显示。由于二进制表示太长了,因此一般不用,eclipse 也不会显示出来。听说JDK 1.7 以上 二进制是0b 开头,由于JDK BUG 原因,...2013-03-28 11:17:45 · 265 阅读 · 0 评论 -
JAVA 注解(Annotation) ,模拟自动创建表
hibernate 里面通过注解,映射等手段,可以自动生成表,现在模拟实现。随便学学注解如何使用。首先,我们要定义几个注解:Table 用于定义表名字,类型使用Type import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.ann...2013-03-22 17:34:00 · 407 阅读 · 0 评论 -
JAVA 注解(Annotation) 基础
JAVA中的注解:也叫元数据,提供了一些形式化的方法,在使用的时候方便。 JAVA SE5 中,我们用过的注解:@Override : 重写方法的的时候,需要,可以检查你覆盖父类放有错没@Depreccated: 使用了又此注解的元素,就有警告信息,@Suppress Warings :忽略一些警告 注解的基本定义: @Target(ElementType.F...2013-03-22 17:16:16 · 90 阅读 · 0 评论 -
mysql 批量操作
批量操作一般都会有,这里也分享一下我的经验:用的早期的:mysql-connector-java-5.0.7-bin.jar关于连接代码看:http://greemranqq.iteye.com/admin/blogs/1830200 这里我发现的问题是:1.将自动提交设置成false, 不然批量操作会失去效果2.网上说:jdbc.url = jdbc:mysql://l...2013-03-15 17:47:06 · 168 阅读 · 0 评论 -
JDBC 连接
分享一下,以前的JDBC 连接工具: import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/** * 常用的 prope...2013-03-15 17:33:02 · 143 阅读 · 0 评论 -
设计模式— 策略模式
上节我们谈到做一个鸭子的游戏,把共有的方法(游泳)作为父类,有变化的行为(飞,叫)作为接口,进而实现,满足各类鸭子去使用,那那我们该如何将它组合起来呢?首先,在Duck 里面加入 FlyBehaviour 和 QuackBehaviour的实例变量,为接口类型,再添加可以执行的方法performFly 和performQuack. public class Duck { pu...2013-03-13 15:59:21 · 171 阅读 · 0 评论 -
多线程-初识(一)
线程有多种实现的方式:1.实现 Runnable 接口,实现run() 方法2.继承Thread类,调用start() 方法3.实现Callable 接口,实现call() 方法,和第一种 差不多,call 方法要抛出异常,run 不会 假设,我们现在有个通知数数的任务,从1-100。 public class Advice implements Runnabl...原创 2013-03-29 10:18:48 · 125 阅读 · 0 评论 -
多线程-常用方法(二)
线程大家都会创建,这里介绍一些常用的方法。 休眠(sleep):就和睡觉一样,假设工作是一个任务,你需要休息,因此你可以什么都不做,休息你指定的时间,接着工作。 public class MyWork implements Runnable { static int num = 24; @Override public void run() { while...原创 2013-03-29 17:31:08 · 114 阅读 · 0 评论 -
多线程-并发与锁
我们讲到多线程,就离不开并发,讲到并发,就离不开安全性,这里我们先来实现一个简单功能能:买票系统 这是票的类,以及买票的方法:public class DBTicket { // 假设存放100张票 private static int num = 100; public static void setNum(int num) { DBTicket.num = n...原创 2013-04-11 10:56:05 · 269 阅读 · 0 评论 -
设计模式-观察者模式
观察者模式,老生常谈的问题了,相信大家都有所了解,这里用通俗的语言简单介绍一下! 概念: 顾名思义,"观察者" 存在,必然存在被观察者。JAVA 里面我们统称为对象。简单的说:比如1.你参加高考,肯定会有监考老师,那么老师就是观察者,你就是被观察者。2.当然观察者可以不只一个,可以存在多个观察者,同理被观察者也可以是多个,也就是多个老师观察多个学生。3.老师肯...2013-07-20 09:01:06 · 111 阅读 · 0 评论 -
静态方法加锁,和非静态方法加锁区别
今天看了到有意思的题:在静态方法上加锁 和 非静态方法加锁 有什么区别,从而再次引出锁机制的一些理解。先看方法: // 这是一个很简单的类,里面共享静态变量 num,然后一个静态 和 非静态方法,都加上锁// 我们假设有两个线程同时操作这两个方法,那么数据能互斥吗? public class Walk { public static int num = 100; ...2013-11-13 09:43:51 · 810 阅读 · 0 评论 -
JAVA 文件批量修改
今天,有人想把项目里面所有的Root文件,里面的文本含有sj 的全部变成FCX,由于文件个数很多,所以写了小例子一次改变。 写得很简单,其中涉及安全,文本大小,编码等都没做处理,修改也写得比较死。 其次:如果要批量修改文件名,批量删除,批量移动位置等等 操作类似,都可以进行改变。 import java.io.BufferedReader;import java.i...2013-06-07 21:29:23 · 422 阅读 · 0 评论 -
JSP 页面编码介绍
1. pageEncoding: <%@ page pageEncoding="UTF-8"%>jsp页面编码: jsp文件本身的编码 2. contentType: <%@ page contentType="text/html; charset=UTF-8"%>web页面显示编码: jsp的输出流在浏览器中显示的编码 3. html页面cha...原创 2013-06-15 18:20:50 · 272 阅读 · 0 评论 -
JAVA 数组复制
先看一道题: public static void main(String[] args) { int[] a = { 1, 2, 3, 4, 5 }; int[] b = new int[10]; for (int i : b) { b[i] = 0; } System.arraycopy(a, 0, b, 0, 5); for (int i : ...原创 2012-12-18 23:34:41 · 146 阅读 · 0 评论 -
JAVA 虚拟机加载顺序
首先我们看一道题: static int x, y; static { int x = 5; } public static void main(String args[]) { x--; myMethod(); System.out.println(x + y + ++x); } public static void myMeth...原创 2012-12-18 22:36:22 · 145 阅读 · 0 评论 -
java 中浮点类型常用计算方法
JAVA 浮点类型的计算,我们知道会出现失精的问题,如果程序中经常使用,我的做法是,写一个工具类,专门处理类似问题。 /** * * @Description:两个double类型相加,返回Double * @createBy:qiqiang ran * @createdate:2012-3-23 * @param double d1 * @para...原创 2012-07-31 11:35:48 · 341 阅读 · 0 评论