![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 74
学后端的小萝卜头
全网最全java笔记,全网最全mysql笔记,0基础和大家一起学后端,记录学后端的过程和笔记,跟着我学后端。。。
展开
-
使用Redis和对象锁实现限流。(高并发场景下订购)
使用Redis和对象锁实现限流。(高并发场景下订购)原创 2022-07-15 17:07:05 · 500 阅读 · 0 评论 -
Redis多容器高并发场景 , 设置缓存的时候,要考虑多容器加锁的场景。(incr计数和redis分布式锁区别)
redis 的incr 多容器高并发和加锁区别原创 2022-06-24 13:38:41 · 857 阅读 · 0 评论 -
为何在多线程中,不能调用单例方法(一个简单的demo)
为何在多线程中,不能调用单例方法。原创 2022-06-14 10:16:28 · 742 阅读 · 0 评论 -
如何异步更新短信发送出去的数量。一条一条更新数据库会导致并发压力过大。这里介绍一种异步更新的方法
如何异步更新短信发送出去的数量。一条一条更新数据库会导致并发压力过大。这里介绍一种异步更新的方法原创 2022-06-13 10:49:20 · 384 阅读 · 0 评论 -
简单记录一下webSocket服务端的简单使用的介绍
webSocket简单使用和demo原创 2022-06-02 11:01:18 · 1601 阅读 · 0 评论 -
如何将一个List列表,通过id和parentId将其转换成Tree结构
如何将一个List列表,通过id和parentId将其转换成Tree结构原创 2022-06-02 10:26:11 · 997 阅读 · 0 评论 -
java并发编程(2):Callable、Future和FutureTask多任务执行
java并发编程(2):Callable、Future和FutureTask多任务执行 常见创建线程的2种方式:一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 &n原创 2021-11-24 11:04:12 · 679 阅读 · 0 评论 -
java并发编程(3):Concurrent包中BlockingQueue阻塞队列详解
认识BlockingQueue阻塞队列一.前言 在新增的Concurrent包(建议大家去学习了解一下,针对线程安全,多线程并发做的工具包)中, BlockingQueue阻塞队列很好的解决了在多线程中,高效的安全的解决”数据传输“问题,通过使用这些线程安全的队列类,为我们搭建高质量的多线程程序带来了极大的便利。二. 认识BlockingQueue阻塞队列:队列,在数据结构中的作用如图: 常用的队列主原创 2021-11-23 11:24:55 · 436 阅读 · 0 评论 -
mybatis中trim,foreach等标签以及prefixOverrides、suffixOverrides等属性的意义以及使用
1.首先来看一下常用的属性作用1.以下是trim标签中涉及到的属性属性prefix拼接sql语句中所用到的前缀suffix拼接sql语句中所用到的后缀prefixOverrides去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"suffixOverrides去除sql语句后面的关键字或者字符,该关键字或者字符由suffix原创 2021-11-18 19:52:43 · 5567 阅读 · 0 评论 -
Mybatis使用sql拼接,使用List切片,进行分片查询。
分片实现的场景当在for循环中,对数据库进行操作的时候,每一次循环都会与数据库建立连接,对数据库造成了很大的压力。这个时候可以使用sql拼接的方式,但是我们在sql拼接的时候,如果拼接的字符串过长,数据库仍然会报错, 这个时候,我们需要根据实际情景,去设置一个list的分片大小。1.对List分片,实现sql拼接,减少对数据库的查询次数。集合过大,单词处理sql拼接字符串过长,对数据库会造成很大压力,甚至报错。比如 Oracle数据库中IN参数个数不能超过1000 。首先,通过List对实现sq原创 2021-11-18 19:14:08 · 1737 阅读 · 0 评论 -
Map集合中values,keySet,entrySet的区别以及用法。
Map集合中values,keySet,entrySet的区别以及用法。1.先来看一下阿里java编码规范是怎么解释的。再来看定义:在Map集合中values():方法是获取集合中的所有的值----没有键,没有对应关系,这里要注意,valus()方法获取的只有V集合。KeySet():将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key .注意,这里keySet()原创 2021-09-28 09:48:39 · 1339 阅读 · 0 评论 -
JDK8 Stream流Collectors的groupingBy和mapping
JDK8 Stream分组功能 Collectors.groupingBy 两种写法Map<String, List<String>> sortFood = FoodList.stream().collect(Collectors.groupingBy(Food::getColor, Collectors.mapping(Food::getSort, toList())));sortFood.forEach((k, v) -> { System.out.printl原创 2021-09-27 10:14:46 · 1530 阅读 · 0 评论 -
Redis笔记
Redis1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为原创 2021-03-07 23:13:57 · 107 阅读 · 0 评论 -
java过滤器监听器讲解
1.Filter:过滤器1.概念: 生活中的过滤器:净水器,空气净化器,土匪、 web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。过滤器的作用: 一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤…2.快速入门:1.步骤:定义一个类,实现接口Filter复写方法配置拦截路径web.xml注解2.代码:@WebFilter("/*")//访问所有资源之前,都会执行该过滤器 public class FilterD原创 2021-03-03 15:47:18 · 97 阅读 · 1 评论 -
EL$jstl讲解笔记
JSP:1. 指令 * 作用:用于配置JSP页面,导入资源文件 * 格式: <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> * 分类: 1. page : 配置JSP页面的 * contentType:等同于response.setContentType() 1. 设置响应体的mime类型以及字符集 2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符原创 2021-03-01 16:30:39 · 86 阅读 · 0 评论 -
session和cookie讲解
1. 会话技术 1. Cookie 2. Session2. JSP:入门学习会话技术1. 会话:一次会话中包含多次请求和响应。 * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止2. 功能:在一次会话的范围内的多次请求间,共享数据3. 方式: 1. 客户端会话技术:Cookie 2. 服务器端会话技术:SessionCookie:1. 概念:客户端会话技术,将数据保存到客户端2. 快速入门: * 使用步骤: 1. 创建Cookie对象,绑定数原创 2021-03-01 10:05:05 · 170 阅读 · 0 评论 -
request对象和response对象详细讲解
Servlet:概念步骤执行原理生命周期Servlet3.0 注解配置Servlet的体系结构 Servlet – 接口|GenericServlet – 抽象类|HttpServlet – 抽象类GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可HttpServlet:对http协议原创 2021-02-26 11:19:32 · 813 阅读 · 0 评论 -
详细讲解Servlet的使用(执行原理、生命周期、3.0注解配置)
1.Servlet: server applet概念:运行在服务器端的小程序Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。将来我们自定义一个类,实现Servlet接口,复写方法。先来了解一下Servlet3.0之前快速入门:1. 创建JavaEE项目2. 定义一个类,实现Servlet接口* public class ServletDemo1 implements Servlet3. 实现接口中的抽象方法4. 配置Servlet在web.x原创 2021-02-25 10:14:24 · 448 阅读 · 1 评论 -
tomcat安装运行和idea项目部署----详解
1.Tomcat:安装运行和部署讲解下载:http://tomcat.apache.org/安装:解压压缩包即可。注意:安装目录建议不要有中文和空格卸载:删除目录就行了4.启动:* bin/startup.bat ,双击运行该文件即可访问:浏览器输入:http://localhost:8080 回车访问自己http://别人的ip:8080 访问别人可能遇到的问题:1.黑窗口一闪而过:原因: 没有正确配置JAVA_HOME环境变量解决方案:正确配置JAVA_HOME环境原创 2021-02-25 09:49:13 · 199 阅读 · 0 评论 -
数据库连接池 C3P0:Druid:Spring JDBC
数据库连接池 概念:其实就是一个容器(集合),存放数据库连接的容器。 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器好处:节约资源用户访问高效实现:标准接口:DataSource javax.sql包下的方法:获取连接:getConnection()归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connectio原创 2021-02-24 09:35:30 · 111 阅读 · 0 评论 -
MySQL【JDBC连接池全网最详细讲解--jdbc常用类详细讲解】
JDBC1.1什么是 JDBC JDBC 规范定义接口,具体的实现由各大数据库厂商来实现。JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即可,数据库驱动由数据库厂商提供。使用 JDBC 的好处:1).程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。2) 使用同一套 Java 代原创 2021-02-23 10:44:32 · 355 阅读 · 0 评论 -
java【Stream流和方法引用】详细讲解
【Stream流、方法引用】1.Stream流说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所带 来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。1.1 引言传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元 素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如:impo原创 2021-02-20 21:06:08 · 238 阅读 · 0 评论 -
java【网络编程TCP/IP Socket[类] 套接字 ServerSocket[类] C/S B/S】详细讲解
【网络编程】1.网络编程入门1.1软件结构C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。1.2 网络通信协议**网络通信协议:**通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信原创 2021-02-20 19:06:35 · 735 阅读 · 0 评论 -
java【函数式接口】【函数式编程】详细讲解
函数式接口1.1 概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口。 函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。备注:“语法糖”是指使用更加方便,但是原理不变的代码语法。例如在遍历集合时使用的for-each语法,其实 底层的实现原理仍然是迭代器,这便是“语法糖”。从应用层面来讲,Java中的Lambda原创 2021-02-20 17:11:59 · 540 阅读 · 0 评论 -
java【缓冲流,转换流,序列化流】重点详细讲解
【缓冲流、转换流、序列化流】1. 缓冲流 今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础之上创建而来的,就像穿上铠甲的武士一样,相当于是对基本流对象的一种增强。1.1 概述缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类:字节缓冲流:BufferedInputStream,BufferedOutputStream字符缓冲流:Buffered原创 2021-02-20 14:19:20 · 155 阅读 · 0 评论 -
java【字节流、字符流】详细讲解
【字节流、字符流】1.IO概述1.1 什么是IO 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。 我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input 和输出output ,即流向内存是输入流,流出内存的输出流。 Java中I/O操作主要是指使用java.io包下的内容,进行原创 2021-02-20 11:28:48 · 165 阅读 · 0 评论 -
java中【File类和递归】详细讲解
【File类、递归】1.File类1.1 概述java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。1.2 构造方法public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, Str原创 2021-02-20 10:14:45 · 152 阅读 · 0 评论 -
线程池简单介绍
1.线程池1.1 线程池思想概述我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池。1.2 线程池概念**线程池:**其实就是一个容纳多个线原创 2021-02-19 20:37:48 · 84 阅读 · 0 评论 -
Java函数式编程Lambda表达式
1.Lambda表达式1.1 函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。面向对象的思想: 做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.函数式编程思想: 只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程1.2 冗余的Runnable代码传统写法当需要启原创 2021-02-19 20:31:51 · 138 阅读 · 0 评论 -
生产者消费者问题---解决吃包子问题(等待唤醒机制)
1. 等待唤醒机制1.1 线程间通信概念: 多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。为什么要处理线程间通信: 多个线程并发执行时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并且我们希望他们有规律的执行, 那么多线程之间需要一些协调通信,以此来帮我们达到多线程共同操作一份数原创 2021-02-19 20:19:47 · 217 阅读 · 0 评论 -
java线程的6种状态快速理解
1.线程状态1.1 线程状态概述 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中, 有几种状态呢? 在API中 java.lang.Thread.State 这个枚举中给出了六种线程状态: 这里先列出各个线程状态发生的条件,下面将会对每种状态进行详细解析线程状态导致状态发生条件NEW(新建)线程刚被创建,但是并未启动。还没调用start方法。Runnable(可 运行)线程可以在java虚拟机中运行的状态,可能正在原创 2021-02-19 16:44:50 · 118 阅读 · 0 评论 -
java中解决线程安全的方法(1.同步代码块 2.同步方法 3.lock锁)
1. 线程安全1.1线程安全如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样 的,而且其他的变量的值也和预期的是一样的,就是线程安全的。我们通过一个案例,演示线程的安全问题: 电影院要卖票,我们模拟电影院的卖票过程。假设要播放的电影是 “葫芦娃大战奥特曼”,本次电影的座位共100个 (本场电影只能卖100张票)。我们来模拟电影院的售票窗口,实现多个窗口同时卖 “葫芦娃大战奥特曼”这场电影票(多个窗口一起卖这100张票) 需要窗口,采用线程对象来模拟原创 2021-02-19 16:15:04 · 231 阅读 · 0 评论 -
java多线程原理(以及创建线程的两种方法)
1.线程1.1 多线程原理画个多线程执行时序图 来体现一下多线程程序的执行流程。代码如下:自定义线程类:public class MyThread extends Thread{ /** 利用继承中的特点 * 将线程名称传递 进行设置 */ public MyThread(String name){ super(name); } /** 重写run方法 * 定义线程要执行的代码 */ public void run(){ for (int i = 0; i <原创 2021-02-19 15:54:27 · 301 阅读 · 0 评论 -
java多线程中的并发与并行区别详解(3分钟快速了解)
1.多线程我们在之前,学习的程序在没有跳转语句的前提下,都是由上至下依次执行,那现在想要设计一个程序,边打游戏边听歌,怎么设计?要解决上述问题,咱们得使用多进程或者多线程来解决.1.1 并发与并行并发:指两个或多个事件在同一个时间段内发生。并行:指两个或多个事件在同一时刻发生(同时发生)。在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分原创 2021-02-19 14:08:13 · 2006 阅读 · 0 评论 -
java中异常【try...catch throw throws】详解
【异常】1.异常1.1 异常概念异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是:异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.1.2 异常体系异常机制其实原创 2021-02-19 13:57:16 · 1014 阅读 · 0 评论 -
2分钟教会你如何Java中DeBug【IDEA中Java】
1 Debug追踪使用IDEA的断点调试功能,查看程序的运行过程在有效代码行,点击行号右边的空白区域,设置断点,程序执行到断点将停止,我们可以手动来运行程序 点击Debug运行模式程序停止在断点上不再执行,而IDEA最下方打开了Debug调试窗口Debug调试窗口介绍快捷键F8,代码向下执行一行,第九行执行完毕,执行到第10行(第10行还未执行)切换到控制台面板,控制台显示 请录入一个字符串: 并且等待键盘录入快捷键F8,程序继续向后执行,执原创 2021-02-19 11:13:47 · 792 阅读 · 1 评论 -
Java中Map集合以及常用子类【hashMap,LinkedHashMap】的讲解
【Map】主要内容Map集合1.Map集合1.1 概述现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方原创 2021-02-19 11:06:34 · 431 阅读 · 0 评论 -
JAVA集合【List和Set】讲解
1.List的子类1.1 ArrayList集合java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。1.2 LinkedList集合java.util.LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。LinkedList是一个双向链表,那么双向链表是什么原创 2021-02-18 18:53:28 · 404 阅读 · 2 评论 -
Java中数据结构【堆,栈,链表,红黑树】快速讲解
【数据结构】主要内容数据结构1.数据结构1.1 数据结构有什么用?当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。现实世界的存储,我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗?而算法,在这么多的数据中如何做到最快的插入,查找,删除,也是在追求更快。我们java是面向对象的原创 2021-02-18 16:21:39 · 244 阅读 · 0 评论 -
java【集合小作业案例】实现斗地主发牌
1集合综合案例1.1 案例介绍按照斗地主的规则,完成洗牌发牌的动作。具体规则:使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。1.2 案例分析准备牌:牌可以设计为一个ArrayList,每个字符串为一张牌。每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。牌由Collections类的shuffle方法进行随机排序。发牌将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模原创 2021-02-18 15:32:19 · 243 阅读 · 0 评论