自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (1)
  • 收藏
  • 关注

原创 JVM垃圾收集机制与内存分配策略总结(上)

参考: https://www.jianshu.com/p/8f5fa8288d9b         java深入理解虚拟机&am

2019-03-17 15:31:02 243

原创 Mysql索引总结

本文针对InnoDB索引总结总结于:掘金小册 MySQL 是怎样运行的:从根儿上理解 MySQL https://juejin.im/book/5bffcbc9f265da614b11b731作者:小孩子4919数据页结构分析InnoDB存储引擎会把表数据存储到磁盘上,当想对数据操作时需要把磁盘上的数据加载到内存中来,为了提高效率,InnoDB不会一条一条的加载,它会以页(16KB)为...

2019-05-23 21:42:54 518

原创 剑指Offer:把数组排成最小的数 (java代码实现)

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路1.暴力解 全排列 列出所有情况下面是代码实现import java.util.ArrayList; public class Solution { String res = Long....

2019-05-23 08:14:08 237

原创 JDK1.7HashMap源码解析

HashMap已经看了很多篇文章了,今天还是自己解析一遍吧。我先大致介绍下HashMap的内部结构再跟着源码解读一番众所周知HashMap的内部就是一个哈希表什么是哈希表?如果我们利用数组可随机访问的特性,将要存入的键通过一种哈希算法转换成一个数字,并把这个数字转换成数组的下标,然后将键和他对应value放入数组中。那么我们再通过这个键查找时,只需要继续利用这个算法,那么我们就只需要用O...

2019-05-22 23:30:57 289

原创 学成总结(分布式事务)

什么是分布式事务?在单体应用中只有一个系统并且操作一个数据库,事务为本地事务,数据库本身就支持了对本地事务回滚的解决方案。在分布式系统中有这2个情况可能会产生分布式事务:多个系统分别有自己的数据库比如订单系统有自己的订单数据库,库存系统有自己的库存数据库当在订单系统中在订单表增加了一条数据之后,如果调用库存系统减库存的时候发生错误,这时候订单系统回 滚是没有用的,因为这是2个系统并...

2019-05-20 11:46:37 332

原创 学成总结(认证和授权)

本项目使用spring scurity + oauth2 + jwt 实现了认证授权完成了单点登录Oauth2是一个标准的开放的授权协议,Spring security 是一个强大的和高度可定制的身 份验证和访问控制框架,Spring security 框架集成了Oauth2协议Oauth2协议包含以下几种角色:1、客户端 本身不存储资源,需要经过认证才能访问资源,比如:学成在线Andro...

2019-05-19 10:55:44 420 1

原创 Rabbitmq的几种工作模式总结

先看下rabbitqmq的基本架构可以看到rabbitmq包含这几个组件生产者 producer消费者 consumerbroker 该消息队列进程 就代表这个消息队列 broker里面包含了重要的2个组件一个是交换机:Exchange一个是队列:Queue下面介绍几种工作模式:简单队列模式不用显示声明交换机,只需声明一个队列生产者指定队列名发送消息给mq,然后...

2019-05-17 20:15:11 6019

原创 学成在线总结(1)

学成在线是一个在线教育平台,提供IT职业课程在线学习,它有门户、课程管理中心、系统管理中心、学习中心等系统。门户系统负责,注册登录、门户首页展示、课程搜索等功能。教学管理中心提供:课程管理、媒资管理、问答管理等功能。系统管理中心提供:CMS页面管理、数据字典、分类管理等功能。本项目采用前后端分离的技术架构、前端采用vue.js+elementui技术栈、后端采用springboot + s...

2019-05-17 09:50:47 6431 1

原创 Redis学习篇之持久化机制

Redis是一款基于key-value的内存数据库,它所有的数据都存在内存中,我们必须采用合适的持久化机制将数据保存在磁盘中,否则一旦服务器重启,宕机,数据就会丢失。Redis提供两种持久化机制:RDB、AOFRDB持久化机制RDB会在某个时间点上将数据库中的数据全部导入到一个.rdb的二进制文件中相当于形成了一份当前数据的快照,这个文件保存在硬盘中,所以服务器启动时就可以加载这个文件还原数...

2019-05-08 15:06:49 234

原创 Redis学习篇之数据库实现和过期策略相关

参考:Redis设计与实现事先声明:本文为对该书的总结。并参考 https://segmentfault.com/a/1190000016951866 作者:java3y数据库相关Redis服务器的服务器状态由redis.h/redisServer结构来表示,其中的redisDb数组代表当前服务器中的所有数据库struct redisServer{ //redisDb数组...

2019-05-08 09:16:42 151

原创 mysql学习篇之锁

参考:高性能Mysql(第三版)java3y:https://segmentfault.com/a/1190000015738121#articleHeader12https://blog.csdn.net/hxpjava1/article/details/79407961介绍锁之前先来简单介绍一下MySQL存储引擎我们知道mysql常见的存储引擎为MyISAM和InnoDB这两种这...

2019-04-29 15:20:28 183

原创 多线程学习篇之Condition实现细节

ReentrantLock提供Condition来实现和wait notify类似的等待通知功能。 使用condition可以实现有选择的通知,在使用notify/notifyAll()方法进行通知时,被通知的线程是由 JVM 选择的。lock接口中提供了该方法创建Condition对象//获取等待通知组件Condition newCondition();// ReentrantLock...

2019-04-21 21:29:40 137

原创 多线程学习篇之ReentrantLock(相关实现细节)

本文参考:https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/synchronized.mdhttps://www.javadoop.com/post/AbstractQueuedSynchronizer-2java并发编程艺术本篇关于细节上的源码就不仔细探究了,以后再来搞把java5以后提供了Lock接口以及相...

2019-04-21 15:47:10 144

原创 多线程学习篇之AQS解析和相关实现

参考:http://www.cnblogs.com/waterystone/p/4920797.html java并发编程艺术AQS 即 AbstractQueuedSynchronizer(队列同步器)第一次看到这个类 一脸懵逼, 它其实就是一个抽象类,它是用来构建锁和其他同步组件的基础框架。如果我们想实现一个自定义的lock锁 CustomLock 只需要在它里面定义一个继承了这...

2019-04-19 14:01:17 229

原创 多线程学习篇之等待/通知

等待/通知机制·在总结死锁文章中 为了解决死锁我们用到了循环调用apply()方法,判断是否满足同时能获取到2个资源 (2把锁)这个条件,然后在转账操作结束后调用free()方法 释放2个资源。 代码如下: class Allocator { private List<Object> als = new ArrayList<>(); // 同时申请2个...

2019-04-16 18:10:10 592

原创 多线程基础学习篇之死锁

讲死锁之前先讲一个转账的例子@Data@AllArgsConstructor@NoArgsConstructorpublic class Account { // 余额 private int balance; // 转账 public void transfer(Account target, int money) { if (this.b...

2019-04-12 19:48:32 152

原创 多线程基础学习篇之停止线程

在java中有3种停止线程的方法线程正常退出,也就是当前线程的run方法正常执行完毕后线程终止使用stop方法强行终止线程 不过这个方法已经被废弃使用interrupt()方法中断线程接下来介绍这些方法的优缺点首先介绍interrupt()方法如果仅仅在当前线程调用interrupt()方法其实并不会马上停止该线程,只是在当前线程打了一个终止的标记。可以看以下演示: //...

2019-04-08 23:05:11 137

原创 并发编程前序之java内存模型(JMM)

本文主要是对深入理解java虚拟机等书籍和各路大神的博客的总结并谈谈自己的理解理解java内存模型之前我们需要先了解以下物理计算机中的并发问题,物理机的并发处理方案对JVM的实现有很大的参考意义。物理机内存架构通过一张图我们看一下物理机硬件内存架构由上图我们可以看到在CPU内部有一组CPU寄存器,寄存器是cpu直接访问和处理的数据,是一个临时放数据的空间。一般CPU都会从内存取数据到...

2019-03-28 23:31:29 188

原创 java8之Lambda表达式

在软件工程,一个众所周知的问题就是,用户的需求不断的在变化这里我举个例子:比如有一个员工类Employee 和员工列表 @Data @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode public class Employee { private int id; ...

2019-03-26 23:18:13 191

原创 java对象创建过程

对象的创建过程java程序在运行的过程中无时无刻都有对象被创建出来 那对象的创建过程是怎样的呢?当java虚拟机遇到一条new指令时,首先会去检查这个指令的参数能否再常量池中定位到这个类的符号引用。如果这个符合引用没有被加载 那么jvm会执行相应的类加载过程(加载,验证 准备 解析 初始化)在类加载完成之后 jvm就会为这个对象在堆上分配内存,(内存的大小在类加载完之后就可确定)内存分配的...

2019-03-24 20:03:06 164

原创 JVM垃圾收集机制与内存分配策略总结(下)

本文我们主要讨论内存分配和主要的垃圾回收器和垃圾回收算法我觉得知道对象是怎么在堆上分配的更有利于理解垃圾回收器所以先来介绍内存分配策略1.对象内存分配预备知识:Minor GC和Full GC新生代GC(Minor GC):指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Ma...

2019-03-19 09:23:57 144

转载 JVM:TLAB技术

来源:极客时间 | 深入拆解 Java 虚拟机通常来说,当我们调用 new 指令时,它会在 Eden 区中划出一块作为存储对象的内存。由于堆空间 是线程共享的,因此直接在这里边划空间是需要进行同步的。否则,将有可能出现两个对象共用一段内存的事故。如果你还记得前两篇我用“停车位”打的比方的 话,这里就相当于两个司机(线程)同时将车停入同一个停车位,因而发生剐蹭事故。Java 虚拟机的解决方法是...

2019-03-19 09:01:20 382

转载 HotSpot 卡表技术

来源:极客时间 | 深入拆解 Java 虚拟机卡表为了解决在Minor GC中为了找出Minor GC中 所有的GC Roots 因为老年代中可能存在对新生代的引用,导致我们需要扫描整个老年代吗? HotSpot 给出的解决方案是一项叫做卡表(Card Table)的技术。该技术将整个堆划分为一个个大 小为 512 字节的卡,并且维护一个卡表,用来存储每张卡的一个标识位。这个标识位代表对应的...

2019-03-19 08:49:43 425

原创 springboot与日志框架学习记录

日志的作用主要作用包括:1、出问题后定位当时问题2、显示程序当前运行状态我们知道市面上有很多的开源日志框架如 slf4j, logback, log4j, JCL(Apache Common Logging), JUL(JDK自带的java.util.logging)等这么多日志框架我们该怎么选择呢?其实上面的日志框架中有些是 日志框架的抽象层 相当于门面 它不包含日志的具体实现比如...

2019-03-15 22:54:32 663

原创 十次方之springcould学习记录(config,bus入门)

集中配置组件SpringCloudConfig在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所 以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持将配置文件放在远程Git仓库 中。在spring cloud config 组件中,分两个角色,一是config server,二是config cl...

2019-03-15 09:09:39 265

原创 十次方之springcould学习记录(Hystrix,zuul入门)

接着上文eureka,feign入门熔断器Hystrix**我们为什么要使用熔断器呢?​ 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障, 进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种 因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。​如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务...

2019-03-14 23:01:01 289

原创 十次方之springcould学习记录(eureka,feign入门)

首先介绍下springcloudspringcloud是一系列框架的有序集合,它利用springboot的开发便利性巧妙的简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控,都可用springboot的开发风格做到一键启动和部署.Springcloud并 没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框 架组合起来,通过S...

2019-03-14 10:14:39 372

原创 十次方微服务day4总结(Elasticsearch)

什么是Elasticsearch?Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速 度去处理大规模数据。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分 布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发 的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引...

2019-03-11 10:05:01 295

原创 剑指Offer: 验证平衡二叉树 (java代码实现)

题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路计算每个结点的层数 如果左子树层数和右子树层数相差大于1 return-1否则Math.max(left,right)+1并且可以剪枝如果左子树层数= -1 直接return -1如果右子树层数= -1 直接return -1递归实现主函数判断根节点是否为-1public class Solution { p...

2019-03-07 21:16:15 277

原创 leetcode:98验证二叉搜索树 (java代码实现)

给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true解题思路对于每一个结点 都有一个对于他的最小值和最大值比如root节点 他必须大于Long.minvalue 小...

2019-03-07 20:29:14 563

原创 剑指Offer:按之字形顺序打印二叉树 (java代码实现)

题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路 参考左神 左神牛逼用双端队列来实现按照原先用队列层次遍历队列的方法 先将根节点 放入队头我们把第一行看做从左到右打印 那么第二行就是从右到左依次类推那么接下来就是下面2步1.从队头取出一个元素 如果该结点的左子树不为空 放进...

2019-03-07 19:53:25 1262

原创 剑指Offer:二叉树中和为某一值的路径(java代码实现)

题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路回溯算法每个结点的值都有选和不选两种可能如果当前结点为空直接return null1.先选中当前结点的值 判断是否满足和等于target 并且为叶子节点2.递归判断左子...

2019-03-06 09:16:49 142

原创 剑指Offer:二叉搜索树与双向链表 (java代码实现)

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路因为中序遍历得到的顺序刚好是有序的 所以从中序遍历下手中序遍历到第一个结点时就是链表的头节点 保留这个头节点 平且保留一份pre作为上一次遍历到的结点遍历到后面结点node时 将pre.right = node; node.left = pre并记录当前结点...

2019-03-05 16:34:14 288

原创 剑指Offer:字符串的排列 (java代码实现)

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路我们先说说如果没有重复字母该怎么做以"abc"为例1.先将a固定住abc; 求bc的全排列 得 abc,acb2....

2019-03-05 15:09:00 694

原创 剑指Offer:链表中倒数第k个结点(java代码实现)

题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路思路很简单1.遍历链表的同时 k–遍历完链表如果k0说明找的就是第一个结点如果小于0 进行第二步2.遍历链表的同时k++当k0时找到该结点public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(...

2019-03-05 10:50:28 229

原创 剑指Offer:最小的K个数 (java代码实现)

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。第一思路 先排序然后找出前k个数 这种算法复杂度和排序的时间复杂度一样 最优为O(nlogn) 下面介绍一种方法 时间复杂度为O(nlogk);解题思路1.维护一个大根堆 遍历数组先放k个数进堆 堆顶的元素就是这个k个元素中最大的2.继续遍历 如果当前数大于堆...

2019-03-05 10:35:16 160

原创 剑指Offer:链表中环的入口结点 (java代码实现)

题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解题思路先定义一个慢指针一个指针 一个走一步一个走2步如果2个指针相遇了说明改链表有环 此时记录下该相遇结点最后一步 让头节点指针和相遇结点指针一起走 相遇点就是入环点至于最后一步不需要知道为什么 记住就行 有公式下面是java代码实现public class Solution { publ...

2019-03-04 23:16:10 148

原创 十次方微服务da3总结(mongodb)

吐槽模块用来了mongdb作为数据库 首先来介绍一下mongdbmongdb是一款跨平台、面向文档的nosql数据库 我们知道nosql就是非关系型数据库那么关系型数据库和非关系型数据库有什么区别呢这里简单说一下关系型数据库用特定二维表格存储数据且表与表之间存在联系非关系型数据库更加灵活和可扩展,存储方式可以是JSON文档、哈希表或者其他方式。参考链接:https://blog.csd...

2019-03-03 10:06:46 512 1

原创 剑指Offer:二叉树的深度 (java代码实现)

题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。递归思路求左子树的高度 lh求右子树的高度 rh选取2个高度中高的那个加上1 就是当前结点的高度下面代码实现public class Solution { public int TreeDepth(TreeNode root) { i...

2019-03-02 17:05:29 287

原创 剑指Offer:复杂链表的复制 (java代码实现)

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路一1.创建一个map 遍历链表将每个结点 和复制当前结点的结点 构成一个key 和value放进map中2.再次遍历链表 将每个结点作为key去查找map中的val ...

2019-03-02 16:32:38 914 2

angular项目

angular项目 新运行的项目

2018-12-20

空空如也

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

TA关注的人

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