自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冷炎嗄的博客

慢爬的蜗牛

  • 博客(102)
  • 收藏
  • 关注

原创 算法题目---------------03转圈打印矩阵(切割矩形),正方形旋转90度,之字型打印矩阵,行和列都排好序找数

给定左上角和右下角坐标,将矩阵切割成一个个小矩形,依次遍历输出,注意有可能e同行或同列的情况public static void spiralOrderPrint(int[][] matrix) { int tR = 0; int tC = 0; int dR = matrix.length - 1; int dC = matrix[0].length - 1; whil...

2018-09-13 21:45:59 273

原创 算法题目---------------02使用队列实现栈,使用栈实现队列

使用两个队列,往其中一个队列进队,假设进入N个数,那么如果要出栈,则将N-1个数复制到另一个队列,剩下的那个就是出栈的数 使用栈实现队列,将数据放入一个栈,若要实现队列的先进先出,则将所有的数据放入另一个栈,依次出栈即可约束条件:若要放入的另一个栈中有元素,则不能倒数据进入 每次倒数据,要把数据倒完public void dao(){ if(!stackPop....

2018-09-13 21:12:43 221

原创 算法题目---------------01.实现一个特殊的栈,在栈的基本功能上,在实现返回栈中最小的元素

要求:pop,push,getMin操作时间复杂度为O(1) 设计的栈类型可以使用现成的栈结构设计两个栈,data中不用管,只需要入栈,当data中入栈,则min中做比较,如果min中没有,则直接入栈, 若有则用min中的栈顶的元素和data中入栈的元素进行比较, 若min中栈顶比较小,则向min中压入当前min栈顶中的元素,若min栈顶中的元素比较大,则压入data中刚刚入栈...

2018-09-13 20:48:40 390

原创 算法练习bat----------10用数组结构实现大小固定的队列和栈

1.使用数组实现大小固定的栈(使用变量index来模拟栈中的指针) public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new Ill...

2018-09-13 20:33:20 207

原创 算法练习bat----------09桶排序,基数排序,计数排序

桶排序,计数排序,基数排序:不基于比较的排序,只与数据状况有关桶:一种数据状况出现的词频,例如给定了0~60上的数组,无序,那么如果要用桶,可以创建一个长度为61的数组,记录对应该数出现的次数,例如:3,5,1,1,60,那么在创建的数组上对应arr[0]=1,arr[5]=1,arr[1]=2,arr[60]=1,这其实就是计数排序(桶排序的一种)  数组排序之后相邻数的最大差值...

2018-09-13 19:52:34 159

原创 算法练习bat----------08自定义比较器

public static class Student { public String name; public int id; public int age; public Student(String name, int id, int age) { this.name = name; this.id = id; this.age = age; } ...

2018-09-13 19:03:42 150

原创 欢聚后台

 main方法声明成private可以通过编译嘛?JvmJava为什么没有全局变量值传递和引用传递golang 中数组切片的区别 操作系统select poll epoll进程线程协程区别 算法数据结构红黑树 计算机网络dns过程三次握手四次挥手rpc http 其他:面向对象基本思想项目相关rrd 数据库 类...

2018-09-13 16:38:22 121

原创 算法练习bat----------06堆排序

 二叉树可以用数组形式表示:左孩子:2*i+1 右孩子:2*i+2 一个孩子的父节点:i-1/2堆-----》完全二叉树,堆可以分为大根堆和小跟堆大根堆:任何一个节点包括它的孩子节点,都是父节点最大HeapInsert:给定一个数组,如何改成大根堆:(a[0]已经是大根堆了,再加入a[1],只需要不断往上比较a[1]的父节点i-1/2,若当前节点比父节点大,则交换,直到小...

2018-09-12 21:07:37 119

原创 算法练习bat----------07排序的稳定性和汇总

稳定性:假定有3,1,2,3,1,4,2,1那么排完序就是1,1,1,2,2,3,3,4,那么稳定性就是能否保证上面的第一个3和第二个3,在排完序后先相对位置不变冒泡排序(能,O(N^2)):只要保证相同不交换就能保证稳定,例如:7,6,3,7,2,第一个7不断冒泡,遇到相同不交换,那么就能保证稳定性  插入排序(能,O(N^2)):同样只要保证相同不交换即可,例如5,6,7数组,然后,...

2018-09-12 21:07:21 136

转载 详解JVM中堆、栈、方法区(对象、值)是如何调用执行的

转载地址:http://www.cnblogs.com/dingyingsi/p/3760730.html这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助。废话不想讲了.入主题:先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)堆区:1.存储的全部是对象...

2018-09-12 11:25:32 258

转载 方法区和常量池

方法区和常量池2017年11月15日 21:20:11 阅读数:7262更多个人分类: Java虚拟机版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangbiao007/article/details/78545189        最近一直被方法区里面存着什么东西困扰着?       1.方法区里存class文件信息和cl...

2018-09-12 09:40:05 143

原创 算法练习bat----------05快速排序和改进的快排和随机快排

普通快排,最差情况下为时间复杂度O(N^2)随机快排,最差情况下为时间复杂度O(N*logN),最好空间复杂度O(logN),最差O(N)原始快排:将数组最后一个变量假设为X,小于等于X的放左边,大于X的放右边,然后再将拍好序的左边和右边分别再重复刚刚的动作改进快排:将数组最后一个变量假设为X,小于X的放左边,等于X的放中间,大于X的放右边,这样的好处是中间排好序的X不用动 p...

2018-09-11 20:05:57 147

原创 算法练习bat----------04荷兰国旗问题

给定一个无序数字,小于num放左边,等于num放中间,大于num放右边,要求空间复制度O(1),时间复杂度O(n)实际上就三种情况:(使用less表示数组-1,more表示数组length,cur表示当前位置)① 当数字小于num,less的下一个和cur交换,cur++(也就是下面的swap(arr, ++less, l++);)②当数字等于num,cur++③当数字大于num,...

2018-09-10 22:32:29 113

转载 JVM---一道面试题搞懂JVM类加载机制

有这样一道面试题:class Singleton{ private static Singleton singleton = new Singleton(); public static int value1; public static int value2 = 0; private Singleton(){ value1++; ...

2018-09-10 11:28:47 173

转载 JVM面试---GC是在什么时候,对什么东西,做了什么事情?

这个帖子的背景是今晚看到je上这张贴:http://www.iteye.com/topic/715256,心血来潮写下的文字,如果能抛砖引玉,能有其他面试官分析一下自己面试时问的问题,那或许是件很有意义的事情。     在公司当技术面试官几年间,从应届生到工作十几年的应聘者都遇到过。先表达一下我自己对面试的观点:     1.笔试、面试去评价一个人肯定是不够准确的,了解一个人最准确的方式就是“...

2018-09-10 11:26:58 1188 1

原创 推荐博文

https://www.cnblogs.com/smyhvae/category/587723.htmlhttps://blog.csdn.net/u013980127/article/details/53913994http://www.cnblogs.com/dingyingsi/p/3760730.html 深入理解Java Class文件格式https://blog.c...

2018-09-10 10:29:52 125

转载 垃圾收集器和内存分配策略

程序计数器,栈和本地方法栈随线程而灭,但是堆和方法区所需要的内存不确定,只有到程序运行期间才能指定要创建哪些对象,这部分的内存分配和回收是动态的1.垃圾收集器在对堆进行回收时,需要确定哪些对象还“存活”,引用计数算法(java中没有用来管理内存),虽然简单,但是难以解决对象之间相互循环引用的问题 根搜索算法: 由于引用计数算法的缺陷,所以JVM一般会采用一种新的算法,叫做根搜索算法。它...

2018-09-10 10:28:32 144

原创 数据库查询出来的时间在前端显示成了一串数字?解决方法:

时间格式注解:@Temporal(TemporalType.XXXX)时间格式化hibernate jpa注解 时间格式注解:@Temporal(TemporalType.XXXX)时间格式化hibernate jpa注解TemporalType取值包括:DATE/TIME/TIMESTRAMP(分别表示:日期、时间、日期+时间)eg:@Temporal(TemporalTyp...

2018-09-09 20:59:58 6952

转载 Java 如何有效地避免OOM:善于利用软引用和弱引用

Java 如何有效地避免OOM:善于利用软引用和弱引用  想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题。下面是本文的目录大纲:  一.了解 强引用、软引用、弱引用、虚引用的概念  二.进一步理解软引用和弱引用  三.如何利用软引用和弱引用解决OOM...

2018-09-06 17:38:31 120

转载 06Two Phase Termination设计模式

在进行线程两端终结的时候需要考虑:第二阶段的中止保证安全性,比如设计对贡献资源的操作 要百分百地确保线程结束,假设在第二个阶段出现了死循环,堵塞等异常导致无法结束 对资源的释放时间要控制在一个可控的范围内 ...

2018-09-06 17:37:30 144

转载 Java内存区域

全局变量————》堆, 局部变量————》栈, 静态变量————》方法区, 字符串和基本类型的常量————》方法区的静态常量池     程序计数器:  线程私有的,他是一块较小的内存空间,他相当字节码于解释器中的指针,也就是该内存存放下一条即将执行指令的地址。字节码解释器就是通过改变 这个计数器的值来选择下一条即将执行的指令。每一个线程都有一个程序...

2018-09-06 17:07:53 69

转载 05Thread-Per-Message设计模式

Thread-Per-Message是为每一个消息的处理开辟一个线程,使得消息能够并发(但是注意:线程的创建是有限的,可以使用线程池来处理,超过数量则加入等待队列)就好比电话接线员一样,每一个电话投诉或业务处理,都会有对应的人员来处理,若打不进,则等待 ...

2018-09-06 10:53:15 106

转载 05Latch设计模式

比如:若干线程并发执行某个特定的任务,等所有的子线程后执行结束后再统一汇总。比如某个用户要查询自己三年了的银行流水,为了保证数据库的数据量在一定范围内,通常数据库只保存一年的记录,要查询三年的流水要通过多个渠道才能实现,如果只有一个线程执行,那么效率低下,如果我们多个线程一起执行,那么性能和响应时间会缩短不少  有时为了不一直等待,可以设置超时不再等待...

2018-09-06 10:36:39 163

转载 09ThreadLocal在上下文中的应用

ThreadLocal存储的内容在当前线程自己的ThreadLocalMap中,当线程销毁,数据自然被释放实现一个简单的线程上下文每个线程若想使用,直接使用get()获取对应的实例,然后调用相应的方法就行,不会影响其他线程调用实例 ...

2018-09-06 10:16:18 379

转载 04彻底理解Java的Future模式

启动一个FutureTask,将耗时操作放在Callable里面进行操作(这样不会堵塞线程,Callable相当于runnable,不过是有返回值的)先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材。网上购买厨具比较方便,食材去超市买更放心。实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材。所以,在主线程里面另起一个子线程去网购厨具。但是,子线程执行的结果是要...

2018-09-06 09:18:32 169

转载 ThreadLoacl

实际的通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals中的;首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不...

2018-09-06 09:18:25 238

转载 ConcurrentHashMap之实现细节

锁分离 (Lock Stripping) ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。 ...

2018-09-06 09:18:19 121

转载 jdk1.7和1.8前后的HashMap,HashTable和ConcurrentHashMap的比较

你知道HashMap中hash方法的具体实现吗?你知道HashTable、ConcurrentHashMap中hash方法的实现以及原因吗?你知道为什么要这么实现吗?你知道为什么JDK 7和JDK 8中hash方法实现的不同以及区别吗?如果你不能很好的回答这些问题,那么你需要好好看看这篇文章。文中涉及到大量代码和计算机底层原理知识。绝对的干货满满。整个互联网,把hash()分析的如此透彻的,别无二...

2018-09-06 09:18:11 2708

原创 Java运算符

1.>>,>>>和<<<<<      :     左移运算符,num << 1,相当于num乘以2>>      :     右移运算符,num >> 1,相当于num除以2>>>    :     无符号右移,忽略符号位,空位都以

2018-09-05 17:48:16 73

原创 03不可变对象设计模式

在多线程中,我们通常通过给变量加锁来达到数据一致性,但也可以通过将类设计成不可变类来解决每次添加的时候,生成一个对象,对里面不可变的变量进行赋值,与String类似,String s1="Hello";s1=s1+" world"两者相加会产生新的字符串...

2018-09-05 15:21:19 200

转载 08互斥锁,读写锁和条件

java.util.concurrent.locks包提供了锁和等待条件的接口和类, 可用于替代JDK1.5之前的同步(synchronized)和监视器机制(主要是Object类的wait(), notify(), notifyAll()方法). 互斥锁--Lock接口及其实现类ReentrantLock所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们...

2018-09-05 15:04:11 101

转载 02观察者模式

1、初步认识观察者模式的定义:  在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话:  其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。2、这个模式的结构图3、可以看到,该模式包含四个角色抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,...

2018-09-05 14:00:24 88

原创 07七种单例模式的线程安全,高性能和懒加载

七种实现单例模式的线程中只有第五种:Volatile+Double-Check第六种:Holder第七种:enum只有上面这三种,高效且线程安全同时实现懒加载1.饿汉式:可以保证多线程下的唯一实例,getInstance性能也比较高,无法懒加载2.懒汉式:不能保证多线程下唯一性3.懒汉式+同步方法:能保证唯一和懒加载,但是性能低下4.Double-C...

2018-09-05 13:43:06 1548

原创 06Volatile关键字

Cache(三级缓存)的出现是为了解决cpu(贼快)和内存(相比cpu慢的多,但是redis也是基于内存的数据库,一旦程序关闭(也就是redis退出),那么内存中存储的缓存都会消失,而redis在启动时通过aof或rdb将数据重新读取到内存中来,扯远了。。。。。。)之间读写速度严重不统一的问题CPU缓存一致性问题:i++首先,在程序运行期间,将主内存中的数据复制一份存储到CPU Cac...

2018-09-05 11:19:14 83

转载 05线程上下文类加载器

在JDK1.2后,可以使用getContextClassLoader()和setContextClassLoader()来获取和设置当前线程的上下文类加载器,如果没有设置,默认与父线程一致。Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。...

2018-09-05 10:15:57 101

原创 简单理解堆,栈和方法区

JAVA的JVM的内存可分为3个区:堆(heap)、堆栈(stack)和方法区(method) 堆区: 提供所有类实例和数组对象存储区域 jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 ...

2018-09-05 10:12:47 186

转载 04JVM类加载器

JVM为我们提供三大内置的类加载器,它们之间严格遵守着父委托的机制自定义类加载器:自定义类加载器都是ClassLoader的直接或间接子类,必须实现finidClass方法 protected Class<?> findClass(String name) throws ClassNotFoundException { throw new Cla...

2018-09-05 09:50:20 79

转载 T和?的区别

Java中的Object、T(泛型)、?区别因为最近重新看了泛型,又看了些反射,导致我对Object、T(以下代指泛型)、?产生了疑惑。我们先来试着理解一下Object类,学习Java的应该都知道Object是所有类的父类,注意:那么这就意味着它的范围非常广!首先记住这点,如果你的参数类型时Object,那么的参数类型将非常广!《Thinking in Java》中说很多原因促成了泛型...

2018-09-05 09:18:26 17087 4

原创 03ClassLoader

ClassLoader的主要职责就是负责加载各种class文件到JVM中,ClassLoader是一个抽象的class,给定一个class的二进制文件名,ClassLoader会尝试加载并且在JVM中生成构成这个类的各个数据结构,并将其分布在JVM的内存中JVM采用懒加载,只要第一次使用的时候才会加载初始化类只有6种情况除外:new 访问静态变量 访问静态方法 对某个类进行反...

2018-09-04 21:30:31 69

原创 02线程池

一个完整的线程池需要具备以下要素:任务队列:用于缓存提交的任务 线程数量管理实现:创建线程时初始数量init,线程池地洞扩充到最大时的线程数量max,线程空闲时维护的活跃数量core三者之间的关系是:init<=core<=max 任务拒绝策略 线程工厂:用于个性化定制线程,比如将线程设置为守护线程及设置线程名称等 QueueSize:任务队列中存放的数量 keepeda...

2018-09-04 17:58:18 66

空空如也

空空如也

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

TA关注的人

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