内功修炼
文章平均质量分 61
马各阿牛
这个作者很懒,什么都没留下…
展开
-
算法------编程珠玑(ProgrammingPeals)第八章(JAVA)
package code_08_chapter;/* *Created by William on 2018/6/22 0022 */public class QuestionsInChapter8 { /** * 给定一个含有n个元素的vector,找出其中最大的子向量(即所有元素之和为最大值)。 * 如果是都为正数,那么问题变得十分简单,整个vector即...原创 2018-06-22 17:02:59 · 288 阅读 · 0 评论 -
算法------编程珠玑(ProgrammingPeals)第七章
粗略估算 量纲检验:即在检验几何或物理等式时,我们可以先看看其中的单位在乘除过后是否与原式能保持一致。 模9法(舍9法):在加法计算当中,加数的数字总和与和数的数字总和模9相等。举个例子:3142+2718+1123=6973. (3+1+4+2+2+7+1+8+1+1+2+3)%9=7=(6+9+7+3)%9. 72法则:这是在经济学中常常用到的估算方法,假设以年利率r...原创 2018-06-21 17:34:33 · 221 阅读 · 0 评论 -
java并发---安全发布对象(2)-不可变对象
不可变对象不可变对象需要满足的条件: 1.对象创建后其状态就不能修改 2.对象所有域都是final类型 3.对象是正确创建的(在对象创建期间,this引用没有溢出) 除了final之外不可变对象的java实现Collections.unmodifiableXXX:Collection,List,Set,Map...Guava:ImmutableXXX:Collection,Lis...原创 2018-04-30 10:34:18 · 164 阅读 · 0 评论 -
java基础---final常犯错误
final关键字:类、方法、变量 修饰类:不能被继承,详情看String类 修饰方法:1、锁定方法不被继承类修改;2、效率 修饰变量:基本数据类型变量不可修改、引用类型变量不能指向其他对象以下是常犯错误:package concurrency.example.immutable;import com.google.common.collect.Maps;import con...原创 2018-04-29 17:19:02 · 310 阅读 · 0 评论 -
java并发---安全发布对象(1)-单例枚举模式(不可变对象)
发布对象: 使一个对象能够被当前范围之外的代码所使用(public),不安全代码如下所示。package concurrency.example.publish;import concurrency.annotations.NotThreadSafe;import lombok.extern.slf4j.Slf4j;import java.util.Arrays;@NotThrea...原创 2018-04-29 10:52:59 · 175 阅读 · 1 评论 -
java并发---原子性对比(syncronized,Lock,Atomic),可见性,有序性
原子性对比synchronized:不可中断锁,适合竞争不激烈,可读性好;Lock:可中断锁,多样化同步,竞争激烈时能维持常态;Atomic:竞争激烈时能维持常态,比Lock性能好;只能同步一个值。可见性Synchronized,volatile有序性happens-before原则 1.程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作; 2.锁定规则...原创 2018-04-28 15:06:23 · 776 阅读 · 0 评论 -
java并发---转:用AtomicStampedReference解决ABA问题
转自:http://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.html在运用CAS做Lock-Free操作中有一个经典的ABA问题:线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不...转载 2018-04-28 10:59:15 · 117 阅读 · 0 评论 -
java并发---AtomicBoolean的方法compareAndSet(仅执行一次)
AtomicBoolean在java.util.concurrent.atomic包下,源代码如下,同样用CAS方法。AtomicBoolean 可用在应用程序中(如以原子方式更新的标志),但不能用于替换 Boolean。即能够保证在高并发的情况下只有一个线程能够访问这个属性值。 /** * Atomically sets the value to the given update...原创 2018-04-28 09:39:11 · 7002 阅读 · 0 评论 -
算法------编程珠玑(ProgrammingPeals)第一章习题(JAVA)
package code_01_chapter;import java.util.Random;import java.util.Scanner;/* *Created by William on 2018/6/14 0014 */public class QuestionsInChapter1 { /** * Q1: * 如果不缺内存,如何使用一个具有...原创 2018-06-17 17:13:19 · 271 阅读 · 0 评论 -
算法------编程珠玑(ProgrammingPeals)第二章习题(JAVA)
package code_02_chapter;import java.util.Arrays;import java.util.Comparator;/* *Created by William on 2018/6/15 0015 */public class Question2InChapter2 { /** * Q1: * 考虑查找给定输入单词的所有...原创 2018-06-17 17:14:04 · 450 阅读 · 0 评论 -
网络通信-----使用浏览器进行全双工通信的 WebSocket
利用 Ajax 和 Comet 技术进行通信可以提升 Web 的浏览速度。 但问题在于通信若使用 HTTP 协议, 就无法彻底解决瓶颈问题。 WebSocket网络技术正是为解决这些问题而实现的一套新协议及 API。当时筹划将 WebSocket 作为 HTML5 标准的一部分, 而现在它却逐渐变成了独立的协议标准。 WebSocket 通信协议在 2011 年 12 月 11 日,被 R...转载 2018-11-10 15:55:02 · 651 阅读 · 0 评论 -
网络通信-----消除Http性能瓶颈的会话层SPYD
在 Facebook 和 Twitter 等 SNS 网站上, 几乎能够实时观察到海量用户公开发布的内容, 这也是一种乐趣。 当几百、 几千万的用户发布内容时, Web 网站为了保存这些新增内容, 在很短的时间内就会发生大量的内容更新。为了尽可能实时地显示这些更新的内容, 服务器上一有内容更新, 就需要直接把那些内容反馈到客户端的界面上。 虽然看起来挺简单的,但 HTTP 却无法妥善地处理...转载 2018-11-10 14:57:41 · 714 阅读 · 0 评论 -
Effective java总结
第二章 创建和销毁对象一、考虑使用静态工厂方法代替构造函数优点: 1.与构造函数不同,静态工厂方法具有名字,增加代码可读性; 2.与构造函数不同,静态工厂每次被调用的时候,不要求非得创建一个新的对象; 3.与构造函数不同,他们可以返回一个返回类型的子类型的对象;(不是很明白)缺点: 1.类如果不含公有(public)的或者受保护(protected)的构造函...原创 2018-10-13 16:21:14 · 274 阅读 · 0 评论 -
强引用、软引用、弱引用、幻象引用有什么区别?
强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?典型回答不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。所谓强引用("Strong" Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域...原创 2018-10-05 17:42:33 · 520 阅读 · 0 评论 -
Spring aop的实现原理
转载:https://www.cnblogs.com/lcngu/p/5339555.html 简介 前段时间写的java设计模式--代理模式,最近在看Spring Aop的时候,觉得于代理模式应该有密切的联系,于是决定了解下Spring Aop的实现原理。 说起AOP就不得不说下OOP了,OOP中引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一...转载 2018-08-12 16:39:27 · 17487 阅读 · 3 评论 -
初级Java工程师面试问题清单
1. sychronized与lock的区别,使用场景,sychronized源码。 简单来说synchronized较为常用,可读性好。lock粒度更细,容易出事,除非性能要求特别高,一般不用lock;2.jvm的minor GC与Full GC触发机制。 Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全世界的暂停(stop-t...原创 2018-08-11 19:48:48 · 7291 阅读 · 3 评论 -
算法------冒泡排序算法优化
代码地址:https://github.com/luoweian/optimalSortingAlgorithm/通用代码,交换两个数的位置 public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; ...原创 2018-06-27 21:03:34 · 191 阅读 · 0 评论 -
算法------编程珠玑(ProgrammingPeals)第四章习题(JAVA)
package code_04_chapter;import java.math.BigDecimal;/* *Created by William on 2018/6/19 0019 */public class QuestionsInChapter4 { static int[] ints = new int[10]; public QuestionsInCha...原创 2018-06-19 20:46:16 · 240 阅读 · 0 评论 -
算法------java---使用异或交换数组的两个数,速度快
使用异或交换数组的两个数,速度快 public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; }将arr[i]=a,arr[j]=b,代入:...原创 2018-06-25 20:26:26 · 611 阅读 · 0 评论 -
算法------编程珠玑(ProgrammingPeals)第三章习题(JAVA)
package code_03_chapter;import java.math.BigDecimal;import java.math.RoundingMode;import java.text.DateFormat;import java.text.DecimalFormat;import java.text.ParseException;import java.text.Sim...原创 2018-06-18 21:44:42 · 378 阅读 · 0 评论 -
java并发---转载:jdk1.8 LongAdder源码学习
转自:https://blog.csdn.net/u011392897/article/details/60480108LongAdder是jdk8新增的用于并发环境的计数器,目的是为了在高并发情况下,代替AtomicLong/AtomicInt,成为一个用于高并发情况下的高效的通用计数器。高并发下计数,一般最先想到的应该是AtomicLong/AtomicInt,AtmoicXXX使用硬件级别的...转载 2018-04-27 17:25:41 · 148 阅读 · 0 评论 -
java并发---CAS(compareAndSwap)
java并发编程为了保证多线程对同一变量操作时的同步性,一般会将该变量置为atomic类型的变量,AtmoicXXX使用硬件级别的指令 CAS 来更新计数器的值,这样可以避免加锁,机器直接支持的指令,效率也很高。比如int类型的变量会更改为AtomicInteger类型,如下图count变量所示,意思是实现count++;该AtomicInteger类型封装了一系列方法,点击进去可知,调用unsa...原创 2018-04-27 16:19:54 · 275 阅读 · 0 评论 -
java并发--- 转:BlockingQueue
· 前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结...转载 2018-05-04 16:03:48 · 133 阅读 · 0 评论 -
java并发---转:深入剖析ThreadLocal
原文链接:http://www.cnblogs.com/dolphin0520/p/3920407.html 想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录大纲...转载 2018-04-30 16:07:32 · 125 阅读 · 0 评论 -
数据结构---完全二叉树的性质
原创 2018-03-10 23:29:15 · 404 阅读 · 0 评论 -
java---反射机制(重要)
网上将了很多反射的概念,理论的东西很难吃透,不如直接上代码。不过有一点是得重视的,反射是框架设计的灵魂跟着写一遍代码才算真会一、新建类package reflection;public class Person { private String name = "Tom"; //公有属性 public int age = 18; public Person(){}...原创 2018-03-16 22:11:03 · 304 阅读 · 0 评论 -
操作系统---进程之间通信都有哪些方式?
用于进程间通讯(IPC)的四种不同技术: 1. 消息传递(管道,FIFO,posix和system v消息队列) 管道pipe:管道是单个进程创建的,它却很少在单个进程内使用。管道的典型用途是:两个进程(一个父进程,一个子进程)提高进程间通信的手段。 管道没有名字,它只能用于有一个共同祖先进程的各个进程之间。两个无亲缘关系的进程间是不能通过管道进行IPC的。在unix中,FIFO类似...原创 2018-03-10 17:17:30 · 432 阅读 · 0 评论 -
操作系统---静态重定位和动态重定位
对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位。 优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。 缺点:(1)程序的存储空间只...原创 2018-03-10 16:28:49 · 13303 阅读 · 2 评论 -
数据库---数据库优化
1.数据库表结构设计,以实际应用为前提的下遵循范式规则,对某张表设计时,考虑数据量大小是否需要分区功能,对于经常访问的表是否需要建立索引;2.基础框架设计,对体系结构进行选型,是使用传统的Clinet/Server两层体系结构,还是使用Browser/web/Database的三层体系结构,还是选用其他更复杂的体系结构;3.sql语句的优化,sql的执行效率最终决定了数据库的性能。比如ORACLE...原创 2018-03-15 10:23:40 · 140 阅读 · 0 评论 -
数据结构---总结及常用排序算法
排序零、Colletion接口包含(List, Set, Map)常数时间<O(LogN)<线性时间<大量时间一、表、栈、队列一般实现类型:1.数组2.链表Java常用封装类:ListArrayList:插入、删除花费大量时间O(N^2),查找花费常数时间(末端插入的话与链表花费一样时间),搜索慢(花费线性时间)LinkedList:插入、删除花费常数时间,查找效率不如数组,搜索...原创 2017-06-10 20:10:58 · 291 阅读 · 0 评论 -
操作系统---线程、进程,资源调度,资源调度算法
1.为什么使用多线程,而不是进程?2.选择调度算法原则3.选择调度算法原创 2017-08-09 15:35:24 · 1122 阅读 · 0 评论 -
java---位移运算
位运算比一般数学运算的常数项效率高一些,可用于底层代码的优化。一、左移1 << b 等于2的b次方, 假设8位,1在二进制中为00000001,<<为左移的意思,1 << 3就是左移三位的意思,也就变成00001000,换成十进制等于8,也就等于2的三次方。二、右移10>>b等于10/(2^b),假设8位,10在二进制中为00001010,右移两位的...原创 2018-04-14 16:41:51 · 408 阅读 · 0 评论 -
java并发---线程封闭-基于SpringBoot的ThreadLocal的实现
线程封闭一般通过以下三个方法: 1.Ad-hoc线程封闭:程序控制实现,最糟糕,忽略 2.堆栈封闭:局部变量,无并发问题 3.ThreadLocal线程封闭:特别好的封闭方法方法2是最常用的,变量定义在接口内,本文主要讲解方法三。本例程是基于SpringBoot框架,并使用两个拦截器,分别为Filter和HandlerInterceptorAdapter 第一步,先定义...原创 2018-04-30 19:04:26 · 4607 阅读 · 1 评论 -
java并发--- 转:Callable、Future和FutureTask
转载地址:https://blog.csdn.net/javazejian/article/details/50896505创建线程的方式有两种,一种是实现Runnable接口,另一种是继承Thread,但是这两种方式都有个缺点,那就是在任务执行完成之后无法获取返回结果,从JAVA SE 5.0开始引入了Callable和Future,通过它们构建的线程,在任务执行完成后就可以获取执行结果,今天我...转载 2018-05-04 15:07:56 · 170 阅读 · 0 评论 -
java并发---用JMeter高并发测试接口
postman做高并发测试还是太鸡肋,用专业的JMeter来测试。首先添加线程组。 填好参数添加http请求选好以下参数添加监听器添加查看结果树打开log viewer点击开始即可,然后点击Graph Results 和查看结果。...原创 2018-04-26 16:32:24 · 4494 阅读 · 0 评论 -
java并发--- AQS下的ReentrantReadWriteLock和StampedLock
ReentrantReadWriteLock 是ReadWriteLock接口的实现类。ReadWriteLock接口的核心方法是readLock(),writeLock()。实现了并发读、互斥写。但读锁会阻塞写锁,是悲观锁的策略。JDK1.8下,如图ReentrantReadWriteLock有5个静态方法:Sync:继承于经典的AbstractQueuedSynchronizer(传说中...原创 2018-05-03 20:14:17 · 385 阅读 · 0 评论 -
java并发---转:ReenTrantLock可重入锁(和synchronized的区别)总结
ReenTrantLock可重入锁(和synchronized的区别)总结来源:https://blog.csdn.net/qq838642798/article/details/65441415可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数...转载 2018-05-03 16:46:18 · 192 阅读 · 0 评论 -
java并发---并发的基本概念
并发: 同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时“存在”的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器核上,因此可以同时运行。高并发(High Concurrency): 是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很...原创 2018-04-25 17:22:41 · 5095 阅读 · 0 评论 -
java并发---AbsractQueuedSynchronizer - AQS
AbsractQueuedSynchronizer - AQS谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)!本文介绍CountDownLatch、Semaphore、CyclicBarrier的原理和用法。它的两种底层数据结构如下: 使用Node实现FIFO队列,可以用于构建锁和或者其他...原创 2018-05-03 11:05:18 · 164 阅读 · 0 评论 -
java并发---线程不安全类及其对应安全的并发容器J.U.C
线程安全-并发容器J.U.C线程不安全--------->线程安全的并发容器ArrayList----------->CopyOnWriteArrayListHashSet------------>CopyOnWriteArraySetTreeSet------------->ConcurrentSkipListSetHashMap----------->Concur...原创 2018-05-01 21:58:46 · 231 阅读 · 0 评论