- 博客(98)
- 收藏
- 关注
原创 Semaphore -- 同步辅助类3
可以控制某个资源可被同时访问的个数,通过构造函数设定一定数量的许 可,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许 可。 用法介绍:package com.grace527.test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;
2017-12-04 21:37:07
300
原创 CyclicBarrier -- 同步辅助类2
CyclicBarrier 过来就是:循环的障,这个类是一个可以重复利用的 障类。它允许一组线程相互等待,直到全部到达某个公共障点,然后所有 的这组线程再同步往后执行。用法介绍与CountDownLatch不同,CountDownLatch的作用是使得某些(即在await之前并加入countDown操作的)进程在其他进程执行之后在进行;CyclicBarrier 则是使得一组线程相互等待,公共屏障点
2017-12-04 21:14:19
261
原创 CountDownLatch -- 同步辅助类
CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。 可以阻塞其他进程。使得人为的 控制某些进程结束后,其他进程再得以继续。 例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。用法介绍CountDownLatch相当于一个计数器。用一个给定的数值初始化CountDownLatch之后,数器就从这个值开始倒计数,直到计数值达到零 。
2017-12-04 19:47:27
329
原创 双重校验锁 -- Java并发编程中的陷阱
今天在回顾volatile关键字的使用的时候,突然注意到其适用场景里有这么一个概念:双重校验锁(DCL)那么他是什么意思呢?其实它的起源可以联系到单例模式的应用。import java.util.*;class Singleton{ private static Singleton instance; //... private boolean flag; private Sing
2017-12-04 11:32:35
1918
原创 复杂算法的复制 -- 漫漫算法路 刷题篇
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)/*public class RandomListNode { int label; RandomListNode next = null; Rand
2017-12-03 22:08:01
245
原创 MySQL 必知必会
一直就有对MySQL 知识点进行小结的想法,现在就着《MsSQL必知必会》这本书,对相关的内容进行一些整理,主要记录实际操作性的内容,对于概念性的内容,就不再赘述了。(主要是自己的想法,所以有些部分会选择忽略) 一、 MySQL 的连接使用1.1 数据库连接方式1.2 基本信息查看二、数据库基础使用2.1 表的基本操作2.2 插入、更新、删除数据三、数据检索3.
2017-11-26 10:26:26
393
原创 2017秋招总结
2017秋招个人总结 随着三方协议的寄出,本人的秋招也正式告一段落了,对于此次的秋招感觉,有悲有喜,悲的是最终还是没有拿到非常心仪offer,“喜”的是在秋招的“洗礼”中终于看见了自己该努力的方向。 作为一个非985、非211、无实验室经验、无校园奖项的普通二本学生,一路跌跌撞撞,秋招的过程虽然痛苦,但亦是收获满满的。因此,在这里为自己秋招之旅做一个总结。 首先在前面说明一下,这不是
2017-11-10 14:22:27
499
原创 随堂笔记 -- Servlet 与 CGI 的比较
Servlet 与 CGI 的比较 和CGI程序一样,Servlet可以响应用户的指令(提交一个FORM等等),也可以象CGI程序一样,收集用户表单的信息并给予动态反馈(简单的注册信息录入和检查错误)。 然而,Servlet的机制并不仅仅是这样简单的与用户表单进行交互。传统技术中,动态的网页建立和显示都是通过CGI来实现的,但是,有了Servlet,您可以大胆的放弃所有CGI(perl?php?
2017-11-10 12:08:53
280
原创 错误笔记 -- Statement、PreparedStatement和CallableStatement
1.Statement、PreparedStatement和CallableStatement都是接口(interface)。 2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。 3. Statement接口提供了执行语句和获取结果的基本方法; PreparedS
2017-11-10 11:50:29
374
原创 可查询最值的栈 -- 算法小结
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。import java.util.Stack;public class Solution { Stack<Integer> sta = new Stack<Integer>(); Stack<Integer> min = new Stack<Integer>(); public void push(int
2017-10-08 21:53:23
265
原创 句子的逆序 -- 算法小结
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。给定一个原字符串A和他的长度,请返回逆序后的字符串。测试样例: “dog loves pig”,13 返回:”pig loves dog”编程思路:由于是对每个单词进行逆序 所以只需改进一下字符串逆序的方法(进行两次逆序,第一次在每个单词内部,第二次在整个字符串之间)
2017-10-08 19:14:09
434
原创 词语变形 -- 算法小结
对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。给定两个字符串A和B及他们的长度,请返回一个bool值,代表他们是否互为变形词。测试样例: “abc”,3,”bca”,3 返回:true编程思路:由于只需要比较两个字符串中出现的 字符次数是否相同,我们只需要为每个字符设置一个标志(初始为0),每次A
2017-10-08 18:25:04
348
原创 Java 邮件发送系统 -- JAVA 进阶
这里将之前在个人网站上使用的一个邮件系统的核心代码整理了一下package com.grace527.util;import java.io.IOException;import java.io.PrintWriter;import java.util.Properties;import javax.mail.Address;import javax.mail.Authenticator;i
2017-10-07 21:42:53
394
原创 相邻两数最大差值 -- 算法小结
有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。测试样例: [1,2,5,4,6],5 返回:2编程思路:本题明显就是先排序,后比较相邻数的差值,因此有很多的实现方法,首先就是排序,我们可以选择复杂度较低的算法,这里使用类似桶排序的思想,我们不是以元素的值来计算桶的数目,而是元素个数来划分
2017-10-05 17:10:58
3521
转载 HTTP请求报文和HTTP响应报文 -- JAVA 基础
HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和 响应报文。 HTTP请求报文 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。or<request-line><headers><blank line>[<request-bo
2017-10-04 13:45:42
5018
原创 Synchronized 、Atomic 对比 -- JAVA 进阶
在学习CAS无锁时候,总是难免拿来与Synchronized进行比较。 首先先来说一下无锁算法的基本思想: 要实现无锁(lock-free)的非阻塞算法有多种实现方法,其中 CAS(比较与交换,Compare and swap) 是一种有名的无锁算法。CAS, CPU指令,在大多数处理器架构,包括IA32、Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V的
2017-10-01 22:59:02
1526
转载 深入研究java.lang.ThreadLocal类 -- JAVA 进阶
一、概述 在使用多线程的时候,肯定会接触到ThreadLocal,那么ThreadLocal是什么呢?第一眼看见的时候,容易把它理解为本地线程,其实它并不是一个Thread,而是ThreadLocalVariable(线程局部变量)。线程局部变量(ThreadLocal)的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,每一个线程都可以独立
2017-10-01 22:38:17
552
原创 最短子数组练习题 -- 算法小结
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。测试样例: [1,4,6,5,9,10],6 返回:2 编程思路:找出需要排序的最小子数组,只需要找到需要移动位置的离两边位置最近的元素即可,我们知道离最左边需要移动元素就是第一个比前
2017-09-29 22:18:30
240
原创 LinkedBlockingQueue 与PriorityQueue -- JAVA 基础
1、LinkedBlockingQueue:基于链接节点的可选限定的blocking queue 。 这个队列排列元素FIFO(先进先出)。 队列的头部是队列中最长的元素。 队列的尾部是队列中最短时间的元素。 新元素插入队列的尾部,队列检索操作获取队列头部的元素。 链接队列通常具有比基于阵列的队列更高的吞吐量,但在大多数并发应用程序中的可预测性能较低。 blocking queue说明:不接受nu
2017-09-22 21:55:00
1183
原创 相反数(当前数取反后与原数相加) -- 漫漫算法路 刷题篇
时间限制:1秒 空间限制:32768K 为了得到一个数的”相反数”,我们将这个数的数字顺序颠倒,然后再加上原先的数得到”相反数”。例如,为了得到1325的”相反数”,首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略。例如n = 100, 颠倒之后是1. 输入描述: 输入包括一个整数n,(1
2017-09-22 15:49:22
825
原创 魔法币 -- 漫漫算法路 刷题篇
小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。 魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币 魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币 小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要
2017-09-22 14:34:13
603
原创 集合扩容问题(ArrList为例,常用集合扩容机制) -- JAVA 基础
今天刚好遇到一个关于集合扩容的问题,正好借机整理一下: 当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,如果是每增加一个元素就复制一次,这无疑使效率大大降低。这里的扩容就是当当前容器的内存不足或者达到加载因子设置的系数时,需要对容器进行一次合适的扩建(加载因子的系数小于
2017-09-22 12:47:06
16204
9
原创 有序矩阵查找 -- 算法小结
现在有一个行和列都排好序的矩阵,请设计一个高效算法,快速查找矩阵中是否含有值x。给定一个int矩阵mat,同时给定矩阵大小nxm及待查找的数x,请返回一个bool值,代表矩阵中是否存在x。所有矩阵中数字及x均为int范围内整数。保证n和m均小于等于1000。测试样例: [[1,2,3],[4,5,6],[7,8,9]],3,3,10 返回:falseimport java.util.*;publ
2017-09-21 17:49:22
1158
原创 三色排序 -- 算法小结
题目描述:有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2]import java.util.*;public class ThreeColor { public int[] sor
2017-09-21 16:53:48
465
原创 二叉树中和为某一值的路径 -- 漫漫算法路 刷题篇
题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;
2017-09-21 16:19:45
183
原创 java.lang包中不能被继承的类 -- JAVA 基础
java.lang包中不能被继承的类: public final class Byte public final class Character public static final class Character.UnicodeBlock public final class Class public final class Compile public final class Do
2017-09-20 17:08:03
866
转载 Java ANT 的使用 -- JAVA 基础
Java_Ant详解 1,什么是ant ant是构建工具 2,什么是构建 概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个 3,ant的好处 跨平台 –因为ant是使用java实现的,所以它跨平台 使用简单–与ant的兄弟make比起来 语法清晰–同样是和make相比 功能强大–ant能做的事情很多,可能你用
2017-09-16 20:08:53
259
原创 Java虚拟机解析篇之 -- 内存模型
第一、程序计数器(PC) 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来取下一条需要执行的字节码指令,分支、跳转、循环、异常处理、线程恢复等基础功能都需要这个计数器来完成 注:程序计数器是线程私有的,每条线程都会有一个独立的程序计数器第二、Java栈(虚拟机栈) J
2017-09-15 22:32:45
261
原创 关于这两天收集的知识点(未整理) -- JAVA 基础
构造方法是一种特殊的方法,具有以下特点。 (1)构造方法的方法名必须与类名相同。 (2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。 (3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。 (4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。 (5
2017-09-15 22:20:43
171
原创 Java File类的简单说明与使用 -- Java 基础
File类的一下常用方法和说明 1.访问文件名相关方法: String getName(); 返回此File对象所表示的文件名和路径名(如果是路径,则返回最后一级子路径名)。 String getPath(); 返回此File对象所对应的路径名。 File getAbsolutePath(); 返回此File对象所对应的绝对路径名。 String getParent(); 返回此File对
2017-09-14 17:32:40
185
原创 有序数组合并 -- 算法小结
有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。 编程思路:根据题意 我们可以从后往前依次比较两个数组尾部(此时指A 的m位置)元素的大小 取大者存于A(此时是m+n)中最终有序数组尾部相应位置 直至B中元素完全加入A
2017-09-13 13:48:47
334
原创 重复值判断(堆排序的非递归使用) -- 算法小结
请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。给定一个int数组A及它的大小n,请返回它是否有重复值。测试样例: [1,2,3,4,5,5,6],7 返回:true编程思路:我们知道堆排序在空间复杂度要求为1的时候效率是最好的 但是如果使用递归的话 由于函数栈的使用 空间复杂度变成了O(logN) 因此需要设计一个非递归的堆排序import java.uti
2017-09-13 13:16:15
1995
原创 小范围排序(巧用堆排序) -- 算法小结
已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。测试样例: [2,1,4,3,6,5,8,7,10,9],10,2 返回:[1,2,3,4,5,6,7,8,9,10] 编程思路:由于知道了使每个元素有序
2017-09-13 11:27:07
294
原创 Java 关键字和保留字 -- JAVA 基础
关键字:Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等。 保留字:为java预留的关键字。现在还没用到,但是在升级版本中可能作为关键字。 访问控制: private 私有的 protected 受保护的 public 公共的 类、方法和变量修饰符 abstract 声明抽象 class 类 extends 扩允,继承 final终
2017-09-12 14:47:34
341
原创 Java 多线程编程 wait()、notify() -- JAVA 进阶
假设如下代码中,若t1线程在t2线程启动之前已经完成启动。代码的输出是(B)public static void main(String[]args)throws Exception { final Object obj = new Object(); Thread t1 = new Thread() { public void run() {
2017-09-12 14:12:14
213
转载 Java 并发编程 内存模型 volatile关键字 -- JAVA 进阶
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与
2017-09-12 13:37:30
193
原创 Java 内部类的使用 -- JAVA 基础
1.为什么使用内部类? 使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现, 对于内部类都没有影响 1.1.使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,使用内部类还能够为我们带来如下特性: (1)、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独。 (2)、在单个外围类中,可
2017-09-11 21:56:24
194
转载 Java RTTI -- JAVA 进阶
运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息。多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的。Class类Class类是”类的类”(class of classes)。如果说类是对象的抽象和集合的话,那么Class类就是对类的抽象和集合。每一
2017-09-11 10:35:16
206
原创 Servlet知识点小结 -- JAVA后台
init方法: 是在servlet实例创建时调用的方法,用于创建或打开任何与servlet相的资源和初始 化servlet的状态,Servlet规范保证调用init方法前不会处理任何请求 service方法:是servlet真正处理客户端传过来的请求的方法,由web容器调用, 根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法 destory方法:是在s
2017-09-11 10:30:40
257
原创 堆排序 -- 算法小结
对于一个int数组,请编写一个堆排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路:首先以整个数组建一个大根堆,然后将根与最后一个结点交换,最后一个即有序,接着大根堆的大小-1,重新建立大根堆,重复上述过程 直至堆大小为1…..import java.util.*;public cla
2017-09-10 12:37:32
193
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人