- 博客(97)
- 资源 (2)
- 收藏
- 关注

原创 深入理解Java并发1——Java内存模型和volatile型变量
一 概念(1)Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量(线程共享的)存储到内存和从内存中取出变量这样的底层细节。 (2)Java内存模型规定了所有的变量都存储在主内存 ,每条线程还有自己的工作内存 ,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、 赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变...
2017-03-07 21:21:37
545

原创 深入理解Java并发4——synchronized关键字
一 概述 由博客(http://blog.youkuaiyun.com/xiaowang627/article/details/60584428),我们已经体验到synchronized关键字的强大之处,该关键字是Java中解决并发问题最常用的方法,也是最简单的方法,该关键字有三种用法:(1)修饰普通方法。(2)修饰静态方法。(3)修饰代码块。二 修饰代码块 2.1 先看...
2017-03-07 13:36:35
1363

原创 Java源代码阅读——HashMap实现原理
一 概述public class HashMap extends AbstractMap implements Map, Cloneable, Serializable基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现不是同步的。如果多个线程同时访问一个哈希映射,而其中至少
2017-03-03 21:45:40
486

原创 深入理解Java虚拟机——Java内存区域
一、运行时数据区 Java虚拟机在执行Java程序的过程中会把虚拟机所管理的内存划分为若干个不同的数据区域。 1.1 程序计数器 (1)可理解为当前线程所执行的字节码(.class文件)行号(地址)指示器。通过改变计数器的值选取下一条需要执行的字节码指令。(2)一个处理器的一个核在任何一个确定的时刻都只会执行一条线程中的指...
2017-02-20 12:12:42
681
原创 网络结构——BatchNorm
写作目的BatchNorm看了好几遍,一直没有理解透彻,最近OppenMMLab发布了BN的pytorch源码解读,跟着其理了一遍BN的实现,有了新的理解,特此记录。BatchNorm设计初衷神经网络训练难的一个原因—— internal covariate shift(在训练过程中,由于前面层的参数改变导致每层的输入分布在不断改变)。优势1:允许使用更大的学习率——训练更快。(1)能阻止大学习率使得参数发生大的变化后,输出落入非线性函数的饱和区域。(2)大的学习率相当于放大了参数,这样会增加反
2021-02-14 13:32:45
1490
原创 数据结构回顾——时间复杂度分析
程序运行时间受输入规模函数和输入数据分布等因素影响,通常把程序的运行时间描述成输入规模的函数:T(n),一个算法在特定输入上的运行时间是指执行的基本操作数或步数。
2017-10-23 10:21:17
772
原创 设计模式——命令模式
一 引入问题:如何对一个对象类的操作进行解耦,使他们的执行可以动态地安排。解决:定义一个统一的命令接口,让具体命令对象类的解耦操作。二 类图三 实例继续考察上一遍博文中,数据库连接的实例,在MySqlImpl类中,有四个方法,但是通常远远不止四个方法,如果全写在这一个类中,类将会变得难以理解和维护,所以将其每个方法变为一个类:3.1 Co
2017-05-31 23:36:19
693
原创 设计模式——桥接模式
当实现改变时,想保持稳定的客户端接口。如数据库访问器DBMgr,使得数据库访问与具体业务逻辑分离,并且可灵活添加其它数据库。
2017-05-31 21:49:39
474
原创 Java Socket简单实例
一 服务器端Server.javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;pub
2017-05-26 18:00:41
394
原创 设计模式——汇总篇
设计模式学习笔记,不断完善中。。。。设计模式共分为三类:一 创建型模式(1)单例模式(singleton):http://blog.youkuaiyun.com/xiaowang627/article/details/60488795(0)简单工厂:http://blog.youkuaiyun.com/xiaowang627/article/details/61420120(2)工厂方
2017-05-21 20:40:14
388
原创 JAVA动态代理机制简单应用
Java动态代理机制使得Java开发人员不用手工编写代理类,只要简单的指定一组接口(抽象角色)和委托类(真实角色)对象,便能动态的获得代理类。代理类会负责将所有的方法调用分派到真实角色上反射执行,在分配执行的过程中,开发人员还可以按需调整委托类对象及其功能。
2017-05-19 09:36:49
320
原创 设计模式——代理模式
在任何时候,只要你想将额外的操作从“实际”对象中分离到不同的地方,特别是当你希望能够很容易的做出修改——从没有使用额外操作转为使用这些操作,或者反之。代理就显得很有用。如你希望度量一段代码的执行时间,而又不想将代码合并到应用中。
2017-05-18 17:09:35
353
原创 TCP/IP协议族——单播路由选择协议RIP、OSPF、BGP
每个自治系统内部可以选择一个或多个域内路由选择协议来处理本自治系统内部的路由选择,但是,处理自治系统之间的路由选择只能使用一种域间路由选择协议。一 距离向量路由选择协议RIP
2017-05-12 21:07:41
2228
原创 信息安全——安全威胁
一 入侵的目的(1)执行进程(2)获取文件和数据(3)获取超级用户权限(4)进行非授权操作(5)使系统拒绝服务:使目标系统中断或者完全拒绝对合法用户,网络,系统或其他资源的服务。(6)篡改信息(7)披露信息、二 入侵过程(1)窥探设施(2)攻击系统三个层次的攻击:针对操作系统的攻击,针对应用软件的攻击,针对网络的攻击。(3
2017-05-02 21:21:04
4025
原创 信息安全——消息认证与数字签名
消息认证和数字签名是为防止以下情况:(1)伪造:从假冒信源向网络插入消息。(2)内容修改:消息内容被插入、删除、变换等。(3)顺序修改:重组消息序列。(4)时间修改:消息延迟或重放。(5)否认:否认收到消息或否认发送过消息。
2017-05-01 20:59:43
14129
原创 信息安全——非对称密码体制
经典密码(包括现代对称密码)都建立在基本的替代和置换工具的基础上。公钥密码体制是基于数学中的单向陷门函数。公钥密码体制采用了两个不同的秘钥这对在公开的网络上进行保密通信、秘钥分配、数字签名和认证有着深远的影响。
2017-05-01 11:28:57
4087
原创 TCP/IP协议族——网际控制报文协议ICMP
一 引入目的IP协议没有差错报告或差错纠正机制;IP协议还缺少主机和管理查询所需要的机制。ICMP是设计来弥补上述两个缺憾的。备注:ICMP本身是一个网络层协议,但是ICMP报文首先要封装成IP数据报(协议字段是1),然后才被传递到下一层。二 报文2.1 分类ICMP报文可划分为两大类:差错报告报文和查询报文。差错报告报文:报
2017-04-18 19:52:19
1063
原创 云计算1——初识Docker
一 概述个人主机时代——CPU主频的高低和内存的大小;云计算时代——虚拟化技术。虚拟化既可以通过硬件模拟来实现,也可以通过操作系统来实现。容器虚拟化方案,充分利用了操作系统本身已有的机制和特性,可以实现轻量级的虚拟化,Docker是其中佼佼者。二 什么是Docker2.1 Docker开源项目Docker是基于Go语言实现的云开源项目
2017-04-14 09:15:17
976
原创 TCP/IP协议族——网际协议版本4(IPv4)
一 概念IP是TCP/IP协议族在网络层使用的传输机制,是一种不可靠的无连接数据报协议(尽最大努力交付),它依靠更高层的协议来解决可靠性问题。二 数据报网络层的分组称为数据报,数据报是一个可变长度的分组,它由两部分组成:首部和数据。如下图所示:VER:版本,目前为4。HLEN:首部长度,以4字节为单位,最小长度为20字节。总长度:以字节为单位
2017-04-03 11:46:30
3883
原创 TCP/IP协议族——IP分组的交付和转发
一 交付网络层监视底层物理网络对分组的处理过程,把这种处理定义为分组的交付,分直接交付和间接交付。1.1 直接交付分组的终点是一台与交付者连接在同一个网络上的主机。直接交付发生在两种情况下:a.分组的源点和终点都在同一个物理网络上。b.最后一个路由器与目的主机之间进行交付。如何判断是否为直接交付?
2017-04-02 10:22:54
2375
原创 算法导论——各种排序算法Java实现
一 插入排序1.1 算法实现: class InsertSort { public void sort(int[] arrToSort){ int curIndex,insertIndex; int curNum; if(arrToSort.length<=1) return; for(curIndex=1;curIndex<arrToSo...
2017-03-26 22:51:37
395
原创 TCP/IP协议族——底层技术
导言:虽然TCP/IP协议族通常被表示为一个五层协议栈,但实际上只定义了上三层,因为TCP/IP只关心网络层、运输层和应用层。物理层和数据链路层为底层技术。一 有线局域网1.1 以太网帧和MAC地址以太LAN网中发送的分组称为帧,说明如下:(1)帧格式:包含7个字段,以太网不提供任何机制来确认收到的帧,因此以太网是不可靠的媒体。(2)帧长度(首部和尾部算18个字
2017-03-26 15:31:13
2717
原创 TCP/IP协议族——OSI模型和TCP/IP协议族
导言:1990年以前,在数据通信和组网文献中占主导地位的分层模型是开放系统互连(Open Systems Interconnection,OSI)模型,现在TCP/IP协议族成为了占主导地位的商用体系结构。一 OSI七层模型1.1 物理层涉及到接口和传输媒体的机械和电气规约,负责把逐个的比特从一跳移动到下一跳,该层关心一下内容:(1)接口和媒体的物理特性:定义了设备
2017-03-25 22:51:22
1596
原创 ThinkingInJava——并发之Thread,Executor,Callable
一 Thread类将Runnable对象转换为工作任务的传统方式是把它提交给一个Thread构造器,调用Thread对象的start()方法为该线程执行必需的初始化操作,然后调用Runnable的run()方法,以便在这个新线程中启动任务。start()方法调用后会立即返回当前线程,而由其它线程去执行run()方法。练习1:实现一个Runnable。在run()内部打印一个消息,然
2017-03-25 13:29:53
534
原创 数据库系统实现——索引结构
一 概述索引的目的:按给定查找键值快速定位记录。二 顺序文件上的索引2.1 顺序文件2.1.1 概念记录按查找键排序(可二分查找)。2.1.2 密集索引概念:每个记录都有一个索引项,索引项按查找键排序。查找方法:查找索引项,跟踪指针即可
2017-03-14 14:09:25
848
原创 设计模式——责任链模式
一 场景想象一个求职过程:(1)求职者(Client)提交简历给机器进行第一次筛选,筛选成功后提交给主管。(2)主管进行一轮面试,对简历再次评级,拒绝评级差的,评级好的提交给经理。(3)经理进行二轮面试,对简历再次评级,拒绝评级差的,评级好的提交给总监。(4)总监进行三轮面试,对简历再次评级,拒绝评级差的,评级好的通过面试(hr面暂时免了)。二 代码
2017-03-12 16:05:46
446
原创 深入理解Javaweb——Web请求过程
一 HTTP请求的本质发起HTTP请求即建立Socket连接,只不过outputStream.write写的二进制字节数据格式要符合HTTP,浏览器在建立Socket连接之前,必须根据地址栏里输入的URL的域名DNS解析出IP地址,在根据这个IP地址和默认的80端口与服务器建立Socket连接,然后浏览器根据这个URL组装成一个get类型的HTTP请求头,通过output
2017-03-11 22:14:27
1889
原创 设计模式——工厂方法模式
一 为什么要工厂方法模式1.1 简单工厂模式代码经过上一篇博文对简单工厂的分析,已经体会到简单工厂所带来的遍历之处,依然考虑上一篇博文的例子:一个学生类,一个铅笔类,一个橡皮类,每名学生需要一支铅笔,一个橡皮:public abstract class Stationery { public Stationery(){ }}publi
2017-03-11 20:04:40
320
原创 设计模式——简单工厂模式
一 为何要工厂模式百度百科:替代new,避免代码中出现大量的new。but,为什么要替代new呢?new又简单又方便。。。。下面通过代码讲解,原始的代码包括三个类,一个学生类,一个铅笔类,一个橡皮类,学生需要3支铅笔和2块橡皮。1.1 用new的代码public class Eraser { public Eraser(){ System.ou
2017-03-11 17:40:53
378
原创 设计模式——单例模式
一 单例模式特点 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。基于以上特点,单例模式可用于:线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序等。二 简单的单例模式public class Singleton { private Singleton(){} //使构造器对
2017-03-09 00:06:34
346
原创 Java源代码阅读——字符串相关
一 String类 字符串存贮在一个final数组value中,并且未对外提供修改其内元素的方法,所以String类是不可变的。 private final char value[]; 1.1 构造方法 public String() { this.value = "".value;}...
2017-03-08 13:02:12
302
原创 深入理解Java并发3——线程安全与锁优化
一 线程安全定义当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的 。——Brian Goetz ;二 Java中的线程安全按照线程安全的“安全程度”由强至弱来排序,我们可以将Java语言中各种操作共享的数据分
2017-03-08 00:09:21
647
原创 深入理解Java并发2——Java线程实现原理
一 线程的实现 1.1 概念 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、 文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。1.2 线程的实现方式 1.2.1 使用内核线程实现 (Java)这种实现方式线程直接由操作系统内核支持。程序一般不会...
2017-03-07 22:29:18
3775
原创 深入理解Java并发4——通过代码理解并发
一 为什么需要多线程控制看代码:package mutithread;public class ThreadTest { private static int count=0; public static void addCount(){ for(int i=0;i<100;i++){ ++count; } } public static void m
2017-03-06 21:00:28
403
原创 深入理解Java虚拟机——类加载机制
一 概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、 转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、 连接和初始化过程都是在程序运行期间完成的 。二 类加载的时机 2.1 类的生命周期 图片来源于《...
2017-03-05 01:16:26
462
原创 Java源代码阅读——ArrayList实现原理
一 概述public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable可见它实现List接口,其底层使用数组保存所有元素,其操作基本上是对数组的操作。此实现不是同步的。如果多个线程...
2017-03-03 16:58:33
509
原创 Java源代码阅读——Object类
一 概述类Object是类层次结构的根类。每个类都使用object作为超类。所有对象(包括数组)都实现这个类的方法。二 构造方法Object();三 方法3.1 clone
2017-03-03 16:16:53
491
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人