自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

u010900754的专栏

真心希望国内博客环境 多一些原创 少一些复制

  • 博客(26)
  • 资源 (3)
  • 收藏
  • 关注

原创 【数据结构与算法】treemap应用 排序

给一个数组,按照出现次数排序,如果出现相同次数,那么按照大小排序。public static void main(String[] args) { int[] array = {5,10,52,2,2}; int[] r = sort(array); for(int i : r){ System.out.println(i); } } public static

2017-09-30 05:29:36 293

原创 【数据结构与算法】查找波峰或者波谷

给定一个没有重复数字的数组,找出里面的波峰或者波谷,没有返回-1。如果有,那么波峰波谷的两侧是单调的。思路是二分查找。返回的条件是找到的中间值比两边都大或者比两边都小。那么如果不满足就需要查找左边或者右边。在判断左右之前,我们需要先判断数组的类型,是包含波峰还是波谷,方法是检测前两个值,如果a[0]>a[1],那么是找波谷,否则找波峰。下面只看波峰的情况,如果a[m-1] 这是存在波峰

2017-09-30 01:00:27 21304 2

原创 【mysql】串行化隔离级别

串行化隔离级别是最严格的隔离级别,所谓串行话,指的是两个事务t1和t2,最终执行的结果与先执行t1在执行t2或者先执行t2再执行t1的结果一样。这个如何实现?最简单的方式叫做两段式锁。定义了两种锁,读锁和写锁,只有读-读可以共享,其余的都阻塞。两段式锁指的是加锁和解锁不能交替,也就是在一个事务内,解锁操作之后不能再有任何的加锁操作,如果严格按照这个协议来操作数据,那么最终的执行一定是可串行话。

2017-09-27 06:23:11 6060

原创 【mysql】细说 数据库隔离级别 及实现

网上大多数关于隔离级别的文章都是讲了事务中的问题以及隔离级别可以解决的问题,我这次想看看数据库底层是如何实现隔离级别的。不过还是先来回顾一下隔离级别以及可能发生的问题。1.脏读:指的是一个事务的读操作读到了另一个未提交的事务修改的值。比如下面的场景:脏读的问题是,读到的值可能会被回滚,那么这个值就是失效的,不能继续使用,否则会有一致性问题。2.不可重复读:指的是一个事务读...

2017-09-26 07:09:02 3217 1

原创 【mysql】mysql多线程

mysql是一个单进程多线程的数据库,在innodb中大概有一下几种线程:(1)Master Thread:这是主线程,非常核心,其用途主要是做一些周期性的任务,在不同的innodb版本其功能不同,这里就看最早期的版本。早起的innodb Master线程会有两种频率的任务,一种是每1秒一次的,还有每10秒一次的。每1秒的工作:1.刷新日志;2.刷新至多100个脏页3.合并插入...

2017-09-26 05:44:28 3941

原创 【mysql】checkpoint技术

之前介绍了mysql原理的两个重要的概念:缓存和日志。我们知道了缓存要被周期性的刷回磁盘,那么具体是怎么刷的呢?首先对于redo日志来说,存在三个刷回的时机:(1)主线程的周期,即每一秒一次;(2)日志缓存已经使用了三分之一的空间;(3)执行到commit了;所以,我们看到了执行commit的时候,其实所做事情是很少的,因为都均摊到其他的线程了。我们只需要把redo的日志缓

2017-09-26 00:05:48 492

原创 【mysql】事务 运行原理 概述

以前没有深究过数据库底层是怎么运作的,只是停留在了概念层次,但是后来发现写程序的时候不是很舒服,总感觉有些点不通,于是决定看看mysql innodb引擎的原理,这里只是一个大致的介绍,不会太深入。如果我们在mysql的客户端执行了一些个操作,我们不了解任何底层,最简单的概念模型就是认为数据库的表里面的数据被修改了。也就是我这里执行一次update,数据库就会执行一个修改的io操作,很直观的理...

2017-09-25 23:00:00 484

原创 【Thrift】java 例子

安装thrift,我是mac机器,mac下使用homebrew安装thrift很方便,具体看另一篇博客。首先的定义接口文件: service HelloWorldService { string sayHello(1:string username)}因为thrift是支持跨平台的,所以这里接口的定义,thrift定义了自己的规范。 然后使用thrift的工具...

2017-09-25 06:32:54 1615 3

原创 【Java】java实现的远程调用例子 rpc原理

当今分布式应用盛行,rpc框架也就随之出现,今天用java写一个小的demo。首先看一下什么事远程调用远程调用涉及到了网络io,基本过程是客户端向服务端发送消息,表明自己要调用的方法的名字以及包含的参数,然后服务端调用函数,再向客户端返回结果。所以涉及了两次网络io。这样的话,客户端的代码写起来比较费劲,每一个方法底层都是网络io,但是过程都是一样的,传递参数,得到结果,所以这里肯定可

2017-09-25 05:41:09 18044 1

原创 【Java】中断

在Java中并没有一种方法可以直接中断一个线程。我们只能通过标志来中断。比如:class Task implements Runnable{ boolean done = false; @Override public void run() { while(!done){ System.out.println("go..."); } } public void se

2017-09-24 08:58:25 245

原创 【Java】CompletionService 使用

使用线程池的submit方法时,可以返回一个Future,我们可以通过这个Future来获得任务的返回值。那么通常的场景是,我们通过多个任务来获取到了返回值,之后就需要对返回值进行处理,此时我们需要把每一个Future放进一个容器里,然后用一个循环处理。不过这里还是有问题的,我们知道通常的容器是不允许一边读取,一边修改的,会抛出一个ConcurrentModificationExceptoin,一

2017-09-24 03:51:38 358

原创 【Java】Callable 接口

多线程中最常用的是Runnable接口,定义了一次任务执行的内容。但是Runnable接口无法得到返回值,而且也无法让执行端捕获到异常。所以就有了Callable接口。public interface Callable { /** * Computes a result, or throws an exception if unable to do so. *

2017-09-24 03:15:57 2195

原创 【http】相关知识

1.http1.1协议 主要是增加了持久连接的技术,浏览器访问一个web页面时,会根据返回的html页面解析,如果遇到比如img,css或者js文件时,它会发起后续的http请求去获取资源,每一次都会有tcp的建立和关闭,很消耗性能。来自http://blog.csdn.net/zhangxiaoxiang/article/details/765082。所以http1.1提出了持久化连...

2017-09-18 21:51:52 447 2

原创 【Redis】map实现原理

哈希表是一个很常用的数据结构,不同的平台对它有不同的实现。下面是redis的实现。首先是redis中与哈希表有关的数据结构定义。节点定义:这里有next指针的存在说明这是一个采用拉链法构建的哈希表。key是键,值是一个union,可以是以下的任意一种类型:指针,uint64和int64类型。下面是table的实现:一个ht结构体就是哈希表的一个容器数组。table是一个...

2017-09-18 19:35:30 5003

原创 【数据结构与算法】海量数据解决方案 bitmap

新浪的一道笔试题,后来上网get到新的姿势。首先是一个常识,1亿是10的8次方,1G大概是10的9次方,2的10次方是1024,约等于10的3次方,所以10亿大概是1G。问题:有10亿个无符号整数,问有没有办法在内存不超过1GB前提下,找出所有的只出现了一次的数。这个是一个计数的题目,常规的做法是用一个map存下每一个数字的次数,但是这个会超过内存限制,建简单的计算下:一个数占4个

2017-09-18 12:46:46 466

原创 【Java】虚拟机执行引擎

java虚拟机规范只是定义了执行过程的概念模型,具体怎么实现由虚拟机决定。运行时的栈帧结构:我们知道虚拟机的运行时数据区有一部分叫做虚拟机栈。虚拟机栈本身就是一个栈结构,栈里面的元素是栈帧。所以虚拟机栈并不是我们直接理解上相对于函数运行时操作数入栈出栈的结构,而是一个更高层次的结构。每一个线程都有一套自己的虚拟机栈,里面是该线程的栈帧。那么一个栈帧会存什么内容呢?局部变量表,操作数

2017-09-09 12:18:13 375

原创 【数据结构与算法】京东笔试题 去右括号

题目:给定一个只包含括号的字符串,且括号是合法的。删除第一个左括号,再删除任意一个右括号,一直重复此操作直到字符串为“”。问:一共有多少种解法。我拿到这道题目,本能的反应就是深搜,结果只AC了一半,一直以为是逻辑有问题,可是想不出来,最后想到可能是超时了,应该加一个备忘录,算是一个经验吧。然后考完看了牛客网别人的算法,发现很好。思路是算出每一个右括号前面有几个左括号,于是可以得到删

2017-09-08 23:20:42 730

原创 【Java】类加载机制

1.概述类加载指的是把class文件载入到内存,并创建运行时数据的过程。一个类的生命周期为:加载 连接 初始化 使用 卸载。其中的连接又可以分为三部分,验证 准备 解析。2.类加载的时机在以下四种情况下会触发类加载:(1)实例化一个对象或者使用类变量或者调用类方法时,类没有被加载;(2)使用反射,类没有被加载;(3)初始化类时,其父类没有被加载,那么就需要加载父类;

2017-09-06 22:52:26 208

原创 【Java】类文件结构 编译

阅读《深入理解java虚拟机》第六章心得。1.概述这里要说的是我们通过文本编辑器写好一个“a.java”文件以后,是如何被虚拟机编译为字节码的,以及字节码的格式。不过先说一下关于java特性的问题。一般的语言,都是直接编译为本地机器语言的,所以一段代码为了运行在不同的环境下可能需要编译为不同的格式才能运行,最终的二进制格式必须是平台识别的。java的理念是“写出来的代码可以到处运行”,指的

2017-09-06 17:40:23 314

原创 【Leetcode】最小栈

在栈结构加一个返回最小值的方法。原理是每一次push一个差值x-min,可以记录上一次的最小值。如果x小于上一次的min,就更改min。同时在pop的时候,要看栈顶是否是最小值,如果是,那么pop了以后就需要更新最小值为x+min。public class MinStack { Stack stack; int min; /** initialize your data st

2017-09-06 13:40:03 1065

原创 【Leetcode】旋转数组最小值

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/有一个递增的旋转数组,找出最小值。个人习惯写二分算法时,while的条件为low需要首先处理特殊情况,就是本身有序的情况,如果a[low] 当a[m]>a[high]时,说明m在左侧,这时铁定需要找[m+1,high],否

2017-09-06 13:17:51 2530 2

原创 【Leetcode】81. Search in Rotated Sorted Array II

https://leetcode.com/problems/search-in-rotated-sorted-array-ii/description/是上一题的变种,允许数组中有相同元素。大致思路不变,还是特殊的二分,但是有一些小的case需要处理。在没有重复元素的场景下,我们判断左半边是否有序是用条件“a[low]所以我们不能用小于等于来判断左半边是否有序,只能用小于来判断,如果a

2017-09-06 11:47:23 190

原创 【Leetcode】33. Search in Rotated Sorted Array

https://leetcode.com/problems/search-in-rotated-sorted-array/description/一个递增的没有重复元素的数组,做一次移位操作,然后在数组中查找偶一个元素返回索引,如果没有返回-1。首先要明白递增数组移位以后的特征,必然是前半段总比后半段大,而且各自内部是有序的。很明显这是一个特殊的二分查找。仍然是取得中间元素a[m],之

2017-09-06 11:35:07 185

原创 【数据结构与算法】topK问题

本质上,与findKth是一样的,有三种算法:1.堆,适用于大数据的场景,只需要Ok的空间。 public List topKByHeap(int[] array, int k){ PriorityQueue minHeap = new PriorityQueue<>(); for(int i : array){ if(minHeap.size() < k) minHea

2017-09-05 22:26:54 267

原创 【数据结构与算法】ip转int

思路比较简单,但是有一些坑。class Error extends Exception{ /** * */ private static final long serialVersionUID = 1L; String msg; Error(String msg){ this.msg = msg; }}public class Main { public sta

2017-09-05 18:06:41 728

原创 【Java】split(".")

java 的split函数接受一个正则表达式的分隔符为参数,将string按照分隔符划分为一个数组。我们可能会忽略这个参数的要求,这里传入的分隔符并不是一个普通的字符串,而是一个正则表达式。最常见的情景,比如“a.b”,分割为“a”和“b”,如果我们不注意,会写成s.split("."),结果是不对的,因为"."是被当做一个正则表达式来看的,它有特殊含义,表示“任意单个字符”,所以结果肯定不是

2017-09-05 17:42:49 365

设计模式的 课件

主要讲解了 设计模式的相关内容 包括类图等其他

2014-04-15

head first 审计模式

headfirst 一系列书籍中 对设计模式的讲解 很容易理解

2014-04-15

空空如也

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

TA关注的人

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