java
katsueiki
疯狂程序员, 目前在aliyun工作的小菜鸟一枚
展开
-
算法
实现一个可以得到最小值的栈这里首先要创建两个栈对象,其中一个正常进行栈的相关数据结构,第二个栈在push的时候需要与当前栈的栈顶元素进行比较,如果大于或者等于当前栈元素的话就重新push一个当前栈顶元素,这样可以保证第二个栈的栈顶元素是整个栈元素中最小的,即可求出最小值判断当前字符串与另一个字符串是否为旋转词假设有s1 = “1234” 那么他的旋转词为”2341”,”3421”,”4123”三种,原创 2015-12-18 09:02:17 · 459 阅读 · 0 评论 -
如何修改java String
众所周知,String 类是不可变对象,那么是否有方法改变它呢?String的成员变量都是private final的,即为初始化之后不可改变,但是其中value比较特殊,因为它是一个引用变量,value是final修饰的,也就是说final不能再指向其他数组对象,既然改变value指针的指向不可能,那么能否改变value指向的数组元素吗?比如改变数组中的s,使其变成n,由于String中的所有成员原创 2016-03-07 19:39:31 · 1037 阅读 · 0 评论 -
java 面试问题
多线程,并发1.java中能否创建volatile数组可以,但是只是一个指向数组的引用,而不是整个数组。也就是如果改变引用指向的数据,将会受到volatile的保护,但是如果多个线程同时改变数组内的元素,就不能起到保护作用2.volatile能使得一个非原子操作变成原子操作吗如果在类中有一个long类型的成员变量,如果了解这个成员变量会被多个线程访问,最好是将其设置为volatile,因为在jav转载 2015-12-21 13:11:21 · 1413 阅读 · 0 评论 -
避免死锁的三种方法
在某些情况下,避免死锁是很重要的,下面我就要描述一下避免死锁的三种方法定义锁顺序设置时限死锁检测定义锁的访问排序当多个线程同时需要一个锁,而获取这个锁的顺序不一样的时候,死锁就出现了。那么只要保证所有的锁都被同一种顺序获取的话,那么死锁就不会发生了.Thread 1: lock A lock BThread 2: wait for A lock C (when A l翻译 2015-12-24 18:01:10 · 2877 阅读 · 0 评论 -
Java基本排序算法
排序大的分类可以分为两种,内排序和外排序,在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,那么称之为外排序内排序分为一下几类- 插入排序: 直接插入排序,二分法插入排序,希尔排序- 选择排序:简单选择排序,堆排序。- 交换排序: 冒泡排序,快速排序 - 归并排序 - 基数排序插入排序 思想: 每步将一个待排序的记录,按照其顺转载 2015-12-29 17:29:19 · 422 阅读 · 1 评论 -
android 5.1+ Notification
user通过NotificationManager.notify发送通知请求,然后NotificationManger发送请求给NotificationManagerService,在这里对pendingIntent的信息进行提取以及过滤,然后将消息放进消息队列中去,enqueueNotificationInternal()方法负责将消息放入队列中,buzzBeepBlinkLocked()负责对消转载 2015-12-18 10:43:32 · 1138 阅读 · 0 评论 -
SystemClock.sleep
偶然在有关线程池的一篇博客中看见了这个方法,不理解与Thread.sleep()方法的区别是什么,于是做此笔记. SystemClock.sleep(millis) is a utility function very similar to Thread.sleep(millis), but it ignores InterruptedException. Use this function f原创 2015-12-18 10:10:53 · 907 阅读 · 0 评论 -
java中的三个引用类 SoftReference, WeakReference 和 PhantomReference的区别
SoftReference、Weak Reference和PhantomRefrence分析和比较强引用除了上面提到的三个引用之外,还有一个其他的引用,也是最长用到的强引用, Object o=new Object(); Object o1=o; 上面代码第一句是在heap堆中创建新的Object对象,然后通过o引用这个对象,gc就不会收集该对象,如果通过如下代码 o=转载 2015-12-18 09:51:03 · 1007 阅读 · 0 评论 -
java aio
简介java AIO(NIO.2):异步非阻塞,服务器的实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。适用场景AIO方式适用于链接数目比较多且比较长的架构(重操作)比如相册服务器,充分调用OS参与并发操作,编程比较复杂,jdk7开始支持详解所谓AIO 异步io,主要是针对线程在调用IO获取外部数据的时候,是否阻塞调用线程来说的,一般调用步骤大原创 2015-12-17 22:46:44 · 733 阅读 · 0 评论 -
java bio & nio
简介java bio: 同步并阻塞,基于bio的通信,Socket服务器端会发生阻塞.即在监听的过程中每次accept到一个客户端的连接,就处理这个请求,对于其他连接过来的客户端只能够阻塞等待java nio:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器中,多路复用器轮询到链接有I/O请求的时候才启动一个线程进行处理使用场景:bio方式适用于连接数目比较小转载 2015-12-17 22:10:58 · 376 阅读 · 0 评论 -
ByteBuffer小结
ByteBuffer创建ByteBuffer.allocate(128) 创建一个容量为256字节的ByteBuffer,如果发现创建的缓冲区容量太小,那么只能重新创建。回绕ByteBuffer.flip() 这个方法用来将缓冲区转化成准备为数据传出的状态,执行以上方法后,输出通道会从数据的开头而不是末尾处开始,回绕保持缓冲区内的数据不变,只能够读取 清除缓冲区不会改变缓冲区的数据,只是重置了缓冲转载 2015-12-16 22:27:37 · 673 阅读 · 0 评论 -
Fail-Fast机制
由于HashMap(ArrayList)并不是线程安全的,因此如果在使用迭代器的过程中有其他线程修改了map(这里的修改是指结构上的修改删除或者,并非指单纯修改集合内容的元素),那么将要抛ConcurrentModificationException 即为fail-fast策略 主要通过modCount域来实现,保证线程之间的可见性,modCount即为修改次数,对于HashMap(Arr转载 2015-12-15 21:09:33 · 469 阅读 · 0 评论 -
android app 延迟加载
android app 延迟加载的正确姿势: getWindow().getDecorView().post(new Runnable() { @Override public void run() { Handler.post(Runnable); } } 一般说到转载 2015-12-15 21:26:07 · 1428 阅读 · 0 评论 -
Android代码内存优化建议-Java官方篇
通常来说,高效的代码需要满足以下两个规则. 1. 不要做冗余的动作 2. 如果能避免尽量不要分配内存详细建议如下: 1.避免创建不必要的对象 虽然GC可以回收不用的对象,可是为这些对象分配内存,并回收他们同样是需要耗费资源的. 因此请尽量避免创建不必要的对象 (1)如果你需要返回一个String对象,并且你知道它最终会需要连接到一个StringB转载 2015-12-15 15:22:34 · 456 阅读 · 0 评论 -
HashMap源码分析
最近看见不少文章提到HashMap 源码, 这里就来具体分析一下HashMap源码原创 2015-12-14 22:06:41 · 359 阅读 · 0 评论 -
Dalvik和JVM的区别
1.Dalvik基于寄存器,而JVM基于栈.基于寄存器的虚拟机对于更大的程序来说,在编译的时候,话费的时间更短 2.Dalvik主要是完成对象生命周期的管理,堆栈管理,安全和异常管理,以及垃圾回收等等重要功能. 3.Dalvik负责进程隔离和线程管理,每一个android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行. 4.不同于java虚拟机转载 2015-12-14 21:27:35 · 505 阅读 · 0 评论 -
单例模式详解
单例模式详解详细的总结一下单例模式,首先基本的分为懒汉式和饿汉式,懒汉即为在使用的时候初始化,饿汉即为在类加载的时候初始化, **饿汉式 public class Singleton{ private final static Singleton instance = new Singleton(); private Singleton {}转载 2015-12-14 20:43:00 · 351 阅读 · 0 评论 -
Pycharm 5.0 and Pycharm 2016 的破解
在安装之后,调整时间到2xxx年,然后申请三十天试用,之后退出pyCharm,然后将时间调成回来在注册的时侯选择 License server ,填 http://idea.lanyus.com ,然后点击 OK(5.0)在注册的时侯选择 License server ,填 http://idea.qinxi1992.cn,然后点击 OK(2016.1)http://jetbrains.t...转载 2016-02-16 11:36:16 · 18344 阅读 · 5 评论