自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IT小小鸟

千里之行,始于足下----IT小小鸟的探索之旅

  • 博客(76)
  • 资源 (3)
  • 收藏
  • 关注

原创 数据容器——Java中的栈和队列

队列队列,一种先进先出的数据结构常用的操作队列的方法有:

2021-05-21 09:25:24 205

转载 让你的代码更优秀的 14 条建议

【转载】让你的代码更优秀的 14 条建议

2021-05-08 15:09:57 164

原创 使用Lock锁及Condition实现自定义阻塞队列

前言Lock锁相对于传统的synchronized关键字来说更加灵活,Lock锁为我们提供了显示加锁、可中断加锁、超时加锁等机制。Lock锁 VS synchronized锁:二则都是可重入锁synchronized是关键字,不会导致死锁,而Lock可能会出现死锁;synchronized不能响应中断,获取不到锁会一直阻塞,而Lock可以响应中断,可以知道是否获取了锁synchronized为独占锁,锁的获取和释放由JVM实现实现阻塞队列阻塞队列要点:当队列中没有元素时就阻塞,有则返

2020-12-01 00:20:51 392

原创 Java中的锁之synchronized

Java中锁的种类synchronizedSynchronized中的锁升级过程偏向锁、轻量级锁、重量级锁之间的转换:

2020-11-18 22:58:22 135

原创 Java多线程之CAS中存在的问题

CAS存在的问题这里重点介绍一下什么是ABA问题针对ABA问题的解决方案:在CAS的同时加入版本号的比较

2020-11-17 21:15:31 315

原创 缓存初见——缓存穿透、缓存击穿、缓存雪崩等问题的解决方案

缓存穿透缓存击穿缓存雪崩

2020-11-03 21:48:35 120

原创 缓存初见——实现缓存同步的几种方案

方案一:数据实时同步对应的业务流程图:方案二:数据准实时同步对应业务流程:方案三:任务调度更新相应业务流程:方案四:binlog日志订阅

2020-11-03 21:35:50 1951

原创 缓存初见——Caffeine的简单使用

Caffeine介绍Caffeine的简单使用使用Caffeine加载数据有三种方式:1、手动加载,也就是构建缓存的时候并不加载数据,在需要的时候再去加载并缓存public static void main(String[] args) throws InterruptedException { Cache<Object, Object> cache = Caffeine.newBuilder() .expireAfterWrite(2000, Time

2020-11-03 20:25:50 1536 2

原创 Optional的妙用——从此告别使用obj==null来判空

前言在日常开发中,一不小心就会出现NPE(NullPointerException),因此总少不了去判断一个对象是否为null的场景,常见的做法像这样:if(obj == null) { // TODO} else { // doSomething()}这样做没什么问题,但是还不够“优(zhuang)雅(X)”,所以 jdk 1.8 之后为我们新增了一个Optional类,从此就在判null的路上越走越远…正题:Optional的妙用1、看外貌:public final class O

2020-11-03 14:55:02 319

原创 缓存初见——EhCache

Ehcache简介Ehcache简单使用首先需要一个配置文件<?xml version="1.0" encoding="UTF-8"?><ehcache> <!-- 指定一个文件目录,当EhCache把数据写到硬盘上时,将把数据写到这个文件目录下 --> <diskStore path="java.io.tmpdir"/> <!-- cache元素的属性: name:缓存名称

2020-10-29 23:53:07 352

原创 缓存初见——Guava Cache的简单使用

Guava Cache简介Guava Cache使用的几种方式1、使用CacheLoader加载public static void main(String[] args) { // 缓存加载器 CacheLoader<String, String> loader = new CacheLoader<String, String>() { @Override public String load

2020-10-29 22:08:38 309

原创 缓存初见——利用Java中的Map实现简单的缓存

前言1、缓存常见的问题2、常见的内存缓存实现使用Java中的Map实现简单的缓存直接看代码,注释比较详细了package com.prince.cache;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;/**

2020-10-28 23:19:46 1232 1

原创 玩儿转nginx——nginx内置变量

Nginx常见的内置变量$remote_addr:客户端地址,通常是ip$remote_port:客户端端口,一般是随机端口$remote_user:客户端用于认证的用户名,没有则显示“-”$local_time:服务器本地时间$server_addr:接受客户端请求的服务器ip地址$server_port:接受客户端请求的服务器的端口$server_name:接受客户端请求的服务器名称,通常是域名(如果有)$host:取值按照以下顺序:①请求行中的host name;②请求头中的“Host

2020-10-13 17:57:15 933

原创 玩儿转nginx——nginx如何处理请求

一个请求来了,nginx首先会判断由哪个server去处理,这里先定义如下三个虚拟server:server { listen 80; server_name example.org www.example.org; ...}server { listen 80; server_name example.net www.example.net; ...}server { listen 80; serv

2020-09-29 14:23:35 836

原创 玩儿转nginx——使用nginx作为HTTP负载均衡器

引言跨多个应用服务器的负载平衡是一种常用的技术,用于优化资源利用、最大化吞吐量、减少延迟和确保容错配置。nginx作为一个高效的HTTP负载均衡器,可以将流量分配到多个应用服务器,提高web应用程序的性能、可伸缩性和可靠性。Nginx负载均衡配置1、nginx支持的负载均衡策略:轮询(round-robin)——请求以循环的方式轮流分发到每个应用服务器最少连接数(least-connected)——请求被分配给活动连接数量最少的服务器对ip进行hash(ip-hash)——对客户端的ip进

2020-09-28 14:37:47 149

原创 玩儿转nginx——配置HTTPS server

一个简单的https server配置server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers

2020-09-27 15:36:41 989

原创 架构之路——Nginx+Tomcat架构图

Java应用程序使用Nginx+Tomcat架构设计

2020-09-26 19:49:20 1113

原创 网络编程——NIO基础

NIO核心组件Buffer 缓冲区Channel 通道Selector 选择器1、Buffer缓冲区Buffer工作原理buffer的简单使用通过下面这个简单代码可以深入理解上面三个参数在每次读或写之后的变化public class BufferDemo { public static void main(String[] args) { // 初始化buffer容量为4字节 ByteBuffer byteBuffer = ByteBuffe

2020-09-26 19:08:19 140

原创 IDEA小技巧——查看Java方法的说明文档

快捷键:Ctrl + Q我们可以用此快捷键快速查看Java方法或者类的说明文档,这样就不用点击到源码类中去看了效果

2020-09-26 00:08:09 1552

原创 网络编程——BIO基本使用

BIO含义BIO简单使用1、客户端:连接本地的8000端口,并发送一个数据到服务器public class BIOClient { public static void main(String[] args) throws IOException { Socket socket = new Socket("localhost", 8000); OutputStream out = socket.getOutputStream(); Scann

2020-09-25 22:33:17 434

原创 网络编程——TCP/UDP协议回顾

OSI网络七层模型各层主要功能TCP协议三次握手与四次挥手机制UDP协议

2020-09-24 21:59:51 89

原创 勿忘初心——JVM调优基础

调优方向常用的JVM调优参数调优思路通用GC参数Parallel收集器调优参数CMS收集器调优参数G1收集器调优参数JIT编译器优化参数

2020-09-24 07:46:39 73

原创 勿忘初心——回顾Java内置命令

Java中常用的内置命令1、javap——Java反编译工具2、 jps——查看当前系统中的Java进程3、jstat—— 监视JVM信息,主要有GC信息等 (★★★★★)使用案例:查看gc情况,每10行重新输出表头,每1秒输出一次jstat -gc -h 10 <进程号> 10004、 jcmd——jps的替代工具(★★★★★)使用案例:1、查看GC堆信息jcmd <pid> GC.heap_info2、查看JVM运行参数jcmd <p

2020-09-22 23:42:34 111

原创 勿忘初心——回顾Java垃圾回收机制

如何判断对象是否可以被回收重点:可达性分析算法PS:Java中引用类型垃圾收集算法Hotspot采用的收集算法垃圾回收器1、 串行收集器2、 并行收集器3、 并发收集器4、 最先进的收集器——G1垃圾收集器的搭配...

2020-09-21 23:29:01 146

原创 勿忘初心——回顾Java类加载机制

类生命周期类加载器双亲委派模型

2020-09-21 21:58:59 78

原创 勿忘初心——ThreadLocal是如何实现线程隔离的

原理图看了图我相信大家已经很明确了,ThreadLocal之所以能达到变量的线程隔离,其实就是每个线程都有一个自己的ThreadLocalMap对象来存储同一个threadLocal实例set的值,而取值的时候也是根据同一个threadLocal实例去自己的ThreadLocalMap里面找,自然就互不影响了,从而达到线程隔离的目的!源码验证(有图有真相)1、验证一:每个线程都有一个自己的ThreadLocalMap对象大家注意看上面的注释:属于当前线程的ThreadLocal值,这个map由T

2020-09-15 22:18:12 892

原创 “云云“众生K8S——hostPath类型的卷挂载

前言容器中的磁盘文件随着容器的生而生,随着容器的死而灭,这给运行在容器中的重要应用来说存在一些问题:当容器崩溃时,kubelet会以初始状态重启容器,会导致容器中的重要文件不复存在当在Pod中运行多个容器时,我们往往需要这些容器共享一些文件于是,K8S便创造了卷——Volumes卷类型之hostPathhostPath类型的卷可以把宿主机节点上的文件或文件夹挂载到pod中先来看看hostPath类型的卷如何配置:apiVersion: v1kind: Podmetadata:

2020-09-15 16:39:55 4172

原创 玩儿转nginx——设置客户端请求体的最大大小

语法client_max_body_size size;默认client_max_body_size 1m;可以放置的位置http模块server模块location模块说明如果客户端请求体超过了设置的大小,则会返回413错误如果设置为0,则不会检测客户端请求体大小...

2020-09-14 14:22:28 1525

原创 Spring框架——springMVC回顾

SpringMVC运行原理SpringMVC参数传递的几种方式1、 服务器向页面传参使用java.util.Map使用org.springframework.ui.Model使用org.springframework.ui.ModelMap使用org.springframework.web.servlet.ModelAndView(建议使用前面三种)import org.springframework.stereotype.Controller;import org.springfra

2020-09-13 13:16:13 111

原创 初识springboot——事务基础

事务特性并发事务可能出现的问题1、 脏读2、 不可重复读3、 幻读事务的隔离级别SpringBoot中事务1、事务注解@Transactional2、事务的传播行为propagation

2020-09-12 13:19:52 181

原创 Mybatis分页插件PageHelper的简单使用

引言实现在controller中实现我们的分页方法如下:/** * 使用PageHelper实现分页 * * @return 分页信息 */ @ResponseBody @GetMapping("/course/list2") public Object list2() { PageHelper.startPage(0, 3); List<VipCourse> all = courseDao.

2020-09-09 21:55:58 220

原创 Spring Data JPA结合Pageable实现分页功能

引言实现在controller中实现我们的分页方法如下:/** * 实现分页列表 * @return */ @ResponseBody @GetMapping("/course/list") public Object list(@RequestParam(name = "pageNum", defaultValue = "0") int pageNum, @RequestParam(name = "

2020-09-09 20:51:29 4792

原创 Spring Data JPA自定义方式实现数据查询

前言上一篇博文Spring Data JPA的简单使用 讲到,如果按照JPA的命名规范,Spring Data Jpa会自动为我们实现数据库相关操作。但如果我们想自己实现数据库相关操作该怎么做?自定义数据库操作使用HQL语句:定义Dao方法,并使用@Query注解写自定义sql,如果是修改类型的SQL,还必须加上@Modifying和@Transactional注解import com.prince.entity.VipCourse;import org.springframework.dat

2020-09-09 00:13:59 1626 1

原创 Spring Data JPA的简单使用

前言什么是Spring DataSpring Data的特点2. 什么是JPA3. Spring Data 与JPA的关系4. Spring Data JPA工作原理Spring Data JPA的简单使用Spring项目的基本配置如下:# 数据库配置spring.datasource.url=jdbc:mysql://localhost:3306/vip_test?serverTimezone=UTC&characterEncoding=utf-8spring

2020-09-08 21:51:49 196

原创 ORM框架——初识Mybatis

Mybatis架构Mybatis工作流程Mybatis封装了JDBC的基本操作Mybatis结构

2020-09-05 23:06:09 130

原创 初识SpringBoot——Spring Data Rest的简单使用

引言使用引入jar包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId></dependency>利用jpa生成相关实体类(省略,可以看我上一篇博客:利用JPA自动生成实体类)定义Repository,并实现JpaReposi

2020-09-03 22:15:00 784 1

原创 初识SpringBoot——配置热部署以及利用JPA自动生成实体类

前言热部署设置setting --> Compiler,勾选如下:2. 双击Shift,搜索registry命令,点击进入修改如下3. 进入项目配置,设置如下:利用JPA自动生成实体类配置数据库根据自己数据库配置,填写账号密码等信息2. 在项目中添加JPA上面弹出框后点击确定即可。生成实体类上面的步骤完成后,在IDEA面板左下角会出现Persistence组件,继续设置:完成以上步骤即可在对应包下看到已经生成好的实体类。...

2020-09-03 20:26:28 554

原创 初识SpringBoot——登录拦截器的实现

导语在Spring应用中,某些资源必须要登录后才能查看,这时候我们就需要定义一个登录拦截器,将未登录的用户请求拦截至☞登录页。实现首先定义我们的拦截器,这里需要实现HandlerInterceptor接口:public class LoginHandlerInterceptor implements HandlerInterceptor { /** * 登录拦截器 * @param request * @param response * @par

2020-09-02 21:57:07 1234

原创 初识SpringBoot——设置SpringBoot应用默认首页

一、使用index.html作为欢迎页面1、静态页面SpringBoot 项目在启动后,首先会去静态资源路径(resources/static)下查找 index.html 作为首页文件。2、动态页面如果在静态资源路径(resources/static)下找不到 index.html,则会到 resources/templates 目录下找 index.html(使用 Thymeleaf 模版)作为首页文件。二、使用其他页面作为欢迎页面1、静态页面假设我们在 resources/stati

2020-09-02 21:32:39 10634 2

原创 初识SpringBoot——SpringBoot原理浅析

现象我们都知道,通过IDEA生成一个SpringBoot项目之后,运行包根路径下的XXXApplication类就能启动项目,并且通过localhost:8080端口就能访问我们的应用,不需要任何额外的配置!这相对于一个Spring项目,即使一个简单的功能都需要“大量”的配置来说,简直方便极了!问题那么问题来了,SpringBoot到底为我们做了哪些事情?分析首先我们生成一个SpringBoot项目,包下面会自动多了这样一个类:@SpringBootApplicationpublic clas

2020-09-02 00:08:05 181

centos下使用Nginx+uWsgi部署Python Flask项目的详细配置

在centos系统下,使用Nginx反向代理和uWsgi服务器部署Python Flask项目,这里记录了我配置的整个过程,亲测可用

2017-05-04

myEclipse中详细配置mySql数据库的步骤

如何在myEclipse中配置Oracle数据库,这是一份图文并茂的文档,也是我个人的实践经验,分享给大家。

2015-08-09

myEclipse中详细配置Oracle数据库

如何在myEclipse中配置Oracle数据库,这是一份图文并茂的文档,也是我个人的实践经验,分享给大家。

2015-08-09

空空如也

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

TA关注的人

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