自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

RojerAlone的博客

笨鸟先飞,脚踏实地。

  • 博客(101)
  • 资源 (1)
  • 收藏
  • 关注

原创 一次 CPU 飙高异常的处理

一次 CPU 飙高异常的处理某天,同事告诉我说我在公司负责的一个服务 CPU 占用过高,达到 700% 多(多核 CPU),猜测可能是 gc 比较频繁,让我调一下堆大小,调整过后重新部署,发现 CPU 使用率降至正常水平(6% 左右)。过了几天想起来这个事,登上服务器看下服务是否正常,发现 CPU 使用率又到了 500% 多,于是就通过一些工具命令排查问题。初步排查是否是 gc 问...

2018-08-22 22:14:57 1748 2

原创 TCP 三次握手和四次挥手

TCP 三次握手和四次挥手三次握手 如图所示,客户端主动打开连接,服务端被动打开连接。连接过程如下:客户端发送连接请求报文段,同步位 SYN = 1,同时选择一个初始序号 seq = x(TCP 协议规定,SYN 报文段,也就是 SYN = 1 的报文段不能携带数据,但是会消耗一个序号),这时客户端进入 SYN-SENT (同步已发送)状态。服务端接收到连接请求报文段以后,如果同意连接,则向客

2017-09-04 15:03:16 475

原创 Semaphore

SemaphoreSemaphore 是 Java 并发包中提供的一个工具类,翻译过来为“信号量”,作用是控制并发线程的数量。类的结构先来看一下 Semaphore 的结构: Semaphore 中有三个个内部类:类 Sync 继承了 AbstractQueuedSynchronizer,重写了 tryReleaseShared 方法,还有一些在 Semaphore 中用到的辅助方法,都是对线程

2017-09-02 11:49:03 442

原创 CyclicBarrier

CyclicBarrier字面意思“循环屏障”,翻译为“可重用的屏障”更贴切一点。这个工具类的作用是起到一个栅栏的作用,当指定数量的线程都执行到某一个步骤之后,再一起往下执行,相当于一个阀门,容量满了再开阀门。看一下这个类的结构:这个类没有继承 AbstractQueuedSynchronizer,内部类也没有继承,而是使用了 ReentrantLock lock 这样一个变量来控制线程同步,内部类

2017-09-02 10:35:54 421

原创 CountDownLatch

CountDownLatchCountDownLatch 直译过来为“倒数阀门”,顾名思义,它是起到一个阀门的作用,实际上是用来控制线程的执行过程。来看一下这个类提供了哪些方法: 从图中可以看出,CountDownLatch 的构造方法是传入一个整数,然后提供了 await()、countDown()、getCount() 等方法,还有一个内部类 Sync,这个内部类继承了 AbstractQue

2017-09-02 10:34:29 442

原创 AbstractQueuedSynchronizer 之 共享锁

AbstractQueuedSynchronizer 之 共享锁acquireShared/** * Acquires in shared mode, ignoring interrupts. Implemented by * first invoking at least once {@link #tryAcquireShared}, * returning on success. Ot

2017-08-23 15:38:59 390

原创 AbstractQueuedSynchronizer 之 互斥锁

AbstractQueuedSynchronizer 之 互斥锁acquire源码如下:/** * Acquires in exclusive mode, ignoring interrupts. Implemented * by invoking at least once {@link #tryAcquire}, * returning on success. Otherwise th

2017-08-23 15:36:28 289

原创 ThreadPool 之 线程池工具类 Executors

接上篇 ThreadPool 之 Callable、Future 和 FutureTask。用 Executors 创建线程池  JDK 中提供了一个 Executors 类,在这个类中构造好了几个通用的线程池,并且 JDK 文档中也强烈推荐(urged to use)使用 Executors 来构建线程池。Executors/** * 创建容量为 nThreads 的线程池,最大工作线程也为 n

2017-08-03 20:51:50 1079

原创 ThreadPool 之 Callable、Future 和 FutureTask

ThreadPool 之 Callable、Future 和 FutureTaskCallable、Future 和 FutureTask  一般情况下,线程有两种创建方式,一种是继承 Thread 类,一种是实现 Runnable 接口。在线程运行执行的都是 run 方法,这是一个 void 方法,没有返回值。如果要获取线程执行的结果,就必须传入一个变量,在执行完之前将结果写入这个变量中。  从

2017-08-03 20:47:20 608

原创 ThreadPool 之 线程池实现类 ThreadPoolExecutor

ThreadPool 之线程池实现类 ThreadPoolExecutor  接上篇文章 ThreadPool 之 线程池概览。ThreadPoolExecutor 线程池  ThreadPoolExecutor 继承了 AbstractExecutorService,实现了核心方法 execute 以及一些获取线程池信息的方法。  ThreadPoolExecutor 有一些重要的参数:// ct

2017-08-01 11:08:13 927

原创 ThreadPool 之 线程池概览

ThreadPool[注] 本文中的源码基于 JDK1.8,源码中的注释为 JDK 中注释的翻译加上个人的理解。如有错误欢迎指正。引言  因为进程的切换相当耗费资源,加上 CPU 的发展,操作系统中引入了线程的概念。相比于进程的上下文切换,线程的切换更轻量级,但是不代表没有开销,而且大部分多线程的生命周期都比较短,会发生频繁的线程创建、销毁动作,这也是相当消耗资源的,因此引入了线程池。  合理利用线

2017-07-30 00:10:15 516

原创 Java 由生至死

对象是怎么降生的从.java文件到.class文件  计算机硬件只能识别机器码0和1,Java编译器(javac)将.java文件编译成.class的字节码文件,再由JVM加载.class文件,执行时解释为机器码进行执行,可以说Java是一种半编译半解释型的语言。JVM加载. class文件.class文件的结构 Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地

2017-07-11 17:25:35 933

原创 LeetCode - Keyboard Row

题目  给一个字符串数组,返回这些字符串中 所有字符在美式键盘中在同一行的字符串, 比如 qwe 和 asd 都在同一行,qaz 就不在同一行。思路  将每一行的字符放在 map 中,每一行的每个字符对应该行的 index,获取字符串的第一个字符,遍历字符串中的每个字符,如果和第一个字符所在行不一致就进入下一轮遍历。代码public class KeyboardRow { private st

2017-06-27 22:46:21 337

原创 LeetCode - CountingBits

题目 Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array. Example: For num

2017-06-27 16:54:19 289

原创 LeetCode - Number Complement

题目  求一个数的二进制每一位取反后的数。思路  运用异或的特性,101 ^ 111 = 010,任意数字和n个1的二进制异或,相当于每一位取反。代码public int findComplement(int num) { int res = num; int tmp = 1; // 每循环一次,tmp乘2 while (num > 0) { tmp

2017-06-27 15:54:41 294

原创 LeetCode - Merge Two Binary Trees

题目 Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge them into a new bin

2017-06-27 15:27:46 335

原创 LeetCode - Complex Number Multiplication

题目  输入两个 a+bi格式的字符串,计算它们的乘积,i^2=-1,输出结果也为a+bi的形式。   如 输入”1+1i”, “1+1i” (1 + i) * (1 + i) = 1 + i^2 + 2 * i = 2i,输出0+2i思路  从字符串中抽取出数字进行计算,计算过后再进行拼装结果字符串。代码 public String complexNumberMultiply(String

2017-06-27 15:08:59 345

原创 LeetCode - Array Partition I

题目 Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), …, (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large as po

2017-06-27 14:51:47 303

原创 LeetCode - Encode And Decode TinyURL

题目 TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/design-tinyurl and it returns a short URL such as http://tinyurl.com/4e9iAk. Design the encode

2017-06-27 11:50:06 401

原创 LeetCode - Hamming Distance

题目汉明距离-百度百科 Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0)    ↑ ↑ The above arrows point to positions where the corresponding bits are different.思路  将两个数异

2017-06-27 11:46:03 325

原创 Java中的@interface以及method.invoke()

前言  这几天在看暑假要去实习的公司的框架源码,该框架十分轻量级,上手贼快。   Web容器是Jetty,数据库是MySQL,使用该框架形式为插件开发,只需要按照该框架可以识别的规则开发,再将项目放到指定目录下,服务启动后加载该目录下的所有插件,用反射进行方法调用(几乎所有的框架底层都是用反射的吧)。   看了一天过后对框架整体有了一定了解,但是之前自己没有写过相关的代码,因此写了几个小demo

2017-04-28 22:56:11 1963

原创 人人网2017暑假实习生招聘-一面

上周面试结束以后接到通知,今天中午11点开始面试,早上没有去上课在等着,11点10分面试官才面试完上个人开始面试。   自我介绍完了之后,说我说的太简单了,然后让说了说我做了什么项目,自己语无伦次的,估计印象分十分不好。然后就让做题了。字符串  写一个函数,输入两个字符串分别代表版本1和版本2,输出比较的结果 输入版本号version1和version2,如1.0.0和1.0.1,版本1小于版

2017-03-28 15:18:32 891

原创 LeetCode - 4SumⅡ

题目  输入4个大小相等的数组,计算有多少个元组 (i, j, k, l) 满足 A[i] + B[j] + C[k] + D[l] = 0。 Input: A = [ 1, 2] B = [-2,-1] C = [-1, 2] D = [ 0, 2] Output: 2 Explanation: The two tuples are: 1.

2017-03-24 22:06:07 294

原创 LeetCode - 4Sum

题目  输入一个数组和一个目标值,返回所有的4个数的和等于目标值的组合。思路  这个问题是 TwoSum 、3Sum 的变种,和3Sum一样,先确定一个值,然后从剩下的数组中找一个3Sum的结果,再把当前值加入,逐次遍历即可。代码public List<List<Integer> > fourSum(int[] nums, int target) { List<List<Integer> >

2017-03-24 21:34:19 290

原创 LeetCode - 3Sum Closest

题目  输入一个数组和一个目标值target,返回数组中任意3个数的和最接近target的值。思路  和 3Sum 类似,每次先确定一个数的值,然后计算选出来的两个数和当前确定的数的和,进行比较,如果和目标值相同,则返回目标值,否则选取更接近的值作为结果值。继续计算,知道找到和目标值相同的值或者计算完毕。代码public int threeSumClosest(int[] nums, int tar

2017-03-23 21:10:11 355

原创 LeetCode - 3Sum

题目  给一个数组,找出所有的三个数的和为0的组合,不能有重复。思路  遍历数组,每次先确定3个数字中的一个,那么剩下的两个就是TwoSum问题。本题中不要求返回坐标,那么可以将数组进行排序,用 LeetCode - Two Sum II - Input array is sorted 的方法求解。代码public List<List<Integer>> threeSum(int[] nums) {

2017-03-23 19:23:32 273

原创 LeetCode - Two Sum II - Input array is sorted

题目  在Two Sum的基础上进行了修改,输入数组是排序的。思路  和《剑指Offer》的剑指Offer系列-面试题41:和为s的两个数字以及和为s的正数序列 一样,不再赘述。   当提交过后以为结果一定是乐于看见的AC,结果发现出现了Submission Result: Time Limit Exceeded错误。查看错误用例,发现是下面这玩意: [0,0,0,0,0,0,0,0,0,0,

2017-03-23 17:59:36 350

原创 LeetCode - Two Sum

题目  给了一个数组和一个目标值target,求数组中哪两个数的和等于target,返回坐标。 Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].思路  粗暴的解决办法就是遍历,时间复杂度为O(n!)。这样的思路是,先找到一个数,再去遍历查找满足

2017-03-23 17:24:03 309

原创 剑指Offer系列-面试题57:删除链表中重复的结点

题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:首先创建一个头结点,为了防止第一个结点就是重复结点。然后遍历整个链表,每一次while循环,都pass掉和当前结点值相同的结点,如本例中,在遍历到3的时候,遍历完一次,tmp指向了4,然后进入下一次循环,这次循环

2017-03-22 20:48:48 1221

原创 剑指Offer系列-面试题65:滑动窗口的最大值

题目:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1

2017-03-19 17:37:07 761

原创 剑指Offer系列-面试题52:构建乘积数组

题目:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。思路:既然不能乘所在坐标的值,那么就分开,先乘i左边的数,知道乘到i,然后乘i右边的。代码:public int[] multiply(int[] A) { int length

2017-03-18 20:10:36 303

原创 剑指Offer系列-面试题51:数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。思路:根据题目,所有数字都在0到n-1之间,那么如果不存在重复数字,对数组进行排序以后,数组坐标对应的数字一定是n,比如,n

2017-03-18 18:27:30 415

原创 剑指Offer系列-面试题49:把字符串转化为整数

题目:输入一个字符串,把字符串转化为整数。思路:进行输入合法性判断。代码:private boolean tag = false;public long StrToInt(String str) { if (str == null || str.equals("")) { tag = true; return 0; } char[] chars = str.toCh

2017-03-18 16:58:42 337

原创 剑指Offer系列-面试题47:不用加减乘除做加法

题目:RT。思路:不用加减乘除只能用位运算。先计算两个数相加以后不进位的值,保存这个进位的值,如5+7进位10,不进位为2,那么5^7的值就是2,(5&7)代码:public int Add(int num1, int num2) { while (num2 != 0) { // 得到二进制相加以后不进位的值,如5+7不进位的值是2 int tmp = num1 ^ nu

2017-03-18 16:56:47 390

原创 剑指Offer系列-面试题46:求1+2+3+···+n

题目:不能使用乘除法、for、while、if、else、switch、case等关键字以及A?B:C。思路:运用递归。&&的短路特性,如果&&前边的条件错误,那么后面的部分就不执行了。代码:public int Sum_Solution(int n) { int sum = n; boolean ans = (n > 0) && ((sum += Sum_Solutio

2017-03-18 16:52:47 421

原创 剑指Offer系列-面试题45:圆圈中最后剩下的数字

题目:0到n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里最后剩下的一个数字。思路:代码:public int LastRemaining_Solution(int n, int m) { if (n < 1 || m < 1) { return -1; } int last = 0; for (int i = 2 ; i <= n

2017-03-18 16:49:39 423

原创 剑指Offer系列-面试题44:判断5个数是否连续

题目:输入5个数,判断是否连续,0可以替代任何数。思路:代码:public boolean isContinuous(int[] numbers) { if (numbers == null || numbers.length != 5) { return false; } ArrayList list = new ArrayList(); for (int i : num

2017-03-18 16:47:26 830

原创 剑指Offer系列-面试题42:翻转单词顺序和左旋转字符串

题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内的字符顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”,输出“student. a am I”。思路:先把整个字符串翻转过来,然后再把每个单词翻转过来。代码:private void reverse(char[] chars, int begin, int end) { if

2017-03-17 18:34:08 452

原创 剑指Offer系列-面试题41:和为s的两个数字以及和为s的正数序列

题目一:输入一个递增排序的数组和一个数字,输出数组中任意一对和为s的数字。思路:代码:public ArrayList FindNumbersWithSum(int [] array,int sum) { ArrayList result = new ArrayList(); if (array == null || array.length < 2) { r

2017-03-16 22:06:57 574

原创 剑指Offer系列-面试题40:数组中只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。思路:利用异或的特点,一个数的二进制异或自己,结果为0,既然数组中只有两个数字出现一次,其他出现两次,那么首先考虑这样一个问题:一个数组中,只有一个数字出现一次,其他数字出现两次,那么只需要全部异或,既然一个数异或自己为0,而0异或任何数都为这个数本

2017-03-16 21:08:28 530

Servlet+JavaBean+MySQL

Servlet+JavaBean+MySQL

2016-09-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除