自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 HMM基本概念

HMM有五个基本要素,三个假设和解决的三个问题:首先看下HMM的五个基本要素:HMM是个五元组 λ =( S, O , π ,A,B)S:状态值集合,O:观察值集合,π:初始化概率,A:状态转移概率矩阵,B:给定状态下,观察值概率矩阵其次,回忆下HMM的三个假设:1、有限历史性假设,p(si|si-1,si-2,...,s1) = p(si|si-1)2、齐次性假设,...

2019-12-23 11:45:43 1675

原创 不修改数组找出重复的数字

1. 题目在一个长度为n+1的数组里的所有数字都在 1~n 的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为 8 的数组 {2,3,5,4,3,2,6,7},那么对应的输出是重复的数字 2 或者 3。2. 思路这道题目可以把 1~n 数字从中间的数字 m 分为两部分,前面一半为 1~m,后面一半为 m+1~n。如果 ...

2019-12-18 22:40:36 140

转载 对象并不一定都是在堆上分配内存的。

JVM内存分配策略关于JVM的内存结构及内存分配方式,不是本文的重点,这里只做简单回顾。以下是我们知道的一些常识:1、根据Java虚拟机规范,Java虚拟机所管理的内存包括方法区、虚拟机栈、本地方法栈、堆、程序计数器等。2、我们通常认为JVM中运行时数据存储包括堆和栈。这里所提到的栈其实指的是虚拟机栈,或者说是虚拟栈中的局部变量表。3、栈中存放一些基本类型的变量数据(int/sho...

2019-11-14 10:52:23 332

原创 Java文件的几种读取、输出方式

1、字节流----对文件读取(速度慢) /** * 字节流---文件的读取,输出(缺点:速度慢) * * @throws Exception */ @Test public void testIO1() throws Exception { // 输入字节流对象 InputStream in =...

2019-11-13 11:01:58 427

原创 happens-before规则和as-if-serial语义

JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这2个操作之间必须要存在happens-before关系。这里提到的2个操作既可以是一个线程之内,也可以是不同线程之间。与程序员密切相关的happens-before规则如下:1、程序顺序规则:一个线程中的每个操作,happens-before于线程...

2019-11-13 10:33:07 153

转载 CopyOnWriteArrayList简介

简介CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,不阻塞读操作,实现读写分离。继承体系CopyOnWriteArrayList实现了List, RandomAccess, Cloneable, java.io.Serializable等接...

2019-11-08 11:25:14 239

原创 朴素贝叶斯

1. 引言贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来。因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口。2. 贝叶斯公式贝叶斯公式就一行:P(Y|X)=P(X|Y)P(Y)P(X)P(Y|X)=P(X|Y)P(Y)P(X)而它其实是由以下的联合概率公式推导出来:P(Y,...

2019-11-06 11:38:01 1198

原创 Spring源码分析之import 标签的处理

Spring 中有两种解析 Bean 的方式。如果根节点或者子节点采用默认命名空间的话,则调用parseDefaultElement()进行默认标签解析,否则调用delegate.parseCustomElement()方法进行自定义解析。所以以下博客就这两个方法进行详细分析说明,先从默认标签解析过程开始,源码如下: private void parseDefaultEleme...

2019-10-30 09:59:12 176

原创 Spring源码分析(2)之IOC原理之统一资源加载

在学 Java SE 的时候我们学习了一个标准类java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而,实际上资源的定义比较广泛,除了网络形式的资源,还有以二进制形式存在的、以文件形式存在的、以字节流形式存在的等等。而且它可以存在于任何场所,比如网络、文件系...

2019-10-30 09:37:30 163

原创 Spring源码分析之IOC原理

简介Spring作为各个大厂面试必问问题,对其了解是必不可少,本文内容是本文在学习Spring的一些总结。本文是SpringIOC文章第一篇,主要介绍IOC各个基础模块与基本概念。什么是IOC?IOC 英文名字为“控制反转”(Inversion Of control),又称依赖注入(Dependency Injection),这里借用百度百科的描述来解释“Class A中用到了Clas...

2019-10-29 23:10:02 194

原创 spring之bean的生命周期

Bean的生命周期是指Bean的创建-->初始化-->销毁的过程。实例化单实例Bean初始化单例方法:销毁

2019-10-29 20:19:46 96

原创 《剑指Offer》求数字或者字母全排列问题

问题描述:输入一个字符串,输出该字符串所有可能的排列方式(全排列);问题解析:字符串全排列问题算是一种找规律的问题,若果我们能找到生成第一个字符排列的方法,那么参考这个方法就可以依次生成其余的字符串排列,不过得强调一点,找到的这个方法必须得满足正确性、互异性和完整性,否则就不能称得上是全排列了。按照每个人的不同思维习惯,字符串全排列的生成方法应该是多样的,有的人喜欢从后往前生成新的排列...

2019-10-29 16:48:34 161

原创 实现一个手写HashMap

Hash散列是将一个任意长度通过某种hash算法转换成一个固定的值。源码分析: 略:手写HashMap:节点的基类接口public interface BaseEntry <K,V>{ public K getKey();//获取键 public V getValue();//获取值}HashMap的基类接口public inter...

2019-10-28 12:25:50 98

原创 对于wait()和notify()的理解

对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有:void notify()Wakes up a single thread that is waiting on this object’s monitor.译:唤醒在此对象监视器上等待的单个线程void notifyAll()Wakes up all threads that ...

2019-10-27 21:01:38 111

原创 Spring源码解析---XML解析

1.获取xml文件的验证模式2.加载XML文件,并得到对应的Document。3.根据赶回的Document注册Bean信息。这三个步骤支撑整个Spring容器的部分实现。1.获取XML的验证模式XML文件的验证模式保证了XML文件的正确性,而比较常用的验证模式有两种:DTD和XSDDTD和XSD区别DTD(Document Type Definition)即文档类型定义,...

2019-10-26 20:59:56 284

原创 浅谈Java的标识接口-Serializable

为什么java中有些interface没有任何方法?在Java语言中,有些接口内部没有声明任何方法,也就是说实现这些接口的类不需要重写任何方法,这些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何语义上的要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型。这个标签类似于汽车的标志图标,每当人们看到一个汽车的标志图标时,就能知道这款汽车的品牌。...

2019-10-23 22:03:40 118

原创 谈谈强引用、软引用、弱引用、幻象引用?

我们知道在Java中除了基础的数据类型以外,其它的都为引用类型。而Java根据其生命周期的长短将引用类型又分为强引用、软引用、弱引用、幻象引用 。正常情况下我们平时基本上我们只用到强引用类型,而其他的引用类型我们也就在面试中,或者平日阅读类库或其他框架源码的时候才能见到。1.强引用我们平日里面的用到的new了一个对象就是强引用,例如 Object obj = new Object();...

2019-10-11 19:42:11 111

原创 线程的并发工具类之Fork/Join

1. 简介Fork/Join 框架是 JDK 1.7 提供的并行执行任务框架,这个框架通过(递归)把问题划分为子任务,然后并行的执行这些子任务,等所有的子任务都结束的时候,再合并最终结果的这种方式来支持并行计算编程。 总体的设计参考了为 Cilk 设计的work-stealing 框架。 Fork/Join 并行方式是获取良好的并行计算性能的一种最简单同时也是最有效的设计技术,是分治算...

2019-10-10 20:52:19 151

原创 Java并发之线程中断

前面的几篇文章主要介绍了线程的一些最基本的概念,包括线程的间的冲突及其解决办法,以及线程间的协作机制。本篇主要来学习下Java中对线程中断机制的实现。在我们的程序中经常会有一些不达到目的不会退出的线程,例如:我们有一个下载程序线程,该线程在没有下载成功之前是不会退出的,若此时用户觉得下载速度慢,不想下载了,这时就需要用到我们的线程中断机制了,告诉线程,你不要继续执行了,准备好退出吧...

2019-10-09 15:41:10 104

原创 可重入锁和不和不可重入锁?

https://blog.csdn.net/u014473112/article/details/82998477

2019-09-29 19:45:18 91

原创 JVM从入门到面试题

1.JVM位置JVM运行在操作系统之上,与硬件没有直接交互。2.JVM体系结构概述3.类加载器ClassLoader 负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否执行,则有Execution Engine决定。我们首先看一下JVM预定义的三种类加载器,当JVM启动的时候,Java...

2019-09-29 18:49:02 129

原创 throwable和exception的区别

throwable和exception的区别:1、throwable是父类,exception是子类。2、throwable是根基,exception是从throwable派生出来的。3、throwable中包括exception(异常)和error(错误)。4、throwable用来定义所有可以作为异常被抛出来的类,exception专指程序本身可以处理的异常,一般性的异常。...

2019-09-29 12:39:54 2343

原创 ReenTrantLock可重入锁(和synchronized的区别)

ReenTrantLock可重入锁(和synchronized的区别)总结ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才...

2019-09-27 17:35:17 86

原创 Semaphore实现原理分析

synchronized的语义是互斥锁,就是在同一时刻,只有一个线程能获得执行代码的锁。但是现实生活中,有好多的场景,锁不止一把。比如说,又到了十一假期,买票是重点,必须圈起来。在购票大厅里,有5个售票窗口,也就是说同一时刻可以服务5个人。要实现这种业务需求,用synchronized显然不合适。查看Java并发工具,发现有一个Semaphore类,天生就是处理这种情况的。先用Sema...

2019-09-26 17:05:32 85

原创 枚举类型介绍

定义Color枚举类:package testEnum;public enum Color { RED(0,"红色"), BLUE(1,"这是蓝色"), YELLOW(2,"这是黄色"), GREEN(3,"这是绿色"); //可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。 //唯一要注...

2019-09-26 16:29:02 148

原创 java.util.ConcurrentModificationException详解

本想翻译一下java.util.ConcurrentModificationException这篇文章的。但发现讲的不够详细深入,查了一些资料后决定自己扩展一下。水平有限,仅仅作为一个学习总结啦。异常产生当我们迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素),可能会抛出java.util.ConcurrentModificationExcepti...

2019-09-24 22:18:08 96

转载 java集合类介绍

原文链接:https://blog.csdn.net/qq_21918021/article/details/88182399一、集合框架1、集合类基础(1)为什么出现集合类?面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储。集合就是存储对象最常用的一种方式。(2)数组和集合都是容器,两者有何不同?数组长度固定,而集合长度是可变的。数组值可以存储对...

2019-09-24 21:12:49 147

原创 ArrayList解决线程不安全问题?

我们都知道ArrayList是一个线程不安全的容器,哪在高并发多线程的情况下可能导致程序错误,可能出现的有三种情况,我们一一来分析一下.static ArrayList list = new ArrayList(1000); @Override public void run() { for (int i = 0;i< 1000; i++ ){...

2019-09-24 20:33:54 623

转载 乐观锁之Atomic系列问题

从多线程并行计算乐观锁 和 悲观锁 来讲,JAVA中的 lock、synchronized 属于悲观锁,即是在操作某数据的时候总是会认为多线程之间会相互干扰,属于阻塞式的加锁;Atomic系列则属于乐观锁系列,即当操作某一段数据的时候,线程之间是不会相互影响,采用非阻塞的模式,直到更新数据的时候才会进行版本的判断是否值已经进行了修改。Atomic在JAVA中的家族如下:a、基本类:Atomi...

2019-09-23 22:41:56 229

原创 CAS相关问题

我们先看一段代码:启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果一定是200吗?因为这段代码是非线程安全的,所以最终的自增结果很可能会小于200。我们再加上synchronized同步锁,再来看一下。加了同步锁之后,count自增的操作变成了原子性操作,所以最终输出一定是count=200,代码实现了线程安全。虽然synchronized...

2019-09-23 22:17:02 287

原创 volatile相关面试题

1.volatile是java虚拟机提供的轻量级的同步机制(1)保证可见性(2)不保证原子性(2禁止指令重排2.volatile 写读的内存语义JMM的过程如下volatile内存语义实现JMM采取保守策略对volatile读写插入内存屏障:1)每个 volatile 写前插入 StoreStore屏障2)每个 volatile 写后插入 StoreLoad屏障3...

2019-09-23 00:32:55 3529

原创 链表反转 (递归方法)

private ListNode reverse(ListNode head){ if (head == null || head.next == null) return head; ListNode temp = head.next;//保存下一个节点 ListNode newHead = reverse(h...

2019-09-21 21:52:49 205 1

原创 《剑指Offer》求数组逆序对

题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。,即输出P%1000000007。例如在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,6},{7,5},{7,4},{6,4},{5,4}。看 到这个题目,我们的第一反应就是顺序扫描整个数组。每扫...

2019-09-20 21:56:14 79

原创 排序之归并排序

归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略。其中分是指将问题分成一些小的问题然后递归求解,而治的阶段则是将分的阶段得到的答案组合在一起。其分治思想如下图所示:已经有序的两个子序列合并称号一个有序序列,如下图要将[4,6,7,8]和[1,2,3,6]两个已经有序的子序列合并为最终序列[1,2,3,4,5,6,7,8,9],实现步骤:代码实现:...

2019-09-20 21:12:32 96

原创 设计模式之装饰者模式

项目需求:星巴克咖啡订单问题 :现有咖啡种类:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)Decaf(五因咖啡)调味:Milk\、Soy、Chocolate需求:客户可以单点咖啡也可以咖啡+ 调料组合,计算其价格较差的方法:缺点,这样设计会有很多类, 涉及到类爆炸问题。装饰者模式解决:...

2019-09-18 23:17:33 71

原创 动态规划01背包算法详解

动态规划算法核心思想: 将大的问题转化为小问题进行解决。01背包问题: 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的重量为W1,W2至Wn,与之相对应的价值为V1V2至Vn。01背包是背包问题中最简单的问题。01背包的约束条件是给定几种物品,每种物品有且只有一个(这个与完全背包不同),并且有价值和重量两个属性。在01背包问题中,因为每种物品只有一个,对于...

2019-09-17 19:00:31 2798 2

原创 设计模式之适配器模式

适配器模式是将某类接口转成成客户端期望的另一个接口表示,主要目的是兼容性,让原本不能再一起工作的两个类可以协同工作。其包装名为Wrapper。主要分为三类:类适配器模式、对象适配器模式、接口适配器模式类适配器模式、对象适配器模式、接口适配器模式基本Adapter类,通过继承src类,实现dst类接口,完成src->dst的适配。1)类适配器应用实例说明...

2019-09-12 00:17:29 91

原创 设计模式原则之依赖倒置原则(DIP)

依赖倒置原则:1.高层模块不应该依赖底层模块,两者都应该依赖其抽象2.抽象不应该依赖细节3.细节应该依赖抽象更为精简的定义:面向接口编程优点:采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。先看看不用依赖倒置原则的:ublic class Driver { //司机的主要职责就是驾驶汽车 publ...

2019-09-11 23:04:05 304

原创 设计模式之原则

单一职责原则:一个类只负责唯一一项职责,尽量设计出功能单一的接口。依赖倒转原则:高层模块不应该依赖底层模块的具体实现,解耦高层与底层。既面向接口编程,当实现发生变化时,只需要提供新的实现类,不需要修改高层代码;开放-封闭 原则:程序对外扩展开放,对修改关闭,当需求发生时,可以添加新模块,而不是修改原来的模块。...

2019-09-11 22:42:12 55

原创 设计模式之代理模式

1.代理模式基本介绍(Proxy)代理模式可以控制目标对象,扩展目标对象的功能。代理模式的不同形式,主要有三种 静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以再内存的动态创建对象,不需要实现接口,也属于动态代理范畴)2.静态代理定义一个接口:ITeachDao;目标对象TeacherDao实现ITeacherDao使用静态代理方式,需要在代理对象Tea...

2019-09-09 00:17:29 120

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除