![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA
文章平均质量分 93
JAVA系列
柏油
不负冬日春晓 不负青春韶华
展开
-
用户体系之账户设计
随着互联网的发展,越来越多的应用、网站需要用户进行登录才能使用。为了方便用户登录,现在的应用通常提供多种登录方式,比如手机号、微信、抖音、快手 … ,这样你就不用干巴巴的记下账号、密码,通过几种常见的登录方式快速登录原创 2023-07-30 12:46:26 · 960 阅读 · 0 评论 -
Apollo 热更新配置
简单来说,Apollo 是一个配置中心,可以非常方便管理公司所有项目配置,并支持热更新。本文主要讲解 Apollo 在 Spring 环境下的热更新操作。原创 2023-06-15 17:55:29 · 3047 阅读 · 0 评论 -
Ebean 字段别名配置引发语法问题
Ebean 没听过?这里简单给你介绍下:Ebean 是一个 Java ORM(Object-Relational Mapping)框架,具有以下优势:1. 简单易用:Ebean 的 API 设计简单易用,可以快速上手,无需繁琐的配置。2. 自动化 SQL 生成:Ebean 可以自动化生成 SQL 语句,开发者无需手写 SQL,提高了开发效率。原创 2023-05-13 13:11:45 · 667 阅读 · 1 评论 -
短链接是怎么设计的?带你入门
说到 URL 你肯定不陌生,浏览器输入一段 URL,立马就跳转到你想要的网站,不过你应该也遇到过一些带了很多参数、特别长的 URL,看起来就乱糟糟的,能不能把它变短一点?首先你要知道的是,长链是没法压缩成短链的,那我们这里怎么设计短链?原创 2023-03-23 07:30:31 · 2758 阅读 · 2 评论 -
Cookie、Session、JWT 那些事
目前 C/S 模式盛行,HTTP 是其中最常见的通信协议,我们知道 HTTP 协议是无状态的,但是这场景完全不够用。比如,我们微信扫描登录一个网站后,肯定不希望频繁登录嘛,那我们的诉求就是希望在一段时间内,网站能够 “记忆” 我们的登录状态,而这个 “记忆” 的能力 HTTP 是没法完成的,所以需要我们额外做点什么 ...你想想,两端通信过程,状态信息要么存在客户端、要么存在服务端,简言之,现在的问题是,要如何存、存哪里的问题。当然,这块技术已经很成熟了,我们只需要学会怎么去用就 OK 了。原创 2023-02-28 08:18:44 · 228 阅读 · 0 评论 -
Jackson 序列化:Cannot deserialize value of type `java.time.LocalDateTime`
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDateTime` from String "2023-02-13 19:43:01": Failed to deserialize java.time.LocalDateTime:原创 2023-02-18 11:07:53 · 3198 阅读 · 1 评论 -
okhttp 应用之 Interceptors 拦截器,「实践 + 原理」一样都不少
okhttp 是什么?一款封装 HTTP 协议的 HTTP 客户端。拦截器是 okhttp 提供的一个强有力的工具,我们可以在请求前后做监控、请求/响应进行重写、失败重试等操作。原创 2022-10-05 09:22:26 · 2143 阅读 · 1 评论 -
spring-Kafka之@KafkaListener深入解读
本文主要通过深入了解源码,梳理从spring启动到真正监听kafka消息的这套流程原创 2021-05-12 00:24:20 · 9455 阅读 · 3 评论 -
通过Intent启动Activity、获取Activity返回值
父Activity:MainActivity.javapackage com.example.test61;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.Menu;import原创 2017-10-30 18:30:50 · 4295 阅读 · 0 评论 -
Android 拍照与视频拍摄
(1) 掌握相机的启动方法;(2) 掌握拍照拍摄后图片、视频的存储方法;(3) 掌握照片的读取方法;Activity:package com.example.leidaiwen3006sy7;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;im原创 2017-11-16 09:36:21 · 640 阅读 · 0 评论 -
泛型面试问题
出处:http://blog.csdn.net/sunxianghuang/article/details/51982979泛型相关面试题1. Java中的泛型是什么 ? 使用泛型的好处是什么?泛型是一种参数化类型的机制。它可以使得代码适用于各种类型,从而编写更加通用的代码,例如集合框架。泛型是一种编译时类型确认机制。它提供了编译期的类型安全,确保在泛型类型(通常为转载 2017-11-07 12:18:53 · 489 阅读 · 0 评论 -
hibernaer--(fetch=FetchType.EAGER带来的问题)级联删除
Exception in thread "main" org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.bean.User#7] at org.hibernate.internal.Ses原创 2017-09-01 20:12:12 · 1440 阅读 · 0 评论 -
struts2--URL带参数的请求注意空格的影响
案例: function del(id){ if(confirm("确定要删除吗?")){ window.location.href = "deleteGoods.action?id ="+id; } } 商品编号 商品名称 商品价格 商品数目 操作原创 2017-08-25 10:20:35 · 544 阅读 · 0 评论 -
SSH事务处理出现的问题(org.springframework.dao.InvalidDataAccessApiUsageException: )
抛出一下异常:org.springframework.dao.InvalidDataAccessApiUsageException:Write operations are not allowed in read-only mode (FlushMode.NEVER) turn your Session into FlushMode.AUTO or remove 'readOnly' mar原创 2017-09-19 21:15:04 · 722 阅读 · 0 评论 -
Java签名验证、request body数据多次读取(request body数据用以签名时注意问题)、Content-Type
问题背景:最近对接第三方接口,出现了签名问题;起初接触的签名一般将url参数、请求头中的参数用以签名, 因此当遇到把body数据用以签名时走了一些弯路; 起初想法是 我这边将数据通过工具将对象转化为json字符串,对方通过框架将数据映射成实体对象,然后将实体对象转化为json,再取出url参数、请求头参数 按相同的方法进行签名。这种方式问题很明显,1、当两方使用不同的json转化工具时,转化的字符...原创 2019-07-06 23:14:26 · 3363 阅读 · 0 评论 -
hibernate--事物机制(面试)
事务:要么都完成,要么都不完成:特性:ACID:原子性(atonic)、一致性(consistency)、独立性(Itegrity)、持久性(durability)事务并发控制1)幻读:插入与更新的问题,当读取数据之后,另一事务又向数据库插入一条记录,导致两次读取结果不一致2)脏读:读了另一个事务还未提交的数据。3)不可重复读:前后读取数据不一致。原创 2017-09-04 21:22:37 · 281 阅读 · 0 评论 -
关于Class File Editor Source not found
网上的方法试了很多种,未果!然后找到下面的一种方法,因为jar包中给出的是.class文件,而未与源文件相关联,故一种解决方法是通过反编译器得到源文件(下面的一种解决方法),另外一种是下载源文件,与之关联。下面是某个百度回答 这个不算是错误啊!你打开jar包下的class文件,eclipse只能根据jdk提供的反编译功能来现实该class反编译出来的类似汇编语言的程序代码(原创 2017-07-28 00:01:49 · 747 阅读 · 0 评论 -
com.netflix.hystrix.exception.HystrixRuntimeException: XxxClient#getXxx() failed and fallback failed
异常:│ com.netflix.hystrix.exception.HystrixRuntimeException: XxxClient#getXxx() failed and fallback failed. │ at com.netflix.hystrix.AbstractCommand$22.call(AbstractComma原创 2021-03-29 23:16:03 · 7180 阅读 · 3 评论 -
hibernate--1+N问题(典型问题)
在处理@ManyToOne等关联关系时,根据业务需求,本应只需取出要求的对象即可(hibernate发出一条sql语句),但是由于该对象属性关联了另外的一个类,因关联关系的存在会继续发出n条sql语句来处理,故称1+N问题:解决方法:一、设置fetch状态属性为LAZY。二、@BatchSize(size=5),设置在当前对象的属性关联的类的定义之前。三、join fetch,通过原创 2017-09-03 22:20:40 · 382 阅读 · 0 评论 -
hibernate--一级缓存_二级缓存_查询缓存(面试)
一级缓存:session级别的缓存二级缓存:sessionFactory级别的缓存,可以跨session存在(一般在对项目要求的效率很高的情况下考虑使用)二级缓存适合经常访问、数据量有限、改动不大的情况下。原创 2017-09-04 14:41:50 · 1267 阅读 · 0 评论 -
Feign-Hystrix 熔断降级,一文看透本质
最近这些年,微服务盛行。服务拆分越来越细、越来越多。为方便微服务之间的调用,各种 RPC 框架层出不穷,目的就是让开发者像调用本地方法一样调用微服务。微服务之间交流的核心是网络请求,这个过程涉及到应用层和网络层: - 网络层:最常用的是 TCP / UDP 协议 - 应用层:本质上说,应用层协议是负责对数据编码、解码的约定,比如我们常见的 HTTP、Websocket 协议等。一般情况下,我们想要实现网络通信,有两种选择:- 使用现成应用层协议:比如 http 等- 基于网络层(TCP/UD原创 2022-08-30 08:00:00 · 2161 阅读 · 0 评论 -
分布式限流利器,小试牛刀
限流,是网站防止流量洪峰的必要手段,尤其是一些重要资源的处理,甚为重要。限流的核心目的自然是保障网站的正常运行,避免处理超过网站自身的流量,压死骆驼的最后一个稻草,你懂得。常见的限流算法有 `计数器`、`漏桶算法` 和 `令牌算法`。在之前的文章已经做过分析,有兴趣可以[详情查看](https://blog.csdn.net/ldw201510803006/article/details/83717870?spm=1001.2014.3001.5501)本文主要分析令牌桶算法,令牌桶有哪些特点?原创 2022-07-31 16:57:02 · 2449 阅读 · 0 评论 -
Tomcat整体架构,脉络梳理看这篇就够了~
文章目录前言Tomcat 要实现 2 个核心功能:Tomcat 支持的多种 I/O 模型和应用层协议Tomcat组件一览一、Tomcat核心组件1、Server组件2、Service组件3、Connector组件4、Engine组件5、Host组件6、Context组件7、Wrapper组件二、请求处理整体过程总结前言Tomcat 要实现 2 个核心功能:处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。加载和管理 Servlet,以及具体处理 Re原创 2021-08-26 23:54:11 · 921 阅读 · 0 评论 -
NioEndpoint核心组件,tomcat参数调优你用得着
文章目录前言一、NioEndpoint总体概览二、NioEndpoint核心实现1. LimitLatch组件2. Acceptor组件3. Poller组件4. SocketProcessor5. Executor总结前言NioEndpoint在Tomcat中扮演的角色负责接收请求的连接,并封装成SocketProcessor,最后交给线程池去执行;NioEndpoint 组件实现了 I/O 多路复用模型。一、NioEndpoint总体概览Tomcat 的 NioEndpoint 包含原创 2021-08-20 00:13:22 · 911 阅读 · 0 评论 -
一文搞懂,4种主要的 I/O 模型(高并发IO的底层原理)
文章目录前言4种主要的IO模型1. 同步阻塞IO2. 同步非阻塞IO3. IO多路复用4. 异步I/O总结前言I/O是什么?I/O 就是计算机内存与外部设备之间拷贝数据的过程,CPU 访问内存的速度远远高于外部设备,因此 CPU 是先把外部设备的数据读到内存里,然后再进行处理I/O模型要解决的问题考虑一个实际场景:数据读取操作的基本流程,首先是在用户态发起调用操作,通过系统函数read()间接的调用系统内核,从网卡读取数据,先将数据读取到内核缓冲区,再由内核缓冲区拷贝到用户态内存缓冲区原创 2021-08-18 00:29:50 · 4488 阅读 · 4 评论 -
Netty 的 FastThreadLocal有多快?
可以理解为FastThreadLocal是针对Netty特定的场景出现的,与传统ThreadLocal各有优劣原创 2021-07-10 23:59:39 · 141 阅读 · 0 评论 -
FutureTask源码分析
什么是Future?从字面上来看,Future表示将来的意思,也就是说现在执行某个任务可能是不能立即拿到返回值,在将来的某个时间点 当task执行完毕也就可以拿到了;那么这个返回值在哪呢?就封装在future中(实现类)Future 最主要的作用是,比如当做一定运算的时候,运算过程可能比较耗时,有时会去查数据库,或是繁重的计算,比如压缩、加密等,在这种情况下,如果我们一直在原地等待方法返回,显然是不明智的,整体程序的运行效率会大大降低。我们可以把运算的过程放到子线程去执行,再通过 Future 去控制子原创 2020-08-08 16:37:00 · 232 阅读 · 0 评论 -
ThreadPoolExecutor线程池源码分析
为什么要使用线程池,有哪些好处?每个任务都创建一个线程带来的问题反复创建线程系统开销比较大,每个线程创建和销毁都需要时间,如果任务比较简单,就有可能导致创建和销毁线程消耗的资源比线程执行任务本身消耗的资源还要大过多的线程会占用过多的内存等资源,还会带来过多的上下文切换,同时还会导致系统不稳定通过线程池解决以上问题针对反复创建线程开销大的问题,线程池用一些固定的线程一直保持工作状态并反复执行任务针对过多线程占用太多内存资源的问题,线程池会根据需要创建线程,控制线程的总数量,避免占用过多内存资原创 2020-08-07 00:00:05 · 744 阅读 · 1 评论 -
可重入读写锁ReentrantReadWriteLock源码分析
写在前面ReentrantReadWriteLock的基础是AQS,因此最好先掌握AQS的原理AQS原理分析ThreadLocal原理分析为什么出现读写锁?相比于ReentrantLock具有完全互斥排他的效果,也就是同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务。虽然这样做保证了实例变量的线程安全性,但并行效率是比较地下的;所以读写锁的出现,将读、写加锁操作分开处理,可以加快运行效率;读写锁适用场合相比于 ReentrantLock 适用于一般场合,R原创 2020-08-03 19:05:47 · 248 阅读 · 0 评论 -
可重入锁ReentrantLock源码分析
写在前面本文主要是针对ReentrantLock实现AQS的基础上的分析以及对Condition的相关分析因此建议先了解AQS的实现原理,对ReentrantLock的原理便很容易理解了AQS相关源码分析什么是可重入锁?可重入锁是指当某个线程已经持有了这把锁,但是某个时刻,这个线程还要尝试再次拿到这把锁,支持这种可重入的实现就是可重入锁;以ReentrantLock可重入锁来看,其state表示重入次数,当想要再次拿到这把锁的时候,state+1;当想要释放这把锁的时候state-1,因此原创 2020-08-03 01:10:53 · 202 阅读 · 0 评论 -
JAVA并发基石之AQS,不得不掌握的炼级心法
AQS是什么?全称AbstractQueuedSynchronizer 抽象队列同步器,是java.util.concurrent.locks包下的基础组件,是用于构建锁和同步器的框架,通俗的理解就是多线程环境下,AQS封装了一揽子对临界资源线程安全的操作,以ReentrantLock来看:获取锁?成功则锁住,否则放入FIFO队列等待获取锁(线程挂起或者说阻塞),锁的释放等这些底层操作都由AQS封装;许多同步器都可以通过AQS很容易并且高效的构造出来AQS在Java并发编程中扮演什么角色?jav原创 2020-08-02 13:15:12 · 260 阅读 · 0 评论 -
ThreadLocal源码分析
ThreadLocal源码分析什么是ThreadLocal?可以看做线程内局部变量,也就是线程间隔离,仅在当前线程范围内有效。比如我们通常都会定义全局范围内的普通变量全局范围变量就是临界资源,那就会有多线程安全问题;但是如果定义的是ThreadLocal变量,每个线程都持有参数副本,各自间互不妨碍,也就没有多线程问题什么时候用ThreadLocal?比如在同一个线程内 不同逻辑间需要共享数据(但又无法通过传值来共享数据),或者在同一个线程内为避免重复创建对象 而希望数据重用等情况.如何使原创 2020-07-25 14:12:36 · 317 阅读 · 0 评论 -
观察者模式设计-Guava EventBus源码分析
EventBus源码分析观察者模式观察者模式(Observer Design Pattern)也被称为发布订阅模式(Publish-Subscribe Design Pattern)。在 GoF 的《设计模式》一书中,它的定义是这样的:Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated auto原创 2020-07-24 08:42:55 · 303 阅读 · 0 评论 -
初识junit
eclipse自带了junit的jar包,另外可以下载最新版本的jar导入到项目中1、junit-4.12.jar2、hamcrest-core-1.3.jar3、hamcrest-library-1.3.jarpackage com.dw.junit4.test;import static org.junit.Assert.*;import static org.hamcrest.Mat原创 2017-09-05 22:03:35 · 207 阅读 · 0 评论 -
Guava Cache源码分析
缓存缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。缓存的类型分为:本地缓存、分布式缓存和多级缓存本地缓存:也就是在进程的内存中进行缓存,比如最简单的Map来实现,也可以使用Guava Cache和Ehcache这样的工具来实现;本地缓存是内存访问,没有远程交互开销,性能最好,但是受限于单机容量,一般缓存较小且无法扩展。分布式缓存: 一般具有良好的水平扩展能力,可以很好的解决以上问题,对较大数据量的场景也能应付自如。缺点就是需要进行远程请求,性能不如本地缓存多级缓存原创 2020-07-18 19:16:08 · 388 阅读 · 0 评论 -
泛型-泛型类、接口、方法
为什么要使用泛型?优点在哪里?使用java泛型的动机在编译时检测出错误。一、泛型方法可以为静态方法定义为泛型类型!1、非受限泛型:<T> 等价于受限泛型<T extends Object>public class GenericMethodDemo { public static void main(String[] args) { Integer[] i...原创 2018-05-25 12:37:39 · 1093 阅读 · 0 评论 -
泛型-通配泛型、消除泛型
一:通配泛型有三类:<?>非受限通配、<? extends T>受限通配 、<? super T>下限通配案例一:package fanxin;public class WildCardNeedDemo { public static void main(String[] args) { GenericStack<Integer>...原创 2018-05-27 08:36:44 · 935 阅读 · 0 评论 -
模拟栈的底层实现(用数组线性表实现)
由于栈只允许在栈顶进行插入与删除操作,所以用数组线性表来实现栈比用链表来实现效率更高:接口:package shixian;public interface MyStack<E> { /**返回栈的大小*/ public int size(); /**出栈操作*/ public E pop(); /**进栈操作*/ public void push(E e); ...原创 2018-06-11 13:46:19 · 330 阅读 · 0 评论 -
堆、队列、优先队列底层实现
1、通过ArrayList实现大根堆:堆:有大根堆和小根堆,对于大根堆来说,其左右子元素比根元素小1)添加操作:首先将它添加到堆的末尾,然后按以下方式建树:将最后一个结点作为当前结点while(当前结点大于它的父节点){将当前结点和它的父结点交换;现在当前结点往上进一个层次;}2)删除操作:删除之后将最后一个结点成为当前根结点,然后维护该数,其余操作和添加操作类似package shixian;...原创 2018-06-15 23:55:00 · 2887 阅读 · 0 评论 -
模拟ArrayList、LinkedList底层实现
1、MyList接口:package shixian;public interface MyList<E> extends Iterable<E> { /**添加一个新元素在list末尾*/ public void add(E e); /**添加一个新元素在指定的索引处*/ public void add(int index,E e); /**clear...原创 2018-06-09 17:58:34 · 208 阅读 · 0 评论