- 博客(31)
- 收藏
- 关注
原创 jdk/cglib动态代理学习笔记
jdk动态代理:基于接口实现,因此若目标类没有实现接口,则这种方式失效,需使用cglib动态代理实现。jdk动态代理使用步骤:创建目标接口创建目标类,实现目标接口创建代理类,实现InvocationHandler接口在具体使用处通过Proxy类获取代理对象,利用代理对象实现目标类的功能aop:aop是面向切面编程,主要是指对功能增强不需要修改源代码。 下面以aop来介绍上述过程:1.
2017-04-05 10:12:11
387
原创 数字签名和报文摘要学习笔记
数字签名:用于对发送的报文进行签名。认证发送方;发送方不可抵赖;接收方不可编造。主要使用公开密钥加密系统实现,如RSA;发送者通过私钥加密,接收方通过公秘解密。报文摘要:用于对发送的报文生成一个非常小的摘要信息。这个摘要信息保证原报文的完整性,即原报文只要有一位被改变,则摘要信息就会不匹配。保证完整性;单向散列函数。主要使用SHA-1和MD5来实现。 下面给出网上看到的一幅生动形象的
2017-03-17 09:46:31
6551
1
原创 IO/NIO学习笔记
基于字节流的IO:File。InputStream,FileInputStream。OutputStream,FileOutputStream。输入流使用示例:import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public cl
2017-03-16 10:36:15
319
原创 页码统计解题报告
题目要求统计0∼90\sim 9每个数字出现的次数,可以基于经典题(统计1∼n1\sim n中11的个数)来求解。首先给出几个概念: - 当前数位currNumcurrNum,低位数字构成的数lowerNumlowerNum,高位数字构成的数upperNumupperNum。引入它们的原因是对于当前数位,它能放置11的个数由这三个数确定。对于n=12345n=12345,若currNum=3cu
2017-03-14 16:35:55
452
原创 jdbc学习笔记
jdbc:java提供的用于支持数据库操作的一项技术。 java.sql包下的核心接口和类:Driver接口,每一个具体的数据库驱动都需要实现这个接口;DriverManager类,用于管理数据库驱动;Connection接口,通过DriverManager可以获取相应数据库的连接;PreparedStatement接口,对sql语句做预处理,比如将sql语句中的?号替换为具体值;Res
2017-03-12 09:14:33
333
原创 序列和解题报告
分析:序列和要求序列是连续的,也就是说它们之间相差1,符合等差数列性质,且要求是对这个序列求和,因此可以用等差数列的求和公式处理。等差数列求和公式:La1+L(L−1)/2La_1+L(L-1)/2,其中LL代表求和的项数,a1a_1代表等差数列首项。 -L L长度范围较小,可以由小到大对其进行枚举,如果找到一个可行的等差数列首项且LL满足题设范围,则结束处理。下面给出java代码:impor
2017-03-11 10:32:31
227
原创 innodb存储引擎学习笔记
innodb是当前mysql数据库的默认存储引擎,mysql早期的默认存储引擎是myisam。innodb特点:支持事务,行锁,外键,后期支持全文检索功能。myisam特点:不支持事务,表锁,支持全文检索功能。lucene:apache软件基金会的一个子项目,是一个开源的全文检索引擎工具包。myisam索引文件和数据文件是相互分离的,即不是聚集索引。 innodb索引文件和数据文件是同一
2017-03-11 10:02:36
231
原创 maven学习笔记
maven:一个项目构建、管理的工具,核心文件是pom.xml。 make工具:早期的c++项目构建工具,核心文件是makefile。 ant工具:another neat tool的缩写,早期java项目构建工具,核心文件是build.xml。maven本地仓库:~/.m2/ 支持在中央仓库下载本地仓库没有的依赖包。常用命令:mvn clean compile:编译项目。mvn clea
2017-03-10 11:21:39
206
原创 超级素数幂解题报告
如果从p进行枚举,则p∈[2,n√]p\in[2,\sqrt{n}],时间复杂度较高,会超时。 如果从q进行枚举,则q∈[2,log2n]q\in[2,\log_2 n],时间复杂度较低,可以AC。 下面给出在Java下的代码。import java.util.Scanner;public class Main { public static void main(String[] args
2017-03-08 15:31:19
506
原创 jni使用笔记
Java中的native方法需要调用c++的执行代码来实现,下面简单以一个hello world程序陈诉其步骤:在MyEclipse中创建一个类Main,其中包含一个native本地方法; 利用javah命令生成Main.h(注意设置java环境变量以及进入Main.java的目录下进行操作); 在vs2005下创建一个win32应用程序,选择DLL和空项目; 创建Main.h(复制第二步生成的M
2017-03-08 11:38:49
205
原创 socket编程学习笔记
基本tcp套接字编程流程图: socket()函数,指定通信的协议。 connect()函数,用于客户端与服务器建立连接。 bind()函数,用于将一个协议地址(Ipv4,Ipv6)赋予一个套接字。 远程过程调用RPC。listen()函数,用于将服务器创建的套接字从主动转为被动,并指定内核为相应套接字连接的最大连接数。 accept()函数,用于服务器从已连接队列队头返回下一个已完成
2017-03-05 11:10:55
265
原创 Future接口学习笔记
Future:java.util.concurrent包下的一个接口。 Callable和Runnable接口区别:Callable需要实现的方法是call(),Runnable需要实现的方法是run();call方法有返回值,run方法的返回值为void;call方法可以抛出异常,run方法不会抛出异常。Callable所在包为java.util.concurrent,Runnable所
2017-03-04 09:49:51
249
原创 单例设计模式笔记
单例模式类似计划生育,其保证类仅有一个实例,且对外提供访问该实例的接口。 所有类都有构造器,若不显示定义,则系统提供默认的构造器;若显示定义,则默认的构造器失效。 使用常规代码实现单例会导致代码臃肿,后期debug和修改时工作量加大。public class Singleton { private static Singleton obj; //obj设为static priva
2017-03-03 09:35:51
179
原创 ac自动机
kmp算法:单模式串匹配算法,fail指针用于在当前字符失配时,跳转到具有最长公共前后缀的字符进行匹配; Trie树:字典树(单词查找树)。 ac自动机:多模式串匹配算法;ac自动机通俗来说,就是Trie树中每个节点有一个fail指针,fail指针指向当前匹配失效时应跳转的位置,类似于kmp中的next数组;fail指针生成规则:fail指针置为父节点fail指针指向节点的相应next指向
2017-03-02 16:34:15
248
原创 select/poll/epoll学习笔记
IO多路复用,网络编程。 IO模型:阻塞式IO模型;非阻塞式IO模型,需要轮询内核,较少使用;IO复用模型,阻塞于select;信号驱动式IO模型:内核通知用户进程何时可以启动一个IO操作;异步IO模型:内核通知用户进程操作何时完成。POSIX标准:可移植操作系统接口,IEEE为各种在unix操作系统上运行的软件制定的一系列API标准的总称。 同步IO模型:导致请求进程阻塞,直到IO
2017-03-02 11:17:26
266
原创 Trie树学习笔记
Trie树:字典树,单词查找树特点:根节点不包含元素;将根到当前节点路径上的字符连接起来,即为该节点对应的字符串;每个节点的子节点对应的字符串各不相同;对n个字符串构建字典树,时间复杂度为O(n*len),len表示字符串的平均长度;对字典树查找的时间复杂度为O(len),len为待查找字符串的长度;以空间换时间。应用:在n个字符串中,判断是否存在某个字符串是另一个字符串的前缀;对
2017-03-01 15:25:45
243
原创 Lock学习笔记
可重入锁:线程可以再次获取自己已经占有的锁,即它是递归无阻塞的锁。读写锁:分成读锁和写锁,读锁可被多个线程共享,但是当有线程获取写锁时,其他线程不能获取读锁;写锁是排他锁,只能被一个线程占有。获取锁时涉及两个概念,公平锁和非公平锁。公平锁:在并发环境中,每个线程查看此锁维护的等待队列,若队列为空或者锁释放时自身位于队头,则获取锁,否则将该线程加入到等待队列。Lock lock = new Ree
2017-03-01 10:24:59
252
原创 grep,sed,awk学习笔记
grep工具:globally search a regular expression and print的缩写。正则表达式:基本,扩展(包含+, ?等符号)。grep用法:grep 选项 pattern 文件列表。字符串开头与行首,字符串结尾与行尾区别。普通环境,正则环境下字符串语义不同。以行为单位。sed工具:stream editor的缩写,流编辑器。sed用法:sed 选项
2017-02-28 11:57:42
298
原创 TCP协议学习笔记
TCP:面向连接的可靠的传输层协议,基于数据流(字节流),RFC编号。 特点:超时重传;解决乱序;TCP服务作用于发送端和接收端(一个巴掌拍不响),通过socket建立连接。 socket地址:ip地址+port号。 20字节TCP头部。 知名端口号(1024以内):20,21:FTP文件传输;22:SSH,远程登录,Telnet的替代品;80:HTTP,网络服务;443:HT
2017-02-27 11:03:34
259
原创 HashMap学习笔记
HashMap:实现了Map接口,底层数据结构是散列表。 特点:key和value允许null值;不是线程安全的。散列表主要成分:初始容量(槽位数),Java中设置为16;装载因子(定义为:存储元素数 / 槽位数,一般设置为0.75):如果用拉链法解决冲突,则装载因子对应一个链表的平均存储元素数;散列函数,Java中扩容采用2倍方式;冲突解决方案:主要有拉链法和开放寻址法(线性探查,
2017-02-26 11:58:34
298
原创 RMQ问题分析
RMQ问题是一类经典问题,在ACM编程竞赛中我们经常会见到它的身影。其中RMQ是Range Minimium/Maxmium Query的缩写形式,代表区间最小/最大值查询。问题描述为:对一个已知长度为n的数组a,给出多组区间[i,j],对于每个区间给出该区间的最值。该问题需要注意的地方是要处理多组数据。 常规解法是直接遍历区间[i,j]对应的数组元素,然后找出所求的最值。该方法在只有一次查询
2016-05-26 15:32:56
500
原创 tarjan算法介绍与分析
tarjan算法是一个求取有向图的所有强连通分量的算法,它是以算法提出者Robert Tarjan的名字来命名的。提出此算法的Robert Tarjan是普林斯顿大学的教授,同时他也是1986年的图灵奖获得者(图灵奖是计算机领域的最高荣誉,和物理、化学领域的诺贝尔奖是一个层次的奖项)。 在详细讲述该算法之前,我们需要明确几个概念(注意该算法的研究对象是有向图,无向图没有强连通等概念)。 1.
2016-05-20 15:03:53
907
原创 最短子数组
最短子数组问题描述: 给定一个数组a和数组长度n,求出需要排序的最短子数组长度,使得该子数组排好序时整个数组有序。测试样例:输入:a={1,4,6,5,9,10}, n=6输出:2问题分析: 由题意知,我们需要找到一个子数组使得当该子数组排好序时整个数组有序。这就是说原数组可以分为三个部分,即a=pqk,此时我们找到的子数组为q。p和r已经分别有序且p中所有元素小于q中任意一个元素,k中任
2016-05-13 16:19:59
1003
原创 0-1背包问题
public static void pack0_1(int[] v,int[] w,int cap) { int n = v.length; if(n<=0 || cap<=0) { System.out.println(0);//不存在物品或背包容量小于等于0 return; } int[] f = new int[cap+1]; for(int i
2016-05-08 14:48:03
338
原创 最长递增子序列(LIS)问题
public ArrayList LIS(int[] arr) //获取最长递增子序列 { ArrayList array = new ArrayList(); int len = arr.length; if(len==0) //数组长度为0 return array; int[] f = new int[len]; //记录以当前元素作为尾元素的最长递增子序列长度
2016-04-28 18:29:13
379
原创 判定链表是否有环
class ListNode //链表节点定义{ int val; ListNode next; public ListNode(int val) { super(); this.val = val; this.next = null; } }public boolean existCircle(ListNode head) //判定链表是否有环 { if(he
2016-04-21 21:36:14
409
原创 子数组最大和问题
需求: 对于一个有正数、负数或零的整数数组a[n],找出其中和最大的子数组。分析: 这是典型的子数组最大和问题,下面我们由浅入深考虑其处理方法:1.生活中很多事情,最直接的方法就是暴力处理,基于此我们给出如下处理策略。 我们可以通过一个对数组索引的两次循环来获得每一个子数组的开始与结束索引,再利用累计求和方式处理开始与结束索引
2016-04-16 15:17:33
435
原创 top-K问题详解
top-K 问题是一类经典的问题,它能解决许多海量数据处理相关的问题,例如在1亿个ip中找出访问次数前1000的ip,在海量搜索字符串中找出搜索频率排在前十的搜索字符串等等。下面我们由浅入深对其进行分析。我们可以将这类问题分为三个方向考虑: 1.将输入内容(假设用数组存放)进行完全排序,从中选出排在前K的元素即为所求。有了这个思路,我们可以选择相应的排序算法进行处理,目前来看
2016-04-09 17:03:28
13932
原创 将数组中元素排列为奇数在前偶数在后
处理策略是定义两个指针pHead,pTail并令其初始指向数组头节点和尾节点。pHead从前往后找应该放在尾部的偶数节点,pTail从后往前找应该放在头部的奇数节点,若pHead位于pTail之前则交换二者内容,否则结束处理过程。处理流程如下图所示。 对于用例: 1,2,4,5,3处理结果为:1,3,5,4,2 下面给出在java语言下的实现:
2016-03-31 11:58:40
5402
1
原创 linux文件权限
文件权限分为用户权限(user),组权限(group)和其他用户权限(other),我们可以通过 ls -l 文件名 这个命令来查看某个文件在文件所有者,文件所属组以及其他用户下的权限。 从上图中我们看到文件以长模式方式显示,其中第一部分包含十个字符的位置,一个破折号 - (dash)表示一个占位符,这十个字符分为两部分:
2016-03-17 17:20:25
252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人