自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

安东尼的小不二的博客

学习、记录、分享

  • 博客(37)
  • 资源 (2)
  • 收藏
  • 关注

原创 Mybatis学习之路03 $与#区别

1. #与$区别在mybatis中,#与$的都可以起到变量替换的作用,但是二者的使用场景却是截然不同的。#{}的作用主要是替换预编译语句(PrepareStatement)中的占位符?比如xml映射文件中语句<insert id="insert" paremeterType="User"> INSERT INTO person (name) VALUES(#{name});</insert> $$符号的作用是直接进行字符串替换<insert id="in

2020-10-25 23:36:31 195

原创 Mybatis学习之路02typeAlias别名

1.typeAlia别名typeAlias,顾名思义,是类型别名,主要用于简化xml文件的配置。1.1 通过别名简化xml配置默认情况,我们在xml映射文件中配置的、、、元素,parameterType或resultType属性都必须指定类的全路径,会容易出错。mybatis提供了一个别名系统,让我们在需要填写一个类的全路径时,可以直接用类名替代在mybatis-config.xml中配置元素:<configuration> <!--指定Mybatis 数据库配置文件

2020-10-25 23:34:51 251

原创 Mybatis学习之路01 Mybatis搭建

一、Mybatis1.Mybatis简介MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架,MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。MyBatis 应用程序大都使用 SqlSessionFactory 实例,SqlSessionFactory 实例可以通过 SqlSessionFactoryBuilder 获得,而 SqlSess

2020-10-25 23:33:45 244

原创 多线程并发面试题整理

1.进程线程区别,线程安全和非线程安全区别线程:程序计数器、虚拟机栈、本地方法栈线程安全:多个线程操作共享资源,执行统一数据2. 线程状态,start,run,wait,notify,yiled,sleep,join等方法的作用以及区别线程状态转换图。sleep–TIME-WAITING不释放 wait–WAITING 释放锁join /join(time)分别从运行态进入到 WAITING/TIME-WAITINGyiled 从run–ready状态3.wait,notify阻塞唤醒确

2020-10-18 23:53:05 141

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】12_整理几个问题

问题1.sychronized关键字/Lock为什么在项目里没用这个问题的前提是要搞清楚三个名词:分布式、高并发、多线程分布式分布式是一种为了解决单个服务器容量和性能瓶颈问题而采用的优化方式。分布式领域要解决的问题也很多,比如:分布式文件系统、分布式缓存、分布式数据库、分布式计算等等。Hadoop实现了一个分布式文件系统,Zookeeper是Hadoop的一个子项目,是一个分布式服务框架,MQ是消息队列都和分布式有关。分布式的实现有两种形式:水平扩展、垂直拆分高并发高并发相对于分布式来说是通过

2020-10-12 21:54:28 834

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】11_如何解决秒杀业务系统的热点问题

我们在做各种业务研发的时候经常会碰到热点问题影响系统稳定性和性能瓶颈,例如支付系统中的热点账户进出款,电商系统中的热点商品参与秒杀,金融系统中的热点理财产品抢购等,那今天就让我带大家来一起看下我们如何解决热点问题。首先我们要搞清楚的是热点问题必须包含两个字,一个是热一个是点,点表示我们在系统的业务路径上有一个地方存在性能的瓶颈,比如数据库,文件系统,网络,甚至于内存等,这个点一般有io,锁等问题构成。热表示其被访问的频率很高,就是说一个被访问频率很高的io或锁自然而然就编程了我们系统业务路径上的性能瓶颈。

2020-10-12 21:26:38 563

原创 Java并发编程学习05—ThreadPool线程池

文章目录一、Executor框架1. 框架结构2.框架使用示意图二、ThreadPoolExecutor类(重点)1.饱和策略2. Runnable+ThreadPoolExecutor3. Callable+ThreadPoolExecutor4. 线程池的5种状态5. **ThreadPoolExecutor原理**6.几个方法的对比execute() VS submit()三、几种常见的线程池1.FixedThreadPool2.SingleThreadPool3.CachedThreadPool4.

2020-08-30 22:01:09 137

原创 Java并发编程学习04—ConcurrentHashMap源码学习

1.JDK1.7版本1.1 设计思路ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的,它采用了分段锁的设计,只有在一个分段中存在竞争关系,不同分段锁之间没有竞争,提高了并发环境下的处理能力,降低了锁的粒度。相比于HashMap,在高并发的环境下会导致出现环状,死锁的产生;而HashTable虽然保证了并发安全,但是它在实现每个方法的时候都加上了锁

2020-08-09 20:28:11 157

原创 Java并发编程学习03—彻底搞懂ThreadLocal

一、什么是ThreadlocalThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的,在多线程环境下,如何防止自己的变量被其它线程篡改。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。他们可以使用 get() 和 set() 方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。ThreadLocal示例import java.te

2020-08-04 23:42:21 210

原创 Java并发编程学习02—彻底理解volatile关键字

文章目录一、内存模型基本概念二、并发编程三个概念三、volatile关键字作用及原理可见性原子性有序性四、volatile关键字的原理和实现机制五、使用volatile关键字的场景volatile关键字与java内存模型有关(JMM),所以再了解volatile关键字之前,先来了解一下这部分的知识,然后分析volatile关键字的实现原理,最后给出了实现volatile关键字的场景一、内存模型基本概念首先是缓存一致性问题,在多线程编程中,一个变量在多个cpu中存在缓存不一致的情况,一般有以下两种解决办

2020-08-01 16:36:18 148

转载 Java并发编程学习01—大纲

一:并发基础和多线程首先需要学习的就是并发的基础知识,什么是并发,为什么要并发,多线程的概念,线程安全的概念等。然后学会使用Java中的Thread或是其他线程实现方法,了解线程的状态转换,线程的方法,线程的通信方式等。 二:JMM内存模型任何语言最终都是运行在处理器上,JVM虚拟机为了给开发者一个一致的编程内存模型,需要制定一套规则,这套规则可以在不同架构的机器上有不同实现,并且向上为程序员提供统一的JMM内存模型。所以了解JMM内存模型也是了解Java并发原理的一个重点,其中

2020-07-30 22:52:28 219

原创 教你在github高效搜索高质量开源项目

概述GitHub是程序员的开源宝库,我们可以从中获取到十分优秀的开源项目。但是在众多项目中如何才能高效的找寻自己心仪的项目呢?一般来说我们进入github官网选择Sign in登录账户进入到帐户主页以搜索Spring Boot 为例我们能看到包含178867个搜索结果这样的搜索是十分广泛的搜索。所以我们要使用高级搜索通过参数来进行搜索in:namein:name example仓库名字中含有“example”我们使用in:name spring boot来搜索仓库名字中含有spr

2020-07-26 17:15:59 393

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】10_课程总结

项目框架回顾项目结构分层、业务逻辑分层、领域模型分层代码实战中成长,发现问题业务编码过程中需要思考性能问题性能压测框架云端部署体验企业级开发流程容器优化通用方案,管道优化通用方案(解决keep alive)分布式扩展负责均衡设计水平扩展 (Nginx)vs 垂直扩展 (redis+mysql)查询优化技术之多级缓存多级缓存屏障系统读不到 vs 脏读越近越好的缓存查询优化技术之页面静态化CDN一切皆页面,一切皆静态交易优化技术之缓存库存交.

2020-07-05 09:45:22 1237

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】09_防刷限流技术

文章目录本章目标10-2 验证码技术验证码代码实现10-4 限流的目的限流方案限并发令牌桶算法漏桶算法限流范围10-6 限流代码实现(Guava RateLimit)10-7 防刷技术传统防刷黄牛为什么难防设备指纹凭证系统本章目标掌握验证码生成与验证技术掌握限流原理与实现掌握防黄牛技术10-2 验证码技术包装秒杀令牌前置,需要验证码来错峰数学公式验证码生成器验证码代码实现新建CodeUtil实现生成验证码package com.miaoshaproject.util;im

2020-07-05 09:43:51 1282

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】08_流量削峰技术

本章目标掌握秒杀令牌的原理和使用方式掌握秒杀大闸的原理和使用方式掌握队列泄洪的原理和使用方式抛缺陷:秒杀下单接口会被脚本不停的刷秒杀验证逻辑和秒杀下单接口强关联,代码冗余度高秒杀下单和对活动是否开始是没有关联的,接口关联过高秒杀验证逻辑复杂,对交易系统产生无关联负载9-2 秒杀令牌实现秒杀接口需要依靠令牌才能进入秒杀的令牌由秒杀活动模块负责生成秒杀活动模块对秒杀令牌生成全权处理,逻辑收口秒杀下单前需要先获得秒杀令牌代码实现PromoService接口上实现gen

2020-07-04 16:40:15 1410

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】07_交易性能优化技术之事务型消息

文章目录本章目标8-1 事务型消息(上)8-2 事务型消息(下)RocketMQ事务型消息RocketMQ 消息的存储RocketMQ 消息发送流程代码实现8-3 库存流水状态业务场景决定高可用技术实现8-7 库存售罄处理方案8-8 后置流程总结销售逻辑异步化交易单逻辑异步化本章目标掌握异步化事务性消息模型掌握库存售罄模型8-1 事务型消息(上)回顾整个下单流程,我们之前做了下单减缓存库存优化以及回补库存的操作,但是因为整个下单是属于一个transaction事务,如果用户下单成功,但是之后订

2020-07-02 17:24:09 1824 3

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】06_交易性能优化技术之缓存库存

文章目录本章目标7-1 交易性能瓶颈7-2 交易验证优化7-3 活动缓存库存方案一(重点)库存行锁优化扣减库存缓存化(方案一)异步同步数据库(方案二)异步消息队列rocketmq库存数据库最终一致性保证7-5 活动缓存库存方案二分布式事务7-7 rocketmq安装7-8 缓存库存接入异步化本章目标掌握高效交易验证方式掌握缓存库存模型7-1 交易性能瓶颈jmeter压测(对活动下单过程进行压测,采用post请求,设置传入参数,性能发现下单avarage大约2s,tps500,交易验证主要完全

2020-07-01 11:31:55 1636

原创 彻底解决RocketMq问题之No route info of this topic以及org.apache.rocketmq.remoting.exception.RemotingTooMuch异常

如果你和我一样遇到了这样的rocketMQ异常:No route info of this topic 还有 org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout的异常就往下看吧,踩了4个多小时的坑,哭了…No route info of this topic xx异常看了网上很多解决方案,这个异常主要可能有几种情况:broker没有注册到nameser

2020-07-01 08:42:08 1546

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】05_查询性能优化技术之页面静态化

文章目录6-1 静态资源CDN引入静态请求CDN6-3 Cache Control响应头有效性判断6-4 浏览器三种刷新方式6-5 CDN自定义缓存策略6-6 静态资源cdn部署策略部署策略一部署策略二6-7 全页面静态化phantomjs6-1 静态资源CDN引入静态请求CDN用户将静态资源数据请求到ECS服务器,ECS服务器解析到阿里云的CDN中,CDN可以理解为一个无限大的内容磁盘缓存,本身没有文件存储。当用户访问getItem的一个静态资源文件的时候,会根据路由规则查看本地是否有这样的文件,如

2020-06-27 21:36:40 1154 4

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】04_查询性能优化技术之多级缓存

文章目录5-1 本章目标5-2 缓存设计原则概览5-3 Redis集中式缓存介绍1. Redis sentinal哨兵模式2.Redis集群cluster模式cluster故障转移1. 节点故障判断2.slave选举3.结构变更Redis cluster 高可用性1. 主节点保护2. 集群fail条件5-4 Redis集中式缓存商品详情页接入5-6 Redis集中式缓存压测5-7 本地数据热点缓存5-9 本地缓存压测验证5-10 nginx proxy cache缓存缓存实现性能压测5-11/14 ngin

2020-06-26 17:33:51 2373 2

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】03_分布式扩展

文章目录本章目标4-1 Nginx反向代理4-2 单机容量问题,水平扩展4-3修改前端资源用于部署nginx4-4 部署Nginx OpenResty4-5/6 前端资源部署4-7 Nginx配置动静分离服务器4-8 分布式扩展后的性能压测4.9 Nginx高性能原因—epoll多路复用epoll多路复用master worker进程模型协程机制4-12 分布式会话管理4-13 分布式会话实现(上)4-14 分布式会话实现(中)4-15 分布式会话实现(下)4-16 基于token的分布式会话实现(上)本

2020-06-26 17:31:18 2421 2

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】02_云端部署

云端部署我自己在前一段时间因为疫情原因白嫖了一波阿里云的服务器,美滋滋,想着把博客部署到云端上,现在项目也要发表到云端,就写一下配置方案吧3.3 操作系统及运行环境阿里ECS 云服务器 学生机的配置是 2GB CPU + 4GB 内存 操作系统 Ubuntu 18.04 64位,配置环境Jdk+mysql+tomcat(详见另一篇文章带你搞定阿里云Ubuntu版本配置Java环境JDK+MySQL+Tomcat)3.4 数据库部署{% note info %}数据库Linux指令:下载安装

2020-06-26 17:27:38 2063 3

原创 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】01_电商秒杀商品回顾

文章目录项目环境及技术项目框架设计项目详细设计几个问题跨域感知session跨域问题跨域传递cookie问题项目环境及技术学习环境:Intellij IDEA 2018.1.3阿里云ECS或本地Linux虚拟机,操作系统centos 7.4MySQL5.6数据库,Redis4.0.1缓存,消息队列rocketmq4.5,phantomjs无头浏览器技术储备:了解SSM、SpringBoot等框架熟悉Linux基本命令了解MySQL常用命令了解Redis常用命令项目框架设计数

2020-06-23 20:24:59 3017 3

原创 找实习之路1.0

找实习之路1.0本人研一,今年因为疫情试着投实习岗位。害,3、4月的时候投的太少导致后面机会就少了,基本日常实习也很难找,这都是经验,下次努力【投递完无后话】字节/广联达/作业帮/猿辅导/猿印/爱奇艺/拼多多/小米(被拒2次…)/虎牙/沪江/众安保险/用友(安排面试被鸽)/阿里健康/华为云/捷信/京东/平安科技/京东数科/任意门【参加完笔试无后话】2020/5/20 好未来学而思笔试无后话2020/6/8 竞技世界-平台开发实习(c++)笔试感觉良好无后话【面试挂了的】2020/4

2020-06-18 21:43:08 390

原创 带你搞定阿里云(Ubuntu版本)配置Java环境JDK+MySQL+Tomcat

文章目录一、前期准备二、Java运行环境JDK配置1. 上传下载好的JDK安装包到远程服务器2.Xshell登录服务器3. 解压压缩包4.编辑配置文件5.执行source /etc/profile命令6.查看安装情况三、MySQL安装1. 安装mysql2.配置mysql3.授权远程登录4.服务器开放端口5.Navicat 测试四、Tomcat安装1. tomcat安装2.修改tomcat默认端口一、前期准备最近因为疫情期间,学校也没开学,哎!刚好看到阿里云为高校学生疫情期间推出一个服务器白嫖活动???

2020-06-07 15:35:55 581 7

原创 Redis学习—持久化机制

本篇介绍一下Redis的持久化机制Redis是一种内存数据库,将自己的数据库状态(非空数据库以及它们的键值对)存储在内存中,为了防止丢失状态,Redis提供了持久化机制,将数据库状态保存到磁盘中,保存为dump.rdb文件。之后根据这个压缩的二进制文件,还能还原数据库状态。RDB(Redis DataBase)我们安装完redis后,所有的配置都是在redis.conf文件中,里面保存了RDB和AOF两种持久化配置持久化有三种触发方式:SAVE命令、BGSAVE命令、自动化SAVE:可以生成

2020-05-14 00:41:03 99

原创 Redis学习—过期机制

本节我们来讲一下Redis的过期机制Redis经常用作缓存,很多都是临时缓存,比如验证码等session信息,我们希望它们能在一定时间内自动销毁。Redis提供了一些对key设置过期时间的命令。一、过期字典Redis对存储值的过期处理实际上是对键(key)设置过期时间,然后到期自动删除这个键。我们要知道在redis数据库的结构设计中,是采用expires字典保存了数据库中所有键的过期时间,被称为过期字典过期字典的键是一个指针,指向键空间中的某个键对象(设置过期时间的键对象)过期字典的值是一个l

2020-05-14 00:38:09 207

原创 JVM学习03——虚拟机类加载机制

本章常见面试题类加载机制的过程(五个阶段)什么是双亲委派模型?讲讲类加载器?前提知识在开始本章之前,你需要了解Class文件的存储格式,Java虚拟机在编译的时候将Java程序编译成Class文件,Java虚拟机只与Class文件这种特定的二进制文件格式关联,Class文件中包含了Java虚拟机指令集、符号表等信息Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严...

2020-05-05 15:04:34 115

原创 JVM学习02——垃圾收集器

文章目录判断对象是否存活引用的类型方法区的回收垃圾收集算法标记清除(Mark-Sweep)算法标记复制算法标记整理算法(老年代)几种垃圾收集器Serial收集器ParNew收集器Paraller Scavenge 收集器Serial Old收集器Parallel Old收集器CMS收集器G1收集器分区 Region卡片 CardHumongous区域已记忆集合 Remember SetG1解决的3...

2020-04-30 11:02:24 106

原创 Jvm学习01——内存结构

文章目录运行时数据区JVM内存结构程序计数器java虚拟机栈本地方法栈java堆方法区运行时常量池直接内存操作直接内存运行时数据区程序在运行过程中会划分为不同区域,主要有下面七类:程序计数器虚拟机栈本地方法栈堆方法区运行时常量池(包含于方法区)直接内存JVM内存结构这里放一张JVM运行时的内存结构程序计数器程序计数器看成是当前线程所执行字...

2020-04-13 18:08:38 182

原创 【深入理解Java并发】Sysnchronized关键字用法、原理及常见面试考点

一、Sysnchronized简介Sysnchronized:能够保证在同一时刻最多只有一个线程执行该段代码创建线程的两种方法:继承Thread类实现Runnable接口thread1.join()方法:等待线程1执行完后才接着执行二、Sysnchronized两种用法(对象锁和类锁)对象锁包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对象)第一种...

2020-03-23 11:24:22 875 2

原创 SpringBoot构建电商秒杀项目(一) 基础项目的搭建

第一章1.1 电商秒杀项目介绍电商秒杀项目介绍商品列表页获取秒杀商品列表进入商品详情页获取秒杀商品详情秒杀开始后进入下单确认页下单并支付成功1.2 IDEA创建maven项目以下流程为课程操作,实际也可以在IDEA进行Spring Initial快速配置SpringBootnew->project->maven项目->选择maven-archetype-q...

2020-03-13 23:18:49 545 4

原创 SpringBoot构建电商秒杀项目(二) 用户模块开发

第二章2.1 项目整体框架本项目采用springBoot开发,项目架构是Spring MVC框架controller层:与前端页面UI交互的层viewobject层:视图,封装了向前端展示的数据,避免领域模型的某些敏感数据直接传给前端dao层:与底层数据库交互的层,进行数据库的增删改查dataobject层:数据库表对于Java实体类的映射,是数据库表中数据的封装model层:领域...

2020-03-13 23:17:14 837 1

原创 SpringBoot构建电商秒杀项目(三) 商品模块开发

第三章 商品模块开发3.1 商品创建我们在进行模块开发的过程中应遵循先设计领域模型,再设计数据库的过程。因为领域模型中经常存在有级联关系(比如商品模型与销售模型之间),所以数据库的设计应该在领域模型设计之后。1.创建ItemModel领域模型商品模型主要包含有商品名,价格,库存,描述信息,图片url属性。为了减少在代码上对属性的一一判空,我们采用上节课学习到的validator来判空pu...

2020-03-13 23:15:35 479

原创 SpringBoot构建电商秒杀项目(四)交易模块开发

第四章 交易模块开发4.1 交易模型管理–交易模型创建1. 创建用户下单模型OrderModel//用户下单的交易模型public class OrderModel { //交易单号,例如2019052100001212,使用string类型 private String id; //购买的用户id private Integer userId; ...

2020-03-13 23:12:37 582

原创 SpringBoot构建电商秒杀项目(五)秒杀模块开发

第五章 秒杀模块开发5.1 秒杀模型管理——活动模型创建1. 安装joda-time依赖<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.1</version>&lt...

2020-03-13 23:10:37 454

原创 [牛客网中级项目]第四课 注册 登录 浏览 安全性

[牛客网中级项目]第四课 注册 登录 浏览 安全性 目录 文章目录[牛客网中级项目]第四课 注册 登录 浏览 安全性1. 注册1.1 注册实现功能:1. 用户名合法性检测2. 密码长度要求3. 密码Salt加密,密码强度检测4. 用户邮件/短信激活1.2 代码功能实现:UserDAO部分UserService部分LoginController部分2. 登录2.1 登录实现功能:1. 服务器密码...

2020-02-10 17:05:51 338

哈尔滨工程大学计算智能.zip

哈尔滨工程大学期末计算智能,包含讲义ppt,四次课程作业+期末小论文,还有模糊综合评价原理+案例讲解与Matlab实现

2020-05-07

鼠标样式包(拿去用).zip

在网页制作时你还苦恼鼠标样式吗,你想获得独一无二的鼠标吗?想要的话就拿去吧,我把一切都放在这里了。内置多种鼠标样式,需要拿走

2020-05-07

空空如也

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

TA关注的人

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