05 2018 档案
摘要:1、Fragment的生命周期函数 onAttach、onCreate、onCreateView、onViewCreated、onActivityCreated、onStart、onResume、onPause、onStop、onDestroyView、onDestroy、onDettach Act
阅读全文
摘要:哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行
阅读全文
摘要:Terms VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存) PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) USS- Uni
阅读全文
摘要:要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到。ps是显示瞬间进程的状态,并不动态连续
阅读全文
摘要:一、什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺序不同 处理器采用乱序或并行的方式来执行指令 保存在处理器本地缓存中的值,对于其他处理器是不可见 在
阅读全文
摘要:非阻塞算法:使用底层的原子机器指令(例如比较并交换指令)代替锁来确保数据在并发访问中的一致性 应用于在操作系统和JVM中实现线程 / 进程调度机制、垃圾回收机制以及锁和其他并发数据结构 可伸缩性和活跃性上拥有巨大的优势,不存在死锁 原子变量:提供了与volatile类型变量相同的内存语义,并支持原子
阅读全文
摘要:Charles 是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。 Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。 除了在做移动开发中调试端口外,
阅读全文
摘要:描述: 给定一个字符串,找到最长子串的长度,而不重复字符。 例子: 给定"abcabcbb"的答案是"abc",长度是3。 给定"bbbbb"的答案是"b",长度为1。 给定"pwwkew"的答案是"wke",长度为3.请注意,答案必须是子字符串,"pwke"是子序列,而不是子字符串。 我的方法:(
阅读全文
摘要:KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~ 之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言
阅读全文
摘要:一、状态依赖性管理 对于单线程程序,某个条件为假,那么这个条件将永远无法成真 在并发程序中,基于状态的条件可能会由于其他线程的操作而改变 1 可阻塞的状态依赖操作的结构 2 3 acquire lock on object state 4 while (precondition does not h
阅读全文
摘要:并发程序中潜在错误的发生并不具有确定性,而是随机的。 安全性测试:通常会采用测试不变性条件的形式,即判断某个类的行为是否与其规范保持一致 活跃性测试:进展测试和无进展测试两方面,这些都是很难量化的(性能:即吞吐量,响应性,可伸缩性测试) 一、正确性测试 重点:找出需要检查的不变性条件和后验条件 1、
阅读全文
摘要:一个对象是否需要是线程安全的取决于它是否被多个线程访问。 当多个线程访问同一个可变状态量时如果没有使用正确的同步规则,就有可能出错。解决办法: 不在线程之间共享该变量 将状态变量修改为不可变的 在访问状态变量时使用同步机制 完全由线程安全类构造的程序也不一定是线程安全的,线程安全类中也可以包含非线程
阅读全文
摘要:我们不仅仅希望防止某个线程使用某个状态时,另一个线程在修改它;我们还希望某个线程修改了某个状态后,其他线程能够看到状态的变化。 一、可见性 重排序:在没有同步的情况下,编译器、处理器可能对代码的执行顺序进行一些调整 例如如下代码,由于没有使用同步机制,读线程可能看不见ready的修改,而一直循环下去
阅读全文
摘要:一、设计线程安全的类 找出构造对象状态的所有变量(若变量为引用类型,还包括引用对象中的域) 约束状态变量的不变性条件 建立对象状态的并发访问管理策略(规定了如何维护线程安全性) 1、收集同步需求(找出复合操作、多个变量遵循原子性的操作等) 2、依赖状态的操作(找出操作是否基于先验条件,例:取出当队列
阅读全文
摘要:委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。 一、同步容器类 1、同步容器类的问题 同步容器类都是线程安全的,容器本身内置的复合操作能够保证原子性,但是当在其上进行客户端复合操作则需要额外加锁保护其安全性 由于同步容器类要遵守同步策略,即支持客户端加锁,但必须清
阅读全文
摘要:任务:通常是一些抽象的且离散的工作单元。大多数并发应用程序都是围绕"任务执行"来构造的,把程序的工作分给多个任务,可以简化程序的组织结构便于维护 一、在线程中执行任务 任务的独立性:任务并不依赖于其他任务的状态,结果和边缘效应。独立的任务可以实现并行执行 1、串行的执行任务 所有的任务放在单个线程中
阅读全文
摘要:取消和关闭任务的方法:标志状态域、中断、Future、重写不可中断的阻塞的interrupt()方法、通过线程池的shutdown()和shutdownNow()方法、生产者消费者中加入毒丸对象、try finally中处理非常正线程终止。
阅读全文
摘要:一、在任务和执行策略之间隐性耦合 Executor框架将任务的提交和它的执行策略解耦开来。虽然Executor框架为制定和修改执行策略提供了相当大的灵活性,但并非所有的任务都能适用所有的执行策略。 依赖性任务:依赖其他同步任务的结果,使其不得不顺序执行,影响活跃性 使用线程封闭的任务:在单线程的Ex
阅读全文
摘要:在安全性和活跃性之间通常存在着某种制衡 一、死锁 定义:在线程A持有锁L并想获得锁M的同时,线程B持有锁M并尝试获得锁L,线程AB均不会释放自己的锁,那么这两个线程将永远地等待下去 在数据库系统的设中考虑了检测死锁以及从死锁中恢复。JVM没有办法解决死锁,只能在编程和测试时注意不要让死锁发生 1、锁
阅读全文
摘要:线程的最主要目的是提高程序的运行性能,但性能的提升会导致复杂性的提升,又会导致安全性和活跃性的风险 一、对性能的思考 提升性能意味着用更少的资源做更多地事情。要想通过并发来获得更好的性能,就要更有效地利用现有处理资源 线程使用的额外的性能开销:线程之间的协调(例如加锁、触发信号以及内存同步等),增加
阅读全文
摘要:一、Lock与ReentrantLock Lock接口中定义了一种无条件、可轮询的、定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是显式的。 ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性。ReentrantLock同样提供了可重入的加
阅读全文
摘要:在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Se
阅读全文
摘要:问题: A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep
阅读全文
摘要:网页布局(layout)是 CSS 的一个重点应用。 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案 Flex 布局,可以简便、完整、响应式
阅读全文
摘要:微信小程序上线大半年,大部分技术原理也有文章介绍了,本文尝试从需求出发探讨微信小程序技术方案的来源,以及最近公测的支付宝小程序技术方案上的考量。 微信小程序 微信小程序的需求是让第三方开发者可以接入,可以使用微信的提供的接口去开发应用嵌入在微信里。对于这个需求,最简单的实现方案是:让外部开发者开发纯
阅读全文
摘要:1、下载单个文件,默认将输出打印到标准输出中(STDOUT)中 2、通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名的文件中-O:使用URL中默认的文件名保存文件到本地 同样可以使用转向字符">"对输出进行转向输出 同时获取多个文件 若同时从同一站点下载多个文件
阅读全文
摘要:第一部分:What 在Java中一般通过继承Thread类或者实现Runnable接口这两种方式来创建多线程,但是这两种方式都有个缺陷,就是不能在执行完成后获取执行的结果,因此Java 1.5之后提供了Callable和Future接口,通过它们就可以在任务执行完毕之后得到任务的执行结果。本文会简要
阅读全文
摘要:Future是我们在使用java实现异步时最常用到的一个类,我们可以向线程池提交一个Callable,并通过future对象获取执行结果。本篇文章主要讲述了JUC中FutureTask中的一些实现原理。使用的jdk版本是1.7。 Future Future是一个接口,它定义了5个方法: 简单说明一下
阅读全文
摘要:上手了Android N Preview,第一个不能错过的新特性就是App分屏的支持。Android7.0原生系统就可以支持两个App横屏并排或者竖屏上下摆放了。第二个新特性就是在Android TV上,原生系统也可以支持App实现画中画,用户可以一边看视频一边操作其他的应用。 其实早先在国内部分厂
阅读全文
摘要:对null进行强转会不会抛错。测试结果是,如果把null强转给对象,是不会抛异常的,因为本身对象是可以为null的。但是如果是基本类型,比如 int i = (Integer)obj的强转,其实内部会调用intvalue方法去赋值给基本类型,所以这时候是会报错的。 代码如下 上面能正常执行,即把nu
阅读全文
摘要:没错,会按照顺序执行,先执行try内代码段,没有异常的话进入finally,最后返回,那么输出如下: try block, i = 2finally block i = 10main test i = 10 这个没有问题,如果我们把return语句放入try catch里又会怎么样呢 输出结果是:
阅读全文