java
java相关知识点总结
程序员小哲
微信公众号同名:带你在职搞副业
展开
-
spring boot整合redis ---- RedisTemplate 三分钟快速入门
啥时候需要过来粘贴即可~~RedisTemplate 三分钟快速入门引入依赖RedisTemplate方法讲解判断key是否存在获取指定的key的失效时间根据key获取过期时间根据key删除reids中缓存数据保存和读取String保存和读取listHash结构,保存和读取map保存和读取Set保存和读取zset完整示例代码引入依赖<dependency> <groupId>org.springframework.boot</groupId> &.原创 2020-12-28 19:10:10 · 12116 阅读 · 37 评论 -
三分钟搞懂alibaba的excel导出——EasyExcel
注意:学习本文章一定要打开自己的开发工具,代码中有详细的解释。电脑不在身边建议先收藏,方便日后观看。最后祝大家技术突飞猛进,早日拿到心仪的offer。引入依赖<!--easyexcel依赖,导出excel--><dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1..原创 2020-12-08 17:06:39 · 11078 阅读 · 7 评论 -
三分钟学会 Java枚举
/** * 创建枚举对象 * 注意事项: * 一:定义枚举类型 * 二:定义私有变量 * 三:重载构造方法 * 四:编写get/set方法 */public enum MyEnumDemo { HELLO("hello","1","haha1"), WORLD("world","2","haha2"), OTHER("other","3"); private String demo1; private String demo2; priv原创 2020-12-08 12:53:43 · 5022 阅读 · 17 评论 -
WebSocket 从入门到精通 -- Spring boot服务端客户端 -- HTML客户端
这两天打算学习一下WebSocket,但是网上一搜索全都是聊天室实战。WebSocket -- 从入门到精通基础讲解Spring Boot 服务端Spring Boot 客户端HTML 客户端基础示例代码Spring Boot服务端maven引入依赖直接copy源码Spring Boot 客户端maven引入依赖创建一个类,继承WebSocketClient添加一个带参构造重写下面四个方法直接copy源码再自定义一个类,创建一个static静态方法返回一个WebSocketClient对象直接copy.原创 2020-12-05 09:51:40 · 5935 阅读 · 61 评论 -
Java -- fastjson -- 序列化与反序列化
maven引入fastjson包<!--fastJson依赖引入--><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.33</version></dependency>示例代码:public static void main(.原创 2020-12-04 16:04:49 · 2744 阅读 · 0 评论 -
Java -- 使用Base64加密解密字符串及文件
代码中有详细注释,建议粘贴到IDE上运行查看。主函数:用来测试public class Demo1 { public static void main(String[] args) throws Exception{ //使用Base64加密解密普通字符串 // 加密 String base64encodedString = Base64.getEncoder().encodeToString("百度搜索:程序员小哲".getBytes("utf-8.原创 2020-12-03 19:12:36 · 7156 阅读 · 5 评论 -
Java -- 根据时间戳 + 随机数生成不重复的文件名
代码中有详细注释,建议粘贴到IDE上运行查看。import java.text.SimpleDateFormat;import java.util.Date;/** * 根据时间戳 + 随机数生成不重复的文件名 */public class Demo1 { public static void main(String[] args) throws Exception{ // String方式 demo1(); .原创 2020-12-03 18:46:47 · 3799 阅读 · 2 评论 -
Spring AOP、IOC -- 全网最清晰讲解
Spring AOP、IOC -- 全网最清晰讲解1. AOP1.1 什么是AOP1.2 JoinPoint(切点)1.3 Advice(通知)1.4 AOP 有哪些实现方式?1.4.1 静态代理1.4.2 动态代理2. IOC(控制反转)2.1 DI(依赖注入)2.1.1构造函数方法注入:2.1.2setter方法注入:2.1.3接口注入:1. AOP1.1 什么是AOPAOP(面向切面编程) 是OOP( 面向对象编程)的一个延伸,是建立在面向对象基础上的。方便我们将一些非核心业务逻辑抽离,从而实原创 2020-12-02 20:10:56 · 3317 阅读 · 20 评论 -
Java集合总结大全--史上最强
Java集合总结大全List接口Set接口Map接口ArrayList、LinkedList和Vector的区别HashMap和HashTable的区别List、Set、Map三者的区别List接口有序、不唯一。ArrayListVector(线程安全)LinkedListSet接口无序、不可重复HashSetLinkedHashSetTreeSetMap接口不能包含重复的键、每个键最多只能映射到一个值Hashtable(线程安全)LinkedHashMap原创 2020-11-22 13:00:27 · 18765 阅读 · 51 评论 -
单例模式——懒汉式和饿汉式
实例化方面懒汉式:默认不会实例化,外部什么时候调用什么时候new。饿汉式:在类加载的时候就实例化,并且创建单例对象。线程安全方面饿汉式:初始化时间在线程创建之前,所以天生线程安全。懒汉式:天生线程不安全。可以使用同步锁来避免这种情况发生。执行效率方面饿汉式:没有加任何的锁,因此执行效率比较高。懒汉式:一般使用都会加同步锁,效率比饿汉式差。性能方面:饿汉式:在类加载的时候就初始化,不管你是否使用,它都实例化了,所以会占据空间,浪费内存。懒汉式:什么时候需要什么时候实例化,相原创 2020-11-16 11:35:50 · 1750 阅读 · 0 评论 -
如何对MySql数据库进行优化-- 个人总结
字段的设计数据类型尽量用数字型,数字型的比较比字符型的快很多。数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的。原创 2020-11-12 15:40:11 · 5667 阅读 · 12 评论 -
MySql常用SQL语句
MySql常用SQL语句增加数据删除数据修改数据查询数据模糊查询排序分组分页多表查询内连接左连接右连接自关联增加数据insert into 表名 values (值1,值2,值3);insert into 表名(值1,值2) values (值1,值2);删除数据delete from 表名 where 条件修改数据update 表名 set 字段1 = 字段值1, 字段2 = 字段值2 where 条件查询数据select * from 表名select 字段1 as 别名1 f原创 2020-11-11 14:54:46 · 10748 阅读 · 16 评论 -
Redis 缓存击穿、缓存穿透、缓存雪崩与缓存倾斜
缓存击穿在缓存中的热点数据,如果在到期的时候,大量的访问请求到数据库上,造成的数据库宕机解决办法:在访问缓存中没有的数据的时候,添加一个锁,只让少量的请求访问到数据库中,达到避免数据库宕机的问题。取消热点数据的生存时间。缓存穿透在查询条件时,redis中没有这条数据,数据库也没有这条数据,大量访问造成数据库和redis同时宕机。解决办法:获取客户端ip,限制客户端ip的访问根据id查数据时,如果id是自增的,在redis中存放最大的id,如果访问的id大于最大的id,直原创 2020-11-11 13:30:30 · 2300 阅读 · 5 评论 -
SSM - 零配置
Gitee:示例源码点我下载零配置原理:零配置就是将原本的每个xml配置文件写成了对应的配置类通过编写一个类继承AbstractAnnotationConfigDispatcherServletInitializer来在项目启动的时候进行加载这些配置类。准备工作db.properties输入数据库四大参数信息spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql原创 2020-11-10 12:40:24 · 2275 阅读 · 2 评论 -
Java 多线程 -- 从入门到精通
Java 多线程 -- 从入门到精通Java线程与线程的区别多线程的实现方法Thread中start和run方法的区别Thread和Runnable的关系使用Callable和Future创建线程线程返回值的处理方法线程的六个状态线程不安全解决线程不安全(synchronized)sleep和wait的区别Java线程与线程的区别线程是CPU调度的最小单位,进程是资源分配的最小单位。多线程的实现方法继承Thread类,重写run方法实现Runnable接口,重写run方法通过Callable和原创 2020-11-04 20:48:26 · 6457 阅读 · 26 评论 -
nginx学习 -- 从入门到精通
Nginx基本用法开启nginx:sudo service nginx start重启nginx:sudo service nginx reload关闭nginx:nginx -s stopNginx的主配置文件我们一般把nginx.conf放在/etc/nginx/nginx.confuser nginx;# worker_processes的数值越大,Nginx的并发能力就越强worker_processes 1;# error_log代表Nginx错误日志存放的位置e原创 2020-11-03 14:22:43 · 12136 阅读 · 22 评论 -
数据库事务隔离级别 与 脏读、不可重复读、幻读
事务的四大特征原子性 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。一致性 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。隔离性 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。持久性 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提原创 2020-11-03 13:14:03 · 3244 阅读 · 16 评论 -
Java - servlet (SSM、Spring Boot通用) 显示图片
SSM + Vue + Element UI 图片上传 服务器:点我查看导入所需的jar包<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope>&原创 2020-11-02 13:22:40 · 2001 阅读 · 6 评论 -
Java -- Spring Boot -- 爬虫从入门到精通 -- 爬取某二手房全部房屋信息 -- 项目实战(爬取两万+房屋出售信息)
Spring Boot 爬虫从入门到精通导入HttpClient需要的jar包导入Jsoup需要的jar包一、HttpClient 入门二、正则表达式实例三、Jsoup:Java的HTML解析器Gitee源码下载导入HttpClient需要的jar包<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId&g原创 2020-11-02 00:32:22 · 3492 阅读 · 28 评论 -
SSM + Vue + Element UI 图片上传 服务器
SSM 准备工作一、准备文件上传的jar包<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version></dependency><dependency> <groupId>commons-fileupload&原创 2020-11-02 12:48:48 · 3547 阅读 · 9 评论 -
tomcat目录及结构
目录内容bin主要是用来存放tomcat的命令conf主要是用来存放tomcat的一些配置文件lib主要用来存放tomcat运行需要加载的jar包logs存放tomcat在运行过程中产生的日志文件temp存放tomcat在运行过程中产生的临时文件webapps用来存放应用程序work用来存放tomcat在运行时的编译后文件binbin目录主要是用来存放tomcat的命令主要有两大类:一类是以.sh结尾的(linux命令)另一...原创 2020-10-27 15:41:58 · 1661 阅读 · 3 评论 -
Mybatis示例
Mybatis配置文件mybatis.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <environments defa原创 2020-10-24 13:51:34 · 1605 阅读 · 5 评论 -
为什么要使用工作流?
之前使用的工作流在数据库中使用特殊标识符,但是一旦发生职位变更,之前的程序就无法使用。例如:原本的系统为这样1、员工申请。2、经理审核。3、总经理审核。4、董事长审核。但是突然之间公司打算裁员,裁掉所有总经理,所以将会导致原有系统无法使用。工作流的优点工作流可以在业务流程更变之后,程序代码不需要改动,依然实现原本功能。...原创 2020-10-21 17:14:30 · 2583 阅读 · 3 评论 -
java -- Spring 入门讲解
spring核心思想分三大类:控制反转(IOC)、依赖注入(DI)、面向切面(AOP)。依赖注入是实现方式,控制反转是思想对象的创建和对象的注入都由spring自动完成spring.xmlspring配置有三种方式(假设我有两个类,id为car和id为en)一、在主配置文件中声明,启用annotation注入<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframe.原创 2020-10-15 19:26:47 · 2144 阅读 · 1 评论 -
Java - DOM4J对xml文件的解析 (RSS新闻网站实战项目)
代码中有详细注释,可供初学者阅读Gitee:RSS新闻网站实战项目点我下载action/DemoActionpackage com.zhuoyue.action;import com.zhuoyue.po.Item;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;import javax.servlet.ServletException;import javax.servl.原创 2020-10-15 13:47:26 · 2127 阅读 · 6 评论 -
Java 反射 -- 实例对象的表示
Foo的实例对象如何表示Foo foo1 = new Foo();.第一种表示方式实际在告诉我们任何一个类都有一个隐含的静态成员变量classClass c1 = Foo.class;第二种表达方式已经知道该类的对象通过getClass方法Class c2 = foo1.getClass();第三种表达方式Class c3 = Class.forName(“com.imooc.reflect.Foo”);//需要抛异常c1 c2 c3 均可Foo foo = (Foo)c原创 2020-09-26 13:43:35 · 3710 阅读 · 4 评论 -
Java -- Filter 监听器 统一设置编码Demo
package filter;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import java.io.IOException;@WebFilter(filterName = "DemoFilter")public class DemoFilter implements Filter { /* 过滤方法 * 主要是对request和response进行一些处理,然后交给下一个过滤器或Se原创 2020-09-21 12:42:27 · 3703 阅读 · 6 评论 -
三行代码带你手动编写一个简单的Tomcat
对于一次http的请求过程,无非是客户端跟服务端建立一个TCP连接,然后跟服务端发起一次GET/POST请求,服务端再返回对应的数据。这里我们开启8888端口,大家请看示例代码:package com.zhuoyue.demo;import java.net.ServerSocket;import java.net.Socket;import java.io.OutputStream;public class Tomcatt { public static void main(Strin.原创 2020-09-19 12:15:05 · 3069 阅读 · 14 评论 -
java web 手写 Mybatis 底层框架
源码下载:点我java web 手写 Mybatis 底层框架四步走:创建三个准备文件,一个测试文件,即可大功告成。费话不多说直接上代码,代码中有详细注释。一、在包com.zhuoyue.db下创建名为DBManager.java的文件package com.zhuoyue.db;import java.io.InputStream;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.R原创 2020-09-19 09:56:39 · 3618 阅读 · 4 评论 -
Java web 常用方法/类 ---- 第二天
继:Java web 常用方法/类 ---- 第一天Java web 常用方法/类 ---- 第二天6.编码设置:setCharacterEncoding7.接收post和get请求:service8.获取访问服务器用户的信息6.编码设置:setCharacterEncoding//java@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletEx原创 2020-09-19 08:37:57 · 3604 阅读 · 3 评论 -
Java web 常用方法/类 ---- 第一天
servlet层相关方法1.获取除了多选框之外的普通控件的值(单个值):getParameter2.多选框的值如何进行获取(多个值):getParameterValues3.客户端提示:PrintWriter 注:不能直接new PrintWriter对象4.重定向:sendRedirect5.请求转发及设置前端可以访问的值:setAttribute1.获取除了多选框之外的普通控件的值(单个值):getParameter//javaString id=request.getParameter("id"原创 2020-09-18 14:03:17 · 4621 阅读 · 2 评论 -
limit--分页查询公式--获取总页码公式--编程小常识
String sql=“select *from dept limit ?,?”;命名名称提示pagesize //页面数据个数count //数据总数pagenow //当前页码分页查询公式( 当前页码 - 1 ) * 页面数据个数public static int getStart(int pagenow,int pagesize){ return (pagenow-1)*pagesize;}获取总页码公式( 数据总数 - 1 ) / 页面数据个数 + 1.原创 2020-09-18 13:01:38 · 4382 阅读 · 0 评论 -
Java static 难点笔记 -- JDBC获取四大参数
static可以修饰的对象方法成员变量代码块独立于类在类的加载的时候执行,并且只执行一次修饰的方法只在调用的时候执行下方例子为:在类的加载的时候执行,并且只执行一次在该类加载的时候执行static 给数据库连接四大参数赋值(从文件db.properties中获取)DBManager.javapublic class DBManager { private static String driver=""; private static String url=""; priv原创 2020-09-17 13:20:41 · 3630 阅读 · 1 评论 -
Java web 实现数据库简单登录功能-----快速入门Java web
Java web 实现简单登录功能-----快速入门Java web第一步:编写Servlet(收发参数)第二步:编写Dao层代码第三步:编写dao层需要的工具类DBUtil服务器最后进行xml项目配置前端界面编写第一步:编写Servlet(收发参数)package com.zhuoyue.action;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.s原创 2020-09-16 13:39:16 · 7326 阅读 · 9 评论 -
序列化与反序列化
Java序列化:就是指把Java对象转换为字节序列的过程(如对象–>Json)Java反序列化:就是指把字节序列恢复为Java对象的过程。(如Json–>对象)原创 2020-07-08 14:11:21 · 4947 阅读 · 4 评论 -
TreeSet——每天一个Java小常识
TreeSet集合特点元素有序, 这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法:TreeSet():根据其元素的自然排序进行排序TreeSet(Comparator comparator) :根据指定的比较器进行排序没有带索引的方法, 所以不能使用普通for循环遍历于是Set集合, 所以不包含复元素的集合TreeSet代码实例一...原创 2020-05-07 15:45:08 · 2123 阅读 · 1 评论 -
LinkedHashSet——每天一个Java小常识
LinkedHashSet集合特点哈希表和链表实现的Set接口, 具有可预测的迭代次序由链表保证元素有序,也就是说元素的存储和取出顺序是一致的由哈希表保证元素唯一, 也就是说没有重复的元素与HashSet一样都不能使用普通for循环LinkedHashSet代码实例import java.util.*;public class Dmeo { public static voi...原创 2020-05-07 14:53:24 · 5875 阅读 · 0 评论 -
HashSet学习笔记——每天一个Java小常识
在学习HashSet之前我们很有必要了解一下哈希值HashSet学习笔记哈希值对象的哈希值特点HashSet集合概述和特点重写hashcode()和equals()重写两个方法代码实例hashSet集合元素添加过程哈希值哈希值: 根据对象的地址或者字符串或者数字算出来的int类型的数值Object类中有一个方法可以获取对象的哈希值方法名说明public int h...原创 2020-05-07 10:17:44 · 6875 阅读 · 0 评论 -
Set学习笔记——每天一个Java小常识
Set集合概述和特点(接口)不包含重复元素的集合没有带索引的方法, 所以不能使用普通for循环遍历,只能使用iterator迭代器或foreach遍历。方法名说明boolean add(E e)如果指定的元素不存在,则将其指定的元素添加void clear()从此集合中删除所有元素int hashCode()返回此集合的哈希码值。int size(...原创 2020-05-07 08:41:07 · 2766 阅读 · 2 评论 -
LinkedList集合常用方法——每天一个Java小常识
ArrayList集合常用方法:底层数据结构是数组,查询快,增删慢(快速查看)LinkedList集合常用方法:底层数据结构是链表,查询慢,增删快(本文)LinkedList集合特有功能方法名说明public void addFirst(E e)在该列表开头插入指定的元素public void addLast(E e)将指定的元素追加到此列表的末尾publ...原创 2020-05-07 07:53:58 · 2581 阅读 · 0 评论