自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高性能编程——线程安全问题之原子操作

文章目录原子性问题原子操作问题产生的原因原子性问题其实多线程就只有两个重要的问题,一个是可见性问题,另一个则是原子性问题了。本章将会着重讲原子性问题。原子操作上面说到了的原子性问题究竟是什么?先看两段代码和输出结果就知道了。public class Counter { volatile int i = 0 ; public void add(){ i++...

2020-01-13 11:18:20 1758 1

原创 中间件学习——消息队列-AcitveMQ

文章目录消息中间件入门什么是分布式消息中间件消息中间件核心设计协议持久化消息分发ActiveMQ简介JMS是什么JMS的对象模型Activemq的下载RabbitMQ消息中间件入门什么是分布式消息中间件分布式有别于单体架构:单体系统可能会有耦合度太高的问题,一个小需求的改动可能会使得整个系统受到影响。这时候就诞生了分布式系统:将不同的系统分开部署,各司其职,而消息中间件就是为了满足...

2020-03-04 16:43:26 438

原创 中间件专题——缓存入门

文章目录缓存简介什么是缓存为什么要用缓存Java自带缓存方案缓存简介什么是缓存缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快。通过缓存,您可以高效地重用之前检索或计算的数据。为什么要用缓存提升应用程序性能降低数据库成本减少后端负载可预测的性能消除数据库热点提高读取吞吐量(IOPS)一般在读多写少和...

2020-02-11 19:19:19 140

原创 高性能编程——BIO阻塞式网络编程

文章目录BIO编程初体验服务端客户端结果展示客户端:服务端存在的问题用浏览器访问服务端Http协议 - 请求数据包解析第一部分第二部分第三部分第四部分http响应状态码BIO -阻塞IO的含义阻塞(blocking)IO非阻塞(non-blocking)IO同步(syschronous)IO异步(asynchronous)IO总结BIO编程初体验服务端先写一段服务端代码,用于接收客户端信息:...

2020-02-03 13:56:51 270

原创 高性能编程——并发容器类list_set_queue

文章目录listArrayListCopyOnWriteListSetHashSetCopyOnWriteArraySetQueuelistArrayList线性表,最常用的是ArrayList,其底层是数组。这个再我一篇集合框架的文章里有详解,可以自己去看看。CopyOnWriteList相当于加了读写锁的ArrayList,适用于读多写少的场景。写锁被占用的时候,大量的读线程就会被阻...

2020-01-27 20:02:13 158

原创 高性能编程——并发容器类CurrentHashMap

文章目录JDK1.7版本带注释的源码1.8添加操作1.8对比1.7的优点JDK1.7版本带注释的源码/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * *//* * * ...

2020-01-26 20:54:50 309

原创 高性能编程——不安全的容器类HashMap

文章目录HashMap带注释的源码1.7初始长度和扩容1.8红黑树HashMap带注释的源码1.7/* * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license te...

2020-01-26 20:03:06 215

原创 高性能编程——AQS抽象队列同步器详解

文章目录ReadWriteLock概念缓存缓存雪崩ReadWriteLock概念维护一对关联锁,一个只用于读操作,一个只用于写操作;读锁可以由多个读线程同时持有,写锁是排他的。同一时间,两把锁不能被不同线程持有。就类似如图的效果:同一时间只能持有读锁或者写锁。缓存在进入正题前先来了解一下缓存的概念,先用伪代码模拟一下Redis缓存的使用场景://实现缓存//使用数据class...

2020-01-26 13:17:26 152

原创 士兵分子弹算法——java实现

题目在某次实弹射击训练中,班长将十个战士围成一圈发子弹。首先,班长给第一个战士10颗,第二个战士2颗,第三个战士8颗,第四个战士22颗,第五个战士16颗,第六个战士4颗,第七个战士10颗,第八个战士6颗,第九个战士14颗,第十个战士20颗。然后按如下方法将每个战士手中的子弹进行调整:所有的战士检查自己手中的子弹数,如果子弹数为奇数,则向班长再要一颗。然后每个战士再同时将自己手中的子弹分一半给下一...

2020-01-17 16:02:20 2703 1

原创 字符串压缩程序

题目通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。思路用start来记录...

2020-01-16 16:50:32 659

原创 报数游戏

题目有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。思路第一思路是链表,后来细思觉得没有必要这么麻烦,其实可以通过一个布尔数组来标志人的存活状态,只要只剩一个人了就是最后存活的人,其数组索引+1便是他的标号。代码public static int theLastSurvivor(int peopleNum){ ...

2020-01-16 15:19:54 1905

原创 牛课刷题——计算字符个数

题目描述写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。输入描述:第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字符。输出描述:输出输入字符串中含有该字符的个数。思路解析通过遍历字符串的字符,对不同的字符进行比较。注意ascll码即可实战代码import java.util.Scanner;publ...

2020-01-16 12:28:32 249

原创 高性能编程——线程安全问题之Java锁相关(Synchronized深度解析)

文章目录Java中锁的概念自旋锁乐观锁悲观锁独享锁(写锁)共享锁(读锁)可重入锁、不可重入锁公平锁、非公平锁同步关键字synchronized认识synchronizedsynchronized的特性锁消除锁粗化Java中锁的概念其实在上一章原子性的讲解中已经提到并写过一个锁了,但是这还远远不够,Java中关于锁还是有很多东西需要学习,这里先介绍几个与锁相关的概念。自旋锁指当一个线程在获取...

2020-01-14 13:35:07 291

原创 LeetCode刷题——丑数

文章目录题目思路题目编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。示例 1:输入: 6输出: true解释: 6 = 2 × 3示例 2:输入: 8输出: true解释: 8 = 2 × 2 × 2示例 3:输入: 14输出: false解释: 14 不是丑数,因为它包含了另外一个质因数 7。说明:1 是丑数。输入不会超过 ...

2020-01-10 09:19:18 245

原创 高性能编程——Java系统性能调优之JVM性能篇

文章目录类加载机制类加载器Bootstrap loaderExtension Class Loaderapplication class loader查看类对应的加载器垃圾回收机制自动垃圾收集如何确定内存需要被回收不同类型内存的判断方式对象回收-引用计数对象回收-可达性分析引用类型和可达性级别引用类型可达性级别垃圾收集算法类加载机制想要了解类加载的机制,首先就要了解类的生命周期,下面的图示就是...

2020-01-08 14:44:05 277

原创 高性能编程——高并发网络编程之TCP/UDP协议

文章目录OSI七层网络模型低三层物理层数据链路层网络层传输层高三层会话层表示层应用层传输控制协议TCPTCP握手机制四次挥手用户数据报协议UDPUDP应该注意的几点Socket编程常用接口主要socket API及其调用过程OSI七层网络模型为了实现不同计算机商家生产的机器可以相遇通信,就需要唯一的协议来指导网络的建设,而OSI七层模型就是很有指导意义的一套模型,虽然实用性不高,但是对其他模型...

2020-01-07 09:45:52 547

原创 高性能编程——多线程并发编程Java基础篇之线程池引用及实现原理剖析

文章目录为什么要用线程池线程是不是越多越好?线程池原理 - 概念线程池API中接口的定义和实现类为什么要用线程池在学习线程池之前首先要明白为什么要用线程池,难倒创建线程他不香吗?线程是不是越多越好?答案肯定是否定的,因为如果是的话,就没必要创建线程池了,那么为什么线程不是越多越好呢?线程在java中是一个对象,更是操作系统的资源,线程创建、销毁都需要时间。如果创建时间+销毁时间>...

2020-01-06 16:59:10 237 1

原创 高性能编程——多线程并发编程Java基础篇之线程安全之可见性问题

文章目录Java内存模型(JMM)详解语言规范和虚拟机规范内存模型和JVM的关系多线程中的问题所见非所得可见性问题成因思考会不会是高速缓存的原因真正的罪魁祸首——CPU指令重排序JIT编译器(Just In Time Compiler)真正成因该如何解决可见性问题volatileShared Variables定义冲突线程间操作的定义对于同步的规则定义Word Tearing字节处理Java内存...

2020-01-06 16:58:33 200

原创 无重复字符的最大子串

文章目录题目思路代码题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符...

2020-01-02 16:41:50 360 1

原创 高性能编程——多线程并发编程Java基础篇之线程封闭

文章目录线程封闭的概念ThreadLocal线程封闭的概念多线程访问共享可变数据时,涉及到线程间数据同步的问题。并不是所有时候都要用到共享数据,所以线程封闭概念就被提出来了。数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的技术称为线程封闭。ThreadLocalThreadLocal是Java里一种特殊变量。它是一个线程级别的变量,每个线程都有一个...

2020-01-02 14:50:18 125

原创 高性能编程——多线程并发编程Java基础篇之线程通信

文章目录线程通信的方式文件共享网络共享变量共享线程协作-JDK API被弃用的suspend和resume死锁成因wait/notify机制详细代码park/unpark机制代码示例死锁演示伪唤醒总结线程通信的方式要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。涉及到线程之间相互通信,分为下面四类:文件共享网络共享共享变量jdk提供的线程协调API:细...

2020-01-02 14:27:57 389 1

原创 高性能编程——多线程并发编程Java基础篇之CPU缓存和内存屏障

文章目录CPU性能优化手段——缓存缓存同步协议——MESI协议运行时指令重排两个问题解决方案内存屏障结语CPU性能优化手段——缓存我们都知道CPU是计算机的核心,也是程序所运行之处,人们为了提高程序运行的效率,CPU做了很多优化。缓存就是为了减少访问主内存的开销而使用的。缓存同步协议——MESI协议MESI规定了每个缓存都必须有一个状态位,具体如下:当使用多处理器的时候,单个CPU对缓...

2019-12-31 14:29:53 163

原创 高性能编程——多线程并发编程Java基础篇之线程中止

文章目录不正确的线程中止Stop方法Destroy代码示例不正确的线程中止Stop方法中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不推荐使用DestroyJDK并没有实现该方法代码示例为什么不推荐使用stop呢?一段代码就能解答:package com.study.hc.thread.chapter1.thread;public class StopThre...

2019-12-31 09:54:27 158 1

原创 高性能编程——多线程并发编程Java基础篇之线程状态

文章目录线程状态线程间状态的转换线程状态实战线程状态线程有6个状态,在Java中通过Thread下的一个枚举类Java.lang.Thread.State可以获取,分别是:New:尚未启动的线程状态Runnable:可运行线程的线程状态Blocked:线程阻塞等待监视器锁定的线程状态,一般都是处于synchronized代码块或者在方法中被阻塞的。Waiting:等待线程的等待状态,...

2019-12-30 16:56:01 255

原创 高性能编程——多线程并发编程Java基础篇之Java程序运行原理

文章目录1.1.1Java程序运行原理class文件的内容JVM学习1.1.1Java程序运行原理class文件的内容class文件包含java程序运行的字节码,是数据严格按照格式紧凑排列在class文件中的二进制流,中间无任何分隔符;文件开头是一个0xcafebabe的特殊标志,象征了咖啡宝贝(与Java图标相对应),例如下图:这文件有复杂的格式,是专门给JVM看的,人类可以借助工具...

2019-12-30 14:26:19 222

原创 springcloud学习项目

文章目录maven配置父项目子项目配置实体类maven配置父项目<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

2019-12-25 14:37:21 191

原创 springcloud及微服务理论入门

文章目录微服务入门什么是微服务微服务架构四个问题Springcloud和Springboot的关系三种流行解决方案归纳解决方法springCloud社区微服务入门什么是微服务开始接触的架构:MVC(SpringMVC)微服务也是一种架构思想模块化:All in one。只是把业务拆分成不同的模块部署在不同服务器上,而未更改业务代码。将单一的应用程序划分成一组小的服务。简而言之,微服务就是...

2019-12-24 15:24:36 111

原创 Swagger介绍及集成

文章目录swagger简介前后端分离Swaggerspringboot集成swagger配置扫描接口及开关注释的使用swagger简介前后端分离目前最流行的前后端分离框架:Vue+Springboot后端时代:前段只管理静态样式;html–>后端。模版引擎JSP=>后端是主力前后端分离时代:后端:后端控制层,服务层,数据访问层前端: 前端控制层,视图层 ...

2019-12-22 17:30:57 199

原创 springboot入门二--jdbc&&Druid&&Mybatis

文章目录初始化环境初始化环境application.yml:spring: datasource: driver-class-name: com.mysql.jdbc.Driver #serverTimezone=UTC是解决时区配置 url: jdbc:mysql://localhost:3306/study?serverTimezone=UTC&use...

2019-12-21 15:37:05 118

原创 SSM整合

Mybatis整合首先就是去创建Mybatis-config.xml:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http:...

2019-12-19 20:36:31 85

原创 springboot入门一

微服务简介微服务是一种架构风格,本质上还是spring,只不过简化了配置,真正讲究“约定大于配置”。说白了就是以前MVC三层架构中的Service拆分成不同的模块,将每个模块部署在一台服务器上,每台服务器只提供相关的接口。第一个springboot程序https://spring.io/projects/spring-boot#learnjar包,官网导入。也可以直接用IDEA创建(本质...

2019-12-19 14:37:20 84

原创 springMVC整合报错

17-Dec-2019 22:01:38.282 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [encodingFilter] java.lang.ClassNotFoundException: org.spr...

2019-12-17 22:10:59 148

原创 SpringMVC入门

MVC三层架构Model(数据模型):提供要展示的数据,包括数据和行为(dao和service)View(视图):负责模型的展示,一般就是用户看到的界面,客户想看到的东西。Controller(控制器):接受用户请求,委托给模型进行处理。处理完毕把返回的模型数据返回给视图,由视图负责展示,相当于充当了调度员的作用。MVC是一种设计规范,而不是具体的技术实现。需要导入的maven包:...

2019-12-16 21:03:52 87

原创 Spring入门学习二

AOP面向切面编程,学习之前先要了解一下代理模式:代理模式(静态代理)代理模式是AOP的底层实现,一般代理模式就是让一个真是对象想完成的核心功能由代理对象去进行修饰,这样的话就可以实现主要业务和次要业务的分离,而二者之间通过抽象对象来统一实现的规范,通过房东租房来详解一下代理模式:抽象对象:租房(要租的房)代理对象:中介真实对象:房东访问对象:客户(用来访问对象的人)代码实现:租...

2019-12-13 13:16:11 95

原创 spring入门学习一

1.1简介春天,spring就是java的春天spring本身就是一个大杂烩,它的理念就是使现有的框架更容易使用,整合了现有的技术框架。说白了spring就是一个整合剂。开源、免费、轻量级的非入侵式的框架IOC和AOP对事务的支持,对框架整合的支持1.2环境搭建导包直接导webmvc这个包,可以把其他很多需要的功能包一并导入,<dependencies> ...

2019-12-12 10:33:25 102

原创 力扣刷题——最长公共前缀问题

链接:https://leetcode-cn.com/problems/longest-common-prefix/题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入...

2019-12-11 16:12:08 160

原创 Mybatis入门学习三

缓存因为查询要连接数据库,很耗性能,所以可以把临时数据缓存在内存中

2019-12-10 13:47:19 78

原创 罗马数字转整数

题目/** 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写...

2019-12-10 09:51:08 89

原创 Mybatis入门学习二

日志日志工厂可以在settings中的logImpl中设置分为以下几种:SLF4JLOG4JLOG4J2 |JDK_LOGGINGCOMMONS_LOGGINGSTDOUT_LOGGINGNO_LOGGING在Mybatis中具体使用哪一个日志在设置中指定。测试加上了一段配置返回的结果:log4j什么是log4j:log4j是Apache的一个开源项目,...

2019-12-09 15:48:58 103

原创 Mybatis入门学习一

简介什么是mybatis:mybatis是一款优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或者注解来配置和映射原生类型、接口和Java的POJO为数据库中的记录。mybatis开始先去mybatis官网点了这里第一步:引入maven<dependency> <g...

2019-12-03 09:21:19 171

空空如也

空空如也

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

TA关注的人

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