![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
文章平均质量分 68
Mr_tianyanxiaobai
这个作者很懒,什么都没留下…
展开
-
手写 LRU 算法
定义缓存的本质是以空间换时间,那么缓存的容量大小肯定是有限的,当缓存被占满时,缓存中的那些数据应该被清理出去,那些数据应该被保留呢?这就需要缓存的淘汰策略来决定。事实上,常用的缓存的淘汰策略有三种:先进先出算法(First in First out FIFO);淘汰一定时期内被访问次数最少的页面(Least Frequently Used LFU);淘汰最长时间未被使用的页面(Least Recently Used LRU)这些算法在不同层次的缓存上执行时具有不同的效率,需要结合具体的场景来选择。F原创 2021-09-21 20:52:57 · 320 阅读 · 0 评论 -
MySQL 高级(4): 相关工具的使用与主从复制
相关工具慢查询概念MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。开启慢查询默认情况下,MySQL 数据库没有开启慢查询日志,需要我们手动来设置这个参数。当然,如果不是调优需要的话,一般不建议启动该参数, 因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。开启设置如下:QL语句描述备注原创 2021-08-25 20:17:03 · 187 阅读 · 0 评论 -
MySQL 高级(3): 索引优化(关联,排序,分组,案例)
准备【优化总结口诀】全值匹配要记牢,最左前缀不能忘;带头大哥不能死,中间兄弟不能断;索引列上少计算,范围之后全失效;Like百分写最右,覆盖索引不写星;不等空值还有or,索引失效要少用;引号不可丢,丢了就失效。在讲解之前,先创建两个表:CREATE TABLE IF NOT EXISTS `class` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NULL, PR原创 2021-08-25 16:26:50 · 418 阅读 · 0 评论 -
MySQL 高级(2): 索引的概念,分类,性能分析,索引失效
索引优化分析索引的概念MySQL 官方对索引的定义为:索引(Index)是帮助MySQL 高效获取数据的数据结构。 可以得到索引的本质:索引是数据结构。可以简单理解为排好序的快速查找数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。 下图就是一种可能的索引方式示例:左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址。为了加快 Col2 的查找,可以维护一个右边原创 2021-08-23 22:08:28 · 223 阅读 · 0 评论 -
MySQL 高级(1):权限管理,左联合,右联合
用户和权限管理用户管理命令描述备注create user zhang3 identified by ‘123123’;创建名称为zhang3 的用户,密码设为123123;select host,user,password,select_priv,insert_priv,drop_priv from mysql.user;查看用户和权限的相关信息set password =password(‘123456’)修改当前用户的密码update mysql.原创 2021-08-23 17:15:36 · 182 阅读 · 0 评论 -
SpringBoot 的入门学习(5): 数据库整合,mybatis整合,单元测试
数据库场景的自动配置分析与整合测试①:导入 JDBC 场景<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>②:接着导入数据库驱动包(MySQL为例)。<!--默认版本:--><mys原创 2021-08-21 10:45:47 · 214 阅读 · 0 评论 -
SpringBoot 的入门学习(4): 拦截器,文件上传,错误处理,原生组件注解,嵌入式容器定制化
一、 拦截器编写拦截器具体步骤如下:编写一个拦截器实现 HandlerInterceptor 接口拦截器注册到容器中(实现 WebMvcConfigurer 的addInterceptors())指定拦截规则(注意,如果是拦截所有,静态资源也会被拦截】具体代码如下:编写一个实现HandlerInterceptor接口的拦截器:@Slf4jpublic class LoginInterceptor implements HandlerInterceptor { /**原创 2021-08-20 17:06:02 · 420 阅读 · 1 评论 -
JUC 多线程并发目录
java 集合(1):Arraylist,Vector,Stack,HashMap,LinkedHashMapjava 集合(2):TreeMap,WeakHashMap,HashTable,ArrayDeque,PriorityQueuejava 集合(3):Set 集合java 集合(4):线程安全JUC 高并发编程(1):多线程的基础知识以及常用API,线程同步案例JUC 高并发编程(2):同步案例:synchronized,生产者与消费者,多线程的虚假唤醒..原创 2021-08-19 17:01:13 · 136 阅读 · 0 评论 -
JUC 高并发编程(13):LockSupport 概述, wait 与 sleep与park的区别
LockSupportLockSupport 是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,阻塞之后也有对应的唤醒方法。归根结底,LockSupport调用的Unsafe中的native代码通过park()和unpark(thread)方法来实现阻塞和唤醒线程的操作LockSupport类使用了一种名为 Permit(许可) 的概念来做到阻塞和唤醒线程的功能,每个线程都有一个许可(permit),permit只有两个值 1和零,默认是零注意上面的123方法,都有一个bl原创 2021-08-16 15:32:00 · 916 阅读 · 0 评论 -
JUC 高并发编程(12):AQS 与 三大工具类:CountDownLatch,CyclicBarrier,Semaphore,ReentrantLock,Mutex
AQS三大工具类CountDownLatchCyclicBarrierSemaphore原创 2021-08-16 11:38:00 · 195 阅读 · 0 评论 -
JUC 高并发编程(10):Fork/join 架构
Fork/join概述从JDK1.7开始,Java提供 Fork/Join框架 用于并行执行任务,它的思想就是将一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。这种思想和MapReduce很像(input --> split --> map --> reduce --> output)主要有两步:第一、任务切分;第二、结果合并它的模型大致是这样的:线程池中的每个线程都有自己的工作队列(PS:这一点和ThreadPoolExecut原创 2021-08-14 16:48:58 · 167 阅读 · 0 评论 -
JUC 高并发编程(8):JMM中的对象 与 偏向锁、Synchronize 的升级、轻量锁、重量锁、锁消除、锁消化等
一 、JMM中的对象对象在堆内存中的存储布局①. 对象内部结构分为: 对象头、实例数据、对齐填充(保证8个字节的倍数)。②. 对象头分为对象标记(markOop)和类元信息(klassOop), 类元信息存储的是指向该对象类元数据(klass)的首地址。1、对象头对象标记Mark Word①. 默认存储 : 哈希值(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳 等信息这些信息都是与对象自身定义无关的数据,所以 MarkWord 被设计成一个非固原创 2021-08-13 21:16:18 · 165 阅读 · 0 评论 -
java 集合(4):线程安全
VectorVector集合是对ArrayList集合线程安全的实现,它们两者在方法的实现上没有什么太大的区别,最大的区别就是,Vector在方法前面加上了synchronized 关键字,用于保证线程安全。具体可以查看:这里Vector存在的问题:1、它的 add() 和 get() 方法都能够获取当前 Vector 对象的对象锁,但是有可能会发生读读互斥。2、当 threadA 在1 下标处添加一个元素,threadB在2下标处修改一个元素时,同样有可能会发生互斥现象。Vector原创 2021-08-12 15:40:18 · 194 阅读 · 0 评论 -
java 集合(3):Set 集合
Set集合Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。实际上Set就是Collection只是行为略有不同(Set不允许包含重复元素)。Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。Set集合,继承自Collection。特征是插入无序,不可指定位置访问。Set集合的实现类可说是基于Map集合去写的。通过内部封装Map集合来实现的。比如H原创 2021-08-11 17:04:48 · 230 阅读 · 0 评论 -
java 集合(2):TreeMap,WeakHashMap,HashTable,ArrayDeque,PriorityQueue
八、 TreeMap(线程不安全)在前面我们通过HashMap中插入顺序无序引出了LinkedHashMap的使用,但是我们又可以发现,这两种存储方式在迭代时均不是按照数据的大小顺序进行遍历的,而当我们需要将数据按照大小顺序迭代时,就需要此时的TreeMap集合了。TreeMap是一个大小有序的key-value集合,底层结构是红黑树,不允许插入null值。TreeMap采用红黑树的插入和删除方法,通过比较key决定新元素的插入位置,也通过红黑树的有序性质进行删除。TreeMap需要通过 Comp原创 2021-08-10 16:37:41 · 263 阅读 · 0 评论 -
java 集合(1):Arraylist,Vector,Stack,HashMap,LinkedHashMap
概述从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。接口接口描述CollectionCollect原创 2021-08-10 14:36:55 · 226 阅读 · 0 评论 -
JSP 中的资源路径问题
web路径问题不以 / 开始的相对路径,找资源,当前资源路径为基准。经常出问题以 / 开始的相对路径找资源,以服务器的路径为标准: http://localhost:3306/crud: 因此需要加上项目名代码因此可以利用 jsp 的 pageContext 对象获取一个不变的路径前缀具体代码如下:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&原创 2021-08-03 10:19:38 · 241 阅读 · 0 评论 -
Maven概念及入门
概述Maven是Apache软件基金会组织维护的一款自动化构建工具。主要有两个作用:maven 工程对 jar 包的管理过程项目的一键构建构建概述构建( build),是面向过程的( 从开始到结尾的多个步骤 ),涉及到多个环节的协同工作。构建过程的几个主要环节:①清理:删除以前的编译结果,为重新做好准备。②编译:将 Java源程序编译为字节码文件。③测试:针对项目中的关键点进行,确保在迭代开发过程正性。④报告:在每一次测试后以标准的格式记录和展示结果。⑤打包:将一个含诸多文件的工原创 2021-07-24 17:40:06 · 291 阅读 · 0 评论 -
java 动态代理
动态代理动态代理在Java中有着广泛的应用,比如 Spring AOP、Hibernate 数据查询、测试框架的后端mock、RPC远程调用、Java注解对象获取、日志、用户鉴权、全局性异常处理、性能监控,甚至事务处理等。在了解动态代理之前,需要先来学习一下静态代理。。静态代理假设现在项目经理有一个需求:在项目现有所有类的方法前后打印日志。你如何在不修改已有代码的前提下,完成这个需求?我首先想到的是静态代理。具体做法是:为现有的每一个类都编写一个对应的代理类,并且让它实现和目标类相同的接口(假原创 2021-07-18 20:58:29 · 126 阅读 · 0 评论 -
IDEA 下载jar包
引入jar包坐标:seting->Project Structure…->Libraries->+For Maven->输入:cglib:cglib:3.2.2下载结束后可以使用,出现警告是因为jdk版本过高,使用8或一下即可。原创 2021-07-18 17:52:42 · 1111 阅读 · 0 评论 -
java 反射
文章目录先验知识概述Class 类反射的由来通过反射获取实例获得class对象通过反射来创建实例源码解析获取类实例 Class.forName("xxx")获取具体类的实例对象: Class.newInstance获取类信息的相关API例子:获得指定类的所有类信息运行时查看对象数据域的实际内容相关API先验知识类加载器是JVM执行类加载机制的前提。ClassLoader的作用:ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoade原创 2021-07-17 21:10:51 · 118 阅读 · 1 评论 -
ThreadLocal 的使用
ThreadLocal 的作用,它可以解决多线程的数据安全问题。ThreadLocal 它可以给当前线程关联一个数据(可以是普通变量,可以是对象,也可以是数组,集合)特点ThreadLocal 可以为当前线程关联一个数据。(它可以像Map 一 存取数据,key 为当前线程)每一个ThreadLocal 对象,只能为当前线程关联一个数据,如果 为当前线程关联多个数据,就需要使用多个ThreadLocal 对象实例。每个ThreadLocal 对象实例定义的时候,一般都是static 类型Thre原创 2021-07-01 16:20:22 · 95 阅读 · 0 评论 -
Page分页
图书分页分页模块的分析分页模型Page 的抽取(当前页数,总页数,总记录数,当前页数据,每页记录数)/*** Page 是分页的模型对象* @param <T> 是具体的模块的javaBean 类*/public class Page<T> {public static final Integer PAGE_SIZE = 4;// 当前页码private Integer pageNo;// 总页码private Integer pageTotal;// 当原创 2021-06-30 10:54:42 · 1648 阅读 · 0 评论 -
注解配置的servlet请求了一次,doget()执行了两次
提供一种可能性由于google浏览器存在大量插件,所以进行了两次提交。可以尝试使用IE看看,是不是就只提交了一次原创 2021-06-28 21:24:08 · 639 阅读 · 2 评论 -
删除按钮的js的 confirm 编写
<script type="text/javascript"> $(function () { // 给删除的a标签绑定单击事件,用于删除的确认提示操作 $("a.deletClass").click(function () { // 在事件的function函数中,有一个this对象。这个this对象,是当前正在响应事件的dom对象。 /** * confirm是确认提示框函数 * 参数是它的提示内容 * 它有两个按钮,一个确认,.原创 2021-06-28 17:44:01 · 415 阅读 · 0 评论 -
Javaweb post 中文乱码
检查JSP编码<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>(常见) 设置客户端的request的中文编码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");Tomcat默原创 2021-06-28 17:13:00 · 131 阅读 · 0 评论 -
防止重复提交(javaweb)
如果使用 req.getRequestDispatcher 直接转发,会造成表单的重复提交当用户提交完请求,浏览器会记录下最后一次请求的全部信息。当用户按下功能键F5,就会发起浏览器记录的最后一次请求转发只会使用一次请求重新向是两次请求,因此可使用重定向来解决表单重复提交的问题。在请求转发时,“\”表示项目名,但是在重定向是’'缺只是表示一个相对路径,因此需要加上 req.getContextPath()下面为添加图书的Servlet代码protected void add(HttpSer原创 2021-06-28 14:45:47 · 179 阅读 · 0 评论 -
req.getRequestDispatcher 路径问题
添加了 ‘/’ 符号时,表示当前项目下在JSP中,访问Servlet,其他JSP时不用使用 ‘/’ (当已经在head中指定了项目路径时)<%@ page contentType="text/html;charset=UTF-8" language="java" %><% String basePath = request.getScheme() + "://" + request.getServerName()原创 2021-06-28 12:09:49 · 1912 阅读 · 0 评论 -
MySQL数据库建表时用引号的问题
原创 2021-06-28 09:35:48 · 417 阅读 · 0 评论 -
利用阿里数据池访问数据库JDBC
创建连接3.1、导入需要的jar 包(数据库和连接池需要):druid-1.1.9.jarmysql-connector-java-5.1.7-bin.jar以下是测试需要:hamcrest-core-1.3.jarjunit-4.12.jar3.2、在src 源码目录下编写jdbc.properties 属性配置文件:username=rootpassword=rooturl=jdbc:mysql://localhost:3306/bookdriverClassName=com.m原创 2021-06-23 21:16:51 · 271 阅读 · 0 评论 -
JSP的四大域对象
四个域在使用的时候,优先顺序分别是,他们从小到大的范围的顺序。pageContext ====>>> request ====>>> session ====>>> application测试scope.jsp 页面<body><h1>scope.jsp 页面</h1><%// 往四个域中都分别保存了数据pageContext.setAttribute("key", "pageContext").原创 2021-06-23 20:59:49 · 138 阅读 · 1 评论 -
IDEA 2020.2 配置Tomcat操作说明
新建 java项目-右键添加项目-设置后的效果添加Tomcat配置主要分两步,第一步添加tomcat第二步添加给tomcat 添加域名如上图,可以看出出现了一个警告,也就是需要添加一个默认的artifict相当于对项目启动进行了配置...原创 2021-06-22 11:45:22 · 156 阅读 · 0 评论 -
Properties的一个练习,记录你使用该程序的次数
如题: 用于记录应用程序运用次数 如果次数到了,则无法继续使用,必须注册 思路: 程序结束,该计数器的值任然存在。下次程序开始,计数器加一存储 所以建立一个配置文件用于记录该软件的运行次数import java.io.File;import java.io.FileInputStream;import java.io.FileOutputS原创 2017-03-01 17:31:45 · 343 阅读 · 0 评论 -
Java基础.io流字节流.复制图片
复制一个文件 思路 1:用字节读取流对象与图片关联 2:与字节写入流创建图片文件,用于储存获取到的图片数据 3:通过循环读写,完成数据储存 4:关闭资源public class IO2copypic { public static void main(String[] args) { FileOutputStream fos=null; FileInputS原创 2017-03-01 17:36:58 · 407 阅读 · 0 评论 -
java基础.io流.打印流
打印流原创 2017-03-01 17:49:22 · 237 阅读 · 0 评论 -
Java基础.io流.列出某盘下的所有.java文件
如题原创 2017-03-01 20:29:02 · 373 阅读 · 0 评论 -
java基础.集合.其他对象.初识
runtime,date,calendar,math原创 2017-03-01 17:05:50 · 244 阅读 · 0 评论 -
java基础.集合.collection和arrys.初识
collection和arrylist的应用原创 2017-03-01 16:52:01 · 364 阅读 · 0 评论 -
通过hashmap判断一个字符串中各个字母出现的次数
map集合的一个小练习原创 2017-03-01 16:44:10 · 1068 阅读 · 0 评论 -
java基础笔记.集合.map.初识
map集合的实现以及两种遍历方法原创 2017-03-01 14:06:05 · 264 阅读 · 0 评论