Java
hungry_lady
java iOS 产品设计
展开
-
Swagger 2
@Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置"@ApiOperation:用在请求的方法上,说明方法的用途、作用 value="说明方法的用途、作用" notes="方法的备注说明"@ApiImplicitParams:用在请求的方法上,...原创 2020-03-06 17:47:30 · 135 阅读 · 0 评论 -
SpringCloud - Eureka
pom依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <...原创 2020-02-15 16:50:34 · 127 阅读 · 0 评论 -
SpringCloud 【1】
Lombok:@Data 省略手动get set@Builder 流式创建对象@Slf4j 日志服务@Cleanup 关闭流模块结构图重温Mybatis-Pluslogback.xml 配置mybatis-plus: mapper-locations: classpath*:com/mooc/meetingfilm/**/xml/*Mapper.xml globa...原创 2020-02-15 09:17:12 · 118 阅读 · 0 评论 -
Lombok+安全框架
一、lombok * cleanup * 资源关闭 文件流操作的初始化可做注解 * Data * 大而全的注解 包含 Getter Setter ToString EqualsAndHashCode * EqualsAndHashCode * 生成Equals方法和HashCode方法 * nonnull * 生成非空检查getter@Getter( ...原创 2020-01-11 15:13:09 · 307 阅读 · 0 评论 -
线程池
线程池的好处降低资源消耗提高响应速度提高线程的可管理性可选择阻塞队列无界队列有界队列同步移交队列// 基于数组的有界阻塞队列 public void arrayBlockQueue() { ArrayBlockingQueue queue = new ArrayBlockingQueue(10); for (int i = 0; i...原创 2020-01-09 17:01:29 · 114 阅读 · 0 评论 -
Google Guava工具集
一、Optionalpublic void test() { // 创建空对象 Optional<Object> empty = Optional.empty(); // 使用非null创建对象 Optional<String> roger = Optional.of("roger"); ...原创 2020-01-09 14:45:19 · 195 阅读 · 0 评论 -
资源处理
需要手动释放的物理资源文件/流资源套接字资源数据库连接资源不释放后果资源被长时间无效占用超过最大限制后,将无资源可用导致系统无法正常运行TWR - try with resource try (流初始化操作) { 操作 }不需要显示执行资源关闭...原创 2020-01-08 17:23:45 · 144 阅读 · 0 评论 -
Lambda入门
函数编程演化历程1、将业务逻辑直接写死在代码里2、将单一维度的条件作为参数传入方法中。方法内根据参数进行业务逻辑实现3、将多个维度的条件作为参数传入方法中。业务实现根据不同的参数处理不同的逻辑4、将业务逻辑封装为一个实体类,方法接受实体类为参数,方法内部调用实体类的处理逻辑5、调用方法时不再创建实体类,而是使用匿名函数的形式替代6、使用Lambda表达式替代匿名函数的形式,作为方法的参...原创 2020-01-07 15:15:39 · 124 阅读 · 0 评论 -
UDP和TCP区别
TCPUDP面向连接无连接可靠不可靠速度慢速度快重量级轻量级UDP的主要特点是:(1)无连接;(2)尽最大努力交付;(3)面向报文;(4)无拥塞控制;(5)支持一对一、一对多、多对一和多对多的交互通信;(6)首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。TCP的主要特点是:(1)面向连接;(2)每一条TCP连接...原创 2019-06-12 11:16:49 · 124 阅读 · 0 评论 -
常用类库 Java异常(一)
Java异常What:为什么抛出Where:异常堆栈在哪抛出Why:为什么抛出Java的异常体系从概念角度解析Java的异常处理机制Error:程序无法处理的系统异常,编译器不做检查Exception:程序可以处理,捕获后程序可以恢复正常RuntimeException:不可预知,程序应当自行避免非RuntimeException:可预知,从编译器校验的异常RuntimeE...原创 2019-07-01 15:27:58 · 199 阅读 · 0 评论 -
常用类库 Java集合框架(二)
HashMapHashtableConcurrentHashMap原创 2019-07-01 16:20:24 · 130 阅读 · 0 评论 -
JUC
java.util.concurrent:提供了并发编程的解决方案Collections 并发集合原创 2019-07-01 16:39:19 · 180 阅读 · 0 评论 -
Java IO机制
B-ION-IOA-IO原创 2019-07-01 17:01:41 · 801 阅读 · 0 评论 -
Java内存模型
递归为什么会一发 java.lang.StackOverflowError– 递归过深,栈帧数超出虚拟栈深度元空间 metaspace 和 永久代 permgenmetaspacepermgen内存使用本地内存使用jvm的内存metaspace 优势Java堆对象实例的分配区域GC管理的主要区域JVM三大性能调优参数-Xms ...原创 2019-06-26 11:52:00 · 105 阅读 · 0 评论 -
Spring 框架
Spring IOCInversion of Control 控制反转依赖注入:把底层类作为参数传递给上层类,实现上层对下层的“控制”SetterInterfaceConstructorAnnotation优势避免在各处使用new来创建类,并且可以做到统一维护创建实例的时候不需要了解其中的细节Spring IOC 支持的功能依赖注入依赖检查自动装配支持集...原创 2019-07-02 10:25:11 · 67 阅读 · 0 评论 -
GC
没有被其他对象所引用引用计数算法1、通过判断对象的应用数量来决定对象是否可以被回收2、每个对象实例都有一个引用计数器,被引用+1,完成引用-13、任何引用计数为0的对象实例可以被当作垃圾收集优点:执行效率高,程序执行受影响较小缺点:无法检测出循环引用的情况,导致内存泄漏可达性分析算法 -主流通过判断对象的引用链是否可达来决定对象是否可以被回收不可达会被回收可作为GC Root...原创 2019-06-28 10:54:52 · 103 阅读 · 0 评论 -
Java 进程 线程
进程和线程的区别进程让操作系统并发成为可能线程让进程内子任务并发成为可能区别线程进程独立应用否是独立空间否,只是进程执行的不同路径独立地址空间,相互之间不影响健壮性弱强切换开销小大进程、线程关系java对操作系统提供的功能进行封装,包括进程和线程运行一个程序会产生一个进程,进程包含至少一个线程每个进程对应一个jvm实...原创 2019-06-28 16:22:08 · 169 阅读 · 0 评论 -
Java多线程与并发-原理
synchronized线程安全问题的主要诱因存在共享数据(也称临界资源)存在多条线程共同操作这些共享数据解决问题的根本办法:同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再对共享数据进行操作synchronized 锁的不是代码,锁的都是对象synchronized 底层实现原理对象在内存中的布局对象头实例数据对齐填充Monito...原创 2019-06-29 11:57:39 · 135 阅读 · 0 评论 -
Java Memory Model
CAS(compare and swap)原创 2019-06-29 14:48:42 · 114 阅读 · 0 评论 -
Java 线程池
线程池运行状态原创 2019-06-29 15:10:23 · 103 阅读 · 0 评论 -
Mybatis-Plus
MyBatis vs JPAMyBatis优势:1、sql语句可以自由控制,更灵活,性能较高2、sql语句与代码分离,易于阅读和维护3、提供xml标签,支持编写动态sql语句劣势:1、简单的crud也要写sql2、xml中有大量的sql维护3、自身功能有限,但支持pluginJPA优势:1、移植比较好 jpql2、提供了很多crud方法、开发效率高3、对象化程度高My...原创 2019-07-24 21:14:21 · 484 阅读 · 0 评论 -
网络基础笔记
物理层数据链路层网络层传输层 TCP UDP会话层表示层应用层一、TCP三次握手二、TCP四次挥手原创 2019-06-12 10:44:05 · 131 阅读 · 0 评论 -
Java-ClassLoader
ClassLoader 分类类加载器双亲委派机制1、自底向上检查类是否已经加载2、自顶向下尝试加载类为什么使用双亲委派机制去加载类 ----- 避免多份同样字节码的加载LoadClass 和 forName 区别隐式加载:new显式加载:loadClass,forName类的装载过程...原创 2019-06-25 16:16:54 · 112 阅读 · 0 评论 -
Java小白 电商项目总结
1、架构思想:前后端分离术业有专攻前端同事集中精力做前端页面的效果,bootstrap模板支撑,js,css,html,jq的代码逻辑通过ajax进行接口的请求调用,达到获取服务器数据的目的。后端同事也是尽其所能的做好自己的事情,分层架构,模型的选取,接口、数据库设计,性能研究,不需要像jsp那样,还需要去操作前端的代码逻辑,填充数据。2、搭建项目,目录结构搭建基础的spring-boo...原创 2019-05-24 10:40:31 · 6092 阅读 · 0 评论 -
Java 小白多线程
通常比较常用的方式有两种一、继承Thread类public class KeyPersonThread extends Thread { public void run() { System.out.println(Thread.currentThread().getName() + "开始了战斗!"); for (int i = 0; i < ...原创 2019-05-28 11:36:17 · 143 阅读 · 0 评论 -
nginx-lua入门操作
一、使用lua挂载 init_by_lua 输出日志/usr/local/openresty/ 目录下创建lua目录,lua下创建 init.lua文件,内部使用lua语言编写一段错误日志输出,ngx.log(ngx.ERR, "init lua success");nginx/conf/nginx.conf 添加对应的lua挂载http设置 init_by_lua_file ../lua/...原创 2019-05-27 10:27:23 · 1005 阅读 · 0 评论 -
nginx反向代理、负载均衡(二)
1、购买四台服务器nginx反向代理服务器数据库服务器jar包服务器1jar包服务器22、数据库服务器配置使用mysqldump将本地数据库导出,miaosha.sqlscp miaosha.sql root@IP地址:/tmp/数据库服务器首先创建miaosha数据库 再导入miaosha.sql mysql>source /tmp/miaosha.sql连接到my...原创 2019-05-22 11:33:52 · 123 阅读 · 0 评论 -
nginx反向代理、负载均衡(一)
目前单机服务器架构:单机容量问题,水平扩展:优化方案:终极版本:4台服务器!!!原创 2019-05-22 11:03:58 · 98 阅读 · 0 评论 -
Java小白 多级缓存
首先使用缓存,肯定是为了效率,而我们遵从的原则就是离用户最近的节点进行缓存,但是考虑到不同的业务需求,就衍生出了多种缓存方式。一、直接从mysql中读取这个自然是最基本的操作方式了,在相应的mapper中声明对应的查询方法,通过sql,获取对应的数据库dao原型,供前端展示。二、redis缓存利用redis缓存,通过关键的key查询,如果没有查到,去mysql查找,查到后,通过key保存到...原创 2019-05-25 10:43:57 · 726 阅读 · 0 评论 -
网络基础笔记2
一、TCP的滑动窗口-确认重传RTT:发送一个数据包到收到对应的ACK,所花费的时间RTO:重传时间间隔TCP使用滑动窗口做流量控制与乱序重排保证TCP的可靠性保证TCP的流控特性二、HTTP超文本传输协议支持客户/服务器模式简单快速灵活无连接 【1.1 使用长连接】无状态在浏览器地址栏键入URL,按下回车之后经历的流程DNS解析TCP连接发送HTTP...原创 2019-06-12 16:01:23 · 81 阅读 · 0 评论 -
秒杀电商-库存缓存
先来三张图,说一下具体的思路1、交易流程2、rocketmq部署3、一致性可算是被坑死了,待我细细道来:晕了一下午,明天捋一捋思路。原创 2019-05-31 18:02:21 · 1207 阅读 · 0 评论 -
spring+springmvc+mybatis 秒杀项目实战 DAO实现
一、mvn 命令行创建项目:3.5版本以下:mvn archetype:create -DgroupId=org.seckill -DartifactId=seckill -DarchetypeArtifactId=maven-archettpe-webapp3.5版本以上:mvn archetype:generate -DgroupId=org.seckill -DartifactId=se...原创 2019-05-29 17:06:00 · 444 阅读 · 0 评论 -
JVM
平台无关性 一次编译 到处运行GC语言特性面向对象类库异常处理Compile Once, Run Anywherejavac javap -c 为什么JVM不直接将源码解析成机器码去执行准备工作:每次执行都需要各种检查兼容性:也可以将别的语言解析成字节码JVM如何加载.class文件Java虚拟机package com.java.reflect;pu...原创 2019-06-17 16:33:25 · 93 阅读 · 0 评论 -
Redis 主从同步 集群
PipeLineRedis 同步机制主从同步原理Redis Sentinel [哨兵]集群原创 2019-06-17 11:47:57 · 107 阅读 · 0 评论 -
Redis 分布式锁 异步队列 持久化
存在问题:互斥安全死锁容错// 设置超时时间expire name 2 分布式锁原子性保证异步队列list作为队列 rpush lpopblpoppub/sub持久化 RDB 快照AOF 持久化...原创 2019-06-17 11:23:49 · 400 阅读 · 0 评论 -
Redis
Memcache 和 Redis 区别Memcache 代码层次类似hash区别MemcacheRedis数据类型简单数据类型丰富持久存储否是主从否是分片否是为什么Redis能这么快常用数据类型Stringset name "roger"get nameset count 1get countincr ...原创 2019-06-17 10:26:38 · 127 阅读 · 0 评论 -
事务型消息
在进行秒杀项目的开发过程中,遇到了一个问题,下单-库存减少异步处理库存,下单后,进行redis操作,订单入库,销量增加,异步操作数据库库存一、直接使用Springboot提供方法// Springboot 提供的事务操作方法 当前事务操作成功 方法调用TransactionSynchronizationManager.registerSynchronization(new Transact...原创 2019-06-11 14:12:24 · 1216 阅读 · 0 评论 -
流量削峰
掌握秒杀令牌的原理和使用方式掌握秒杀大闸的原理和使用方式掌握队列泄洪的原理和使用方式目前项目的缺陷秒杀下单接口会被脚本不停的刷秒杀验证逻辑和秒杀下单接口强关联,代码融入度高秒杀验证逻辑复杂,对交易系统产生无关联负载秒杀令牌原理秒杀接口需要依靠令牌才能进入秒杀的令牌由秒杀活动模块负责生成秒杀活动模块对秒杀令牌生成全权处理,逻辑收口秒杀下单前需要先获得秒杀令牌 S...原创 2019-06-20 17:19:40 · 1089 阅读 · 0 评论 -
数据库语法
程序不会骗人,你会就能写对,不会,那就是不对group byhavingcount sum max min avg原创 2019-06-14 17:10:33 · 100 阅读 · 0 评论 -
锁模块
1、MyISAM与InnoDB关于锁方面的区别是什么区别MyISAMInnoDB锁只支持表级锁默认行级锁 支持表级锁读锁共享锁加了共享锁,其他操作不能添加排他锁 lock in share mode(当前读)写锁排他锁for update适合场景频繁执行全表count–RUD频率不高–没有事务CRUD频繁–可靠性高,支持事务1.表级锁...原创 2019-06-14 15:23:09 · 232 阅读 · 0 评论