- 博客(29)
- 收藏
- 关注
原创 迭代器模式
迭代器模式java中的迭代器 用的就是迭代器模式,foreach 底层也会被优化成迭代器ArrayList next/remove/hasNext源码private class Itr implements Iterator<E> { //下一个返回的元素索引 int cursor; // index of next element to return /最后一个返回的元素索引. -1 int lastRet = -1; //
2020-11-14 16:45:19
113
原创 不可变设计模式
不可变对象模式对于java中的String和包装类型(比如Integer)的对象都是不可变的.不可变对象最核心的地方在于不给外部修改共享资源的机会,所以其一定是线程安全的.如何实现不可变对象?类应该被声明为final的,避免被继承,然后重写方法所有的成员变量都被声明为private final的,避免被修改引用不提供可以改变类成员变量的方法,所有修改成员变量的方法都返回一个新的该类对象构造函数不要引用外部的可变对象,如果需要引入外部变量,则应该在构造函数里进行defensive copy,也
2020-11-14 16:43:15
178
原创 RocketMq和QMQ
文章目录rocketMq物理部署结构逻辑部署结构持久化方式存储介质消息的存储和发送1. 消息存储2. 消息发送文件系统数据存储结构CommitLogConsumeQueueIndexFile消费模式1. 集群模式2. 广播模式负载均衡发送负载均衡订阅消息负载均衡集群模式广播模式刷盘模式异步刷盘同步刷盘高可用机制消息发送高可用消息消费高可用主从复制同步复制异步复制高可用总结Pull/Push消费事务消息事务消息的发送事务补偿事务消息的状态例子使用限制顺序消息QMQQMQ的消息存储模型事务实现持久化方式roc
2020-11-14 16:39:24
1378
原创 Volatile
Volatilevolatile 作用禁止指令重排可见性JVM层面实现jvm实现volatile是使用指令屏障实现的汇编层面实现[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opiQdYpm-1602603909947)(图片/Volatile/image-20201009233018270.png)]汇编使用lock指令实现+MESI缓存一致性协议实现的Lock指令相当于一条内存屏障,指令重排时,不能把后面的指令重排到内存屏障之前的位置.以前的CP
2020-10-13 23:46:23
127
原创 AQS及其实现类源码
AQS及其实现类源码阅读文章目录AQS及其实现类源码阅读AQSUnsafe.park()/Unsafe.unPark()CountDownLatchSemaphore信号量AQS参考https://mp.weixin.qq.com/s/trsjgUFRrz40Simq2VKxTAAQS是定义了一个抽象的队列同步器,java并发包中几乎所有的工具都依赖于AQS实现,它由一个整形状态state和一个先入先入的队列组成,线程进来时会判断state状态,并尝试用cas来修改state来决定是否能获取锁,还
2020-10-13 23:40:43
175
原创 HashMap源码阅读
hashMap源码解读文章目录hashMap源码解读常量数据结构哈希码计算添加元素resize构造函数tableSizeForget1.7 尾插法扩容为什么会有死循环常量常量名类型默认值描述DEFAULT_INITIAL_CAPACITYint1<<4 = 16默认初始化容量大小MAXIMUM_CAPACITYint1<<30table最大长度,超过这个容量不再对table扩容DEFAULT_LOAD_FACTORfloat0
2020-10-13 23:39:05
91
原创 ThreadLocal
ThreadLocal ThreadLocal 是 java提供的一种线程内部数据存储方案,通过ThreadLocal实例提供的get()/set(T)方法可以操作Thead类中的TheadLocalMap实例.从而在Thread内部存储线程私有的数据. Thread类内部定义了两个 ThreadLocal.ThreadLocalMap类变量,来保存线程数据publicclass Thread implements Runnable { ThreadLocal.ThreadLocalMa
2020-10-13 23:37:41
118
原创 拉格朗日乘子法、对偶、KTT
拉格朗日乘子法、对偶、KTT一般情况下,最优化问题分为三类一、 无约束条件下的最优化问题这种最优化问题比较简单,直接求导为0就可以得到。二、 等式约束下的最优化问题即除了目标函数之外,还有一些约束条件。假设目标函数为f(x)f(x)f(x),约束条件为hk(x)h_k(x)hk(x),这里的kkk用来表示有kkk个约束条件。minf(x)minf(x)minf(x)s.t.hk...
2019-03-17 00:30:48
1467
原创 Ubuntu16+jJDK8+IDEA18+GIT
# 7-19日报###安装Ubuntu16.04双系统 1. 主要用到的工具:easybcd,UltraISO,ubuntu16.04镜像,安装的其他软件:jdk,idea,git,输入法,Qtalk等必要软件. 2. 首先为了避免直接安装ubuntu覆盖掉windows的引导,在硬盘的未分配的扇区中创建了一个200M的区域用于存放ubuntu引导. 3. 之后使用eas...
2018-08-01 18:11:44
360
原创 java进程池
java线程池:ThreadPoolExecutor自定义线程池,按照不同策略创建ThreadPoolExecutor类对象它的构造方法如下 public ThreadPoolExecutor(int corePoolSize,//核心线程池大小,初始化时创建多少线程 int maximumPoolSize,//线程池最多有多少线程
2017-08-16 11:15:18
2440
1
原创 java虚拟机锁的升级和比较
锁的升级和比较无状态锁(01)–>偏心锁(10)–>轻量级锁(00)(自旋锁)–>重量级锁偏心锁:即偏向于第一个获得该对象锁的线程,如果在这个线程获得偏向锁后,之后只要该锁没有被别的线获取,则持有该偏向锁的线程将永远不需要被同步 偏向锁的MarkWord中包含:线程ID、epoch、对象分代年龄、是否偏心锁(1)、锁标志位(01)偏向锁的获得: 当锁对象第一次被获取时,如线程1访问同步快,
2017-07-21 22:34:03
1026
原创 线程和进程,以及用户线程映射
内核空间:供操作系统内核使用用户空间:供各个进程使用,并且所有进程共享进程:一个CPU上有多个线程,代表一个应用程序,是系统进行资源分配和调度的基本单位,在CPU上使用时间片轮转法进行切换调用,多个进程共享所有的系统资源线程:一个进程包含多个线程,共享进程资源.线程是CPU上被调度执行的试题,线程共享进程的地址空间,但线程也有独立栈帧用于存放被调用还没返回的过程使用内核态:操作系统内核所运行
2017-07-19 10:06:35
835
原创 快速排序java
package jianzhioffer;import java.util.Arrays;public class QuickSort { // 一次排序 public static int partition(int data[], int start, int end) { if (data.length <= 0 || start < 0 ) {
2017-07-06 12:00:03
177
原创 java线程join()源码中wait()和isAlive()的问题
public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new Illega
2017-07-01 19:21:36
953
2
原创 CodeM4
package test;import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class BCode4 { public static int max = 0;public static void main(String[] args) { Scanner sc =
2017-06-18 22:03:49
168
原创 this和currentThread的区别
this和currentThread的区别* this是当前对象,this.getName就是普通的方法调用。* currentThread是获得当前线程的引用,this.getName是使用当前线程的getName方法* 在Thread类的构造函数thread(Runnable thread)是将对象传递给了thread类中的一个target对象,在run中运行的也是这个target对象的方法
2017-06-17 21:57:33
277
原创 caffe安装+使用places365进行迁移学习
caffe安装+使用places365进行迁移学习安装ubuntu caffe cuda7.5 cudnn4.5由于最近需要使用places365模型,是由caffe搭建了,所以又重装了次电脑,悲催。。。安装ubnutu 分区 固态硬盘sda boot 400m ext4swap 32g/ 固态硬盘剩余所有空间 ext43t机械硬盘sdb,在try ubuntu中找到磁盘应用进行
2017-05-28 17:28:22
1612
原创 深入理解jvm一书总结
深入理解jvm一书总结第二章 内存管理机制* 内存中的运行数据区域分为以下几部分 * 线程私有的3种 * 程序计数器 用于切换线程时恢复现场 * java虚拟机栈 每个方法运行时创建一个栈帧,存储局部变量表,操作数栈,动态链接,方法出口灯 * 本地方法栈 存储本地方法 * 线程共享的 * java堆 几乎所有的对象实例
2017-05-21 11:30:53
580
原创 题三:二维数组查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 /* * 方法:从右上角开始查询,比右上角的数字大,则该行排除,比右上角的数字小,则该列排除 */ public class test3 { public static boolean Find(int target,
2017-05-04 00:31:22
175
原创 剑指offer 题2 单例模式
懒汉式–第一次调用时加载 1. 第一版 上来没有想很多,直接敲起,使用synchronized保证线程安全,代码如下: public class Single{ private static Single instance; //将构造函数声明称私有的 private Single(){};
2017-04-29 01:25:59
270
原创 读取数据
数据读取TensorFlow的数据供给机制允许你在TensorFlow运算图中将数据注入到任一张量中通过给run()或者eval()函数输入 feed_dict 参数, 可以启动运算过程。虽然你可以使用常量和变量来替换任何一个张量, 但是最好的做法应该是使用 placeholder op节点设计 placeholder 节点的唯一的意图就是为了提供数据供给(feeding)的方法。placeho
2017-04-25 11:36:14
343
原创 tensorflow基本只是
tf.placeholder()操作用于定义一种必须提供值得tensor,冰爷可以随意限定他们的shape.Session.run() 和Tensor.eval()t是一个tensor对象,t.eval就是sess.run(t)Tensor 的一个方法,返回 Tensor 的值。触发任意一个图计算都需要计算出这个值。只能在一个已经启动的会话 的图中才能调用该 Tensor 值。 下面是等效
2017-04-25 11:33:30
188
原创 variable
变量Variable变量用于存储和更新参数,是内存中用于存放张量(Tensor)的缓存区,必须明确的初始化,并能在训练过程种和结束后保存到磁盘. * 创建 需要传入一个初始和shape 你将一个 张量 作为初始值传入 Variable() 构造函数。TensorFlow提供了一系列操作符来初始化张量,初始值是常量或是随机值import tensorflow as tf# Crea
2017-04-25 11:29:40
392
原创 tensorBoard 可视化工具
tensorBoard 可视化工具数据序列化 Tensorflow通过读取Tensorflow的时间文件来运行. 1.创建你想汇总数据的 TensorFlow 图,然后再选择你想在哪个节点进行汇总(summary)操作。通过向节点附加scalar_summary操作来分别输出学习速度和期望误差tf.scalar_summary(tags, values, collections=None,
2017-04-25 11:28:59
362
原创 tesnorflow的基本使用
Tensorflow基本:使用图 (graph) 来表示计算任务.在被称之为 会话 (Session) 的上下文 (context) 中执行图.使用 tensor 表示数据.通过 变量 (Variable) 维护状态.使用 feed 和 fetch 为任意操作输入和输出数据.基本使用综述 使用图来表示计算任务,图中的节点称为op(operation),图必须在会话里被启动,会话将图的
2017-04-25 11:28:24
586
原创 java反射
反射三种方式获得Class对象四个方法获取Class对应类包含的构造器,获得构造器后可以用newinstance方法创建对象Constructor getConstructor(Class... parameterTypes) 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。Constructor[] getConst
2017-04-25 11:21:40
147
原创 java迭代中的并发修改错误
并发修改ConcurrentModificationException错误是开发中一个常见错误,多发生在对一个Collection边遍历边做影响size变化的操作中,当在迭代过程中,集合的大小发生了改变,就没有办法进行正常迭代了.就会报这个错误//http://blog.csdn.net/wchicho/article/details/51987992ArrayList初始数据如下。List<I
2017-04-25 11:16:36
280
原创 装饰设计模式
装饰设计模式,是在不改变原类的情况下,动态修改或者扩展原类的功能. 步骤: 1.编写一个类并实现与原类相同的接口(或者继承该接口的包装类,目的是能够实现原类的方法) 2.在类中声明一个原类的引用.(目的为了能够在包装类中调用原类的功能) 3.定义构造方方法,一般构造方法的参数为被包装类对象,将赋值给步骤2中声明的引用 4.实现方法: 对于不需要修改的方法,使用声明的那个引用调用原
2017-03-05 22:18:49
143
原创 使用数组实现乘法
问题描述 输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。 首先将a设为1,然后乘2,乘3,当乘到n时,即得
2017-03-04 17:06:52
3970
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人