自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 Stream流式处理常见使用

java 8新特性 stream流式处理,提高代码整洁性

2022-01-18 15:02:28 5982

原创 简单实现一个布隆过滤器

Bloom_filter1.项目描述:​ 实现一个简单的布隆过滤器2.布隆过滤器简介:布隆过滤器是一个非常神奇的数据结构,通过它我们可以非常方便地判断一个给定数据是否存在于海量数据中3.特点:有一定误差,如果判定在,小概率可能不在;如果判定不在,那么一定不在;4.常见使用场景:网页黑名单系统垃圾邮件过滤系统爬虫的网址判重系统解决redis缓存穿透问题5.布隆过滤器的判断流程:当一个元素加入布隆过滤器中的时候,会进行如下操作:使用布隆过滤器中的哈希函数对元素值进行计算,

2021-04-20 19:25:43 341

原创 脏读、丢失修改、不可重复读、幻读

导语:最近在准备春招,所以有计划的复习一些数据库相关的知识,小小的整理了一下分享出来。脏读(Dirty read):当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。丢失修改(Lost to modify):指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修...

2021-03-27 10:26:59 3634

原创 数据库事务的特性与事务的隔离级别

导语:最近在准备春招,所以有计划的复习一些数据库相关的知识,小小的整理了一下分享出来。事务的四大特性(ACID):原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的; 持久性(Durability): 一个.

2021-03-27 10:20:15 89

原创 MySQL 的基本存储结构

导语:最近在准备春招,所以有计划的复习一些数据库相关的知识,小小的整理了一下分享出来。MySQL的基本存储结构是页(记录都存在页里边):多个数据页可以组成一个双向链表 每个数据页中的记录又可以组成一个单向链表 每个数据页都会为存储在它里边儿的记录生成一个页目录 在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录 以其他列(非主键)作为搜索条件:只能从最小记录开始依次遍历单链表中的每条记录。...

2021-03-27 10:11:09 1061

原创 MylSAM和InnoDB的区别

导语:最近在准备春招,所以有计划的复习一些数据库相关的知识,小小的整理了一下分享出来。两者的对比:是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。 是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务(comm..

2021-03-27 10:07:19 271 1

原创 简单仿写Spring AOP

导语:由于本人是某大学网络中心java组组长,在和学弟学妹们传授完spring的相关知识之后,看到一脸茫然的他们,仿佛看到自己大一的时候,所以为了帮助学弟学妹更好的了解IOC以及 AOP 两大原理,并且帮助自己更加深层次的学习spring,决定自己简单的仿写这两个功能。这篇是AOP,上一篇是IOC。源码已在github开源:Github地址百度云 提取码:zanx1.前序由于上次仿写Spring IOC之后,帮学弟学妹讲了一下,收获赞许,说这样一下就好理解多了,于是乎Spring仿写第二弹来了,.

2021-03-27 00:06:33 200

原创 简单仿写Spring IOC

导语:由于本人是某大学网络中心java组组长,在和学弟学妹们传授完spring的相关知识之后,看到一脸茫然的他们,仿佛看到自己大一的时候,所以为了帮助学弟学妹更好的了解IOC以及 AOP 两大原理,并且帮助自己更加深层次的学习spring,决定自己简单的仿写这两个功能。这篇是IOC,下一篇是AOP。源码已在github开源:Github地址一 :实现简单的IOC回顾做过的项目,记得spring一个比较基础并且重要的功能就是读取xml文件,并且将的得到数据装配成bean,并且方法IOC容器当中储存.

2021-03-27 00:05:41 132

原创 云服务器购买与使用(学生优惠)

导语:最近刚刚续费了学生版的阿里云服务器,就这这个机会,简单介绍一下如何购买与使用阿里云的弹性ECS服务器1.购买:1)没有阿里云账号的可以先申请一个,或者用支付宝扫码登录也行。2)登录之后先完成实名认证和学生认证(这两步是必须的)3)接下来就可以购买学生专享优惠ECS服务器了,注意选择第二个选购注意事项:我们最好选择购买一年,这样即便宜,下次续费也能续费一年 地域的话选离你最近的 注意镜像类型选系统镜像,一般我们选CenterOS 也就是linux系统,因为去公...

2021-03-27 00:05:13 622 1

原创 Java异常分类

导语:最近在准备春招,所以有计划的在复习java基础知识,整理了一些笔记分享出来。1.异常的层次机构:所有异常的父类是Throwable,它有两个子类,分别是Error和Exception。2.Error:表示系统错误,通常不能处理和恢复。比如StackOverFlowError或者OutOfMemoryError,出了问题只能结束程序。3.Exception :表示程序可以处理的异常。Exception又分为Checed Exception(被检查异常)和Runtime Excep

2021-03-27 00:04:50 2059

原创 Java快速排序(图文+注释代码)

导语: 最近在准备春招,所以有计划的在复习java相关的知识,整理了一些笔记分享出来。1)算法思路:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。2)快速排序使用分治法来把一个串(list)分为两个子串(sub-lists):从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在.

2021-03-27 00:04:21 201

原创 Java类的初始化顺序

导语:Q:最近我的一个java老师问我你java学的咋样?A: 我说还行吧。Q:老师说那我出道题你做做,考考你?A:我说行(于是乎...就有了这篇文章,题目在最后,有兴趣的话可以做做)Java类的初始化顺序1.先从上向下初始化静态数据(静态初始化块、静态初始化语句 )2.遇到 new从上向下执行初始化非静态数据(非静态成员的初始化),最后执行对应的这个new的构造函数3.下面还有静态初始化的接着初始化,直到所有静态的都初始化完,类加载完4.执行main方法,有new...

2021-03-26 11:02:35 158

原创 Static关键字用法与注意事项

导语:最近在准备春招,所以有计划的在复习java基础知识,整理了一些笔记分享出来1.有什么作用:在不创建对象的情况下调用方法或使用属性,以及提升程序性能。2.static可以修饰 变量、方法、代码块、内部类:修饰的 变量 叫做静态变量,可以通过类名直接调用。静态变量是被该类的所有对象共享,在内存中只有一个副本,在类加载时初始化。 修饰的 方法 叫做静态方法,可以通过类名直接调用,比如工具类中大部分方法都是通过类名调用的; 修饰的 代码块 也叫静态代码块,静态代码块内的语句只会在类加载时执行

2021-03-26 10:44:39 234

原创 Java的值传递(面试常客)

导语:最近的多次面试中,面试官问到Java是值传递还是引用传递?这种问题中小公司几乎必面,这里简单记录一下。值传递:传递的参数是值得拷贝。即使在函数中被改动也只是改动的副本。引用传递:传递的参数是参数的地址,类似C++中的指针,指向参数对应的内存地址。在方法中改动对应地址中的值会影响到任何指向该地址区域的变量。Java中是值传递,无论是基本数据类型还是对象。如果方法传递的参数是基本类型:传递的是基本类型变量的拷贝(就是一个数值) 如果方法传递的参数是引用类型:传递的是引用类型变量在堆中地址值的

2021-03-26 10:41:17 152

原创 【Java面试题】一个类实现了多个接口中的重名默认方法,调用时会使用哪个?

导语:最近的一次面试中,面试官问到一个类实现了多个接口中的重名默认方法,调用时会使用哪个?这种问题之前我还真没特别关注,这里简单记录一下。首先判断本类是否重写了默认方法,如果重写了,就直接调用本类的方法。如果本类没重写,那么判断其父类是否重写了,本类和父类中方法优先级最高。 如果以上无法判断,那么子接口的优先级更高。例如类C继承了接口B,接口B继承了接口A,在接口A和B中都实现了一个重名默认方法,那么,B的优先级更高。 如果继承的多个接口是同级的,比如接口A和接口B没有关系,那么就得在本类中显示声明

2021-03-26 10:29:00 598

原创 【Java面试题】抽象类与接口的区别与联系

导语:最近的一次面试中,面试官问到如何理解抽象类与接口的区别与联系?这种问题千人千语,这里简单记录一下我的看法。面对对象的设计中,复用的重点是抽象层的复用,抽象类和接口都是抽象层的体现。相同点:比如说都不能被实例化,都可以包含方法声明。不同点:最大的不同点,就是抽象类中能提供某些方法的实现,而JDK8之前,接口不能提供方法的实现。如果向一个抽象类中添加一个具体实现的方法,那么它所有子类都具有了这个方法,而接口做不到这一点。 抽象类需要使用extents关键字继承,但由于Java的单继承特性,

2021-03-26 10:24:50 221

原创 Java的三大特性

导语:最近在准备春招,所以有计划的在复习java基础知识,整理了一些笔记分享出来1.三大特性:封装:把对象中的属性私有化,不允许外部直接访问对象内部的属性。但可以提供被外部访问的方法 继承:是在已有类的基础上建立新类的特性;继承使得使得代码复用非常容易。新的类可以调用父类的属性、方法,也可以有自己的属性、方法。 多态:一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须由程序运行期间才能决定,这就是多态性2.三大特性各自的优点:1)封装优点:.

2021-03-26 10:18:12 1148

原创 【Java面试题】怎么理解面向对象编程

导语:最近的一次面试中,面试官问到如何理解java面向对象编程?这种问题千人千语,这里简单记录一下我的看法面向过程:就是遇到一个问题时,将解决问题的方法拆分成一个个函数和数据,然后按一定的顺序执行完。这是一个具体的、流程化的过程。比如洗衣服的流程,先加洗衣粉、再加水、再把衣服扔进洗衣机、洗衣机洗衣、再烘干。 面向对象:就是将解决问题的方法模型化、抽象化成对象。然后给这些对象赋予属性和方法,并让对象来执行这些操作。对于洗衣服的例子,就可以抽象出人和洗衣机两个对象,操作步骤就是人.放洗衣粉()、人.加水(

2021-03-26 10:04:25 301

原创 Java代理(浅析)

导语:最近在准备春招,所以有计划的在复习java基础知识,整理了一些笔记分享出来,这篇是关于代理,上一篇是关于反射。Java反射(浅析)1.代理的作用:在不改变原代码的情况下实现增强代码(例如为公司项目的每一个方法前后添加打印日志功能并且不修改源代码)2.静态代理:还以现行打印日志功能为例:我们需要为项目的每一个类编写一个对应的代理类,并且二者实现同一个接口(假设都有)代理对象干的事:通过构造器塞入一个目标对象,然后在代理对象的方法内部调用目标对象同名方法,并在调用前后打印日志。

2021-03-26 09:55:12 176

原创 Java反射(浅析)

导语:最近在准备春招,所以有计划的在复习java基础知识,整理了一些笔记分享出来,这篇是关于反射,下一篇是关于代理。1.什么叫反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类信息以及动态调用对象内容就称为java语言的反射机制2.获取class对象的三种方式:类名.class 对象名.forClass() Class.forName("类的全限定名")3. 反射机制有什么优缺点?

2021-03-26 09:46:35 153

原创 Spring一些常用注解

导语:最近在做项目的时候,遇到了很多作用类似的注解,但是又不知道准确的区别,于是整理了一些Spring注解,方便以后回顾。(持续更新...)Spring Bean相关1. @Controller、@Service、@Repository、@Component作用: 把类标识成可用于 @Autowired注解自动装配的 bean 的类。@Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。 @Service: 对应服

2021-03-26 09:36:38 220

原创 incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>>

导语:今天在做算法题的时候碰到一个问题 error: incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>> return res;查找相关资料发现是泛型的一个坑,先看一些小例子(众所周知,只要类型兼容,就可以将一种类型的对象分配给另一种类型的对象。)//例如,你可以指定一个Integer到一个Ob

2021-03-25 23:55:18 4685

原创 leetcode 1. 两数之和

导语:最近字节一面的一道算法题是三数之和,于是想到了两数之和、四数之和等一些列题目,所以这里记录一下解这一类题的一个思路,当然先从最简单的两数之和开始啦!题目:方法一:(当然是懒人必备的暴力法啦,时间复杂度O(N²)、空间复杂度O(1))只需要两层循环,依次遍历就可以啦int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++){ for (int j = i +

2021-03-25 22:40:18 122

原创 慢sql优化总结

导语:前一段时间做的一个某干部考核系统,本身系统方面没什么技术难题,主要难点在于项目的业务逻辑比较复杂,所以就设计到了各种查询,在实际使用场景中还是碰到了慢sql问题,前前后后总结了一些,并且结合上一篇sql语句执行顺序问题,食用更佳!SQL语句执行顺序总结个人认为导致SQL语句慢大致可以分为两类:1.查询所需的数据过大:(也就是查询的数据量确实过大) 根据具体情况决定将sql写成一个复杂查询,还是多个简单查询(在Java程序合并结果集) 分解关联查询(分为单表查询,将结果集在J

2021-03-25 22:06:34 165

原创 sql语句的执行顺序问题

导语:大三期间选修的数据库课程带我入了sql语句的门,但是实际应用场景中,发现有时候得到的结果,或者查询所花费的时间都不能达到预期效果,于是稍微研究了一下sql语句的执行顺序问题,感觉对于sql语句的书写更加有帮助了,下面是我总结的一点东西,但是可能不全面。select () from () where () order by ();...

2021-03-25 18:15:59 209

原创 leetcode 567. 字符串的排列(java版滑动窗口法)

本题解思想源于labuladond算法框架 public boolean checkInclusion(String s1, String s2) { HashMap <Character,Integer> window = new HashMap<Character,Integer>(); HashMap <Character,Integer> need = new HashMap<Character,Integer

2021-03-24 16:03:57 118

原创 final关键字

final关键字修饰常量,常量名大写,不可修改 final关键字修饰方法,不能被重写 final关键字修饰类,不能被继承

2021-03-23 22:32:37 175

原创 枚举类型(enum)

用来定义一组指定域的常量值(星期一,星期二,……),每一个常量值都是public static final默认修饰,在类加载时,通过静态代码块来修饰 方便编译器自动检测要比较的值是否在指定域中(因为enum常量自带类型信息) enum是引用类型,java引用类型的数据要用equals比较,但是enum可以用==,因为enum中的每一个常量在 jvm中只有唯一的实例(天然的单例) meun底层就是final class Xxx extends Enum { … },不能被继承,不能new,只能类当中定义

2021-03-23 22:31:37 650

原创 String/StringBuffer/StringBuilder

String引用类型,本身也是一个class,底层是字符数组char [] ,比较新的jdk版本底层是byte[] 字符串的不变性,因为底层是private final char[] ,以及没有任何修改字符数组char[]的方法 比较两个字符串的内容用equals,不能用== 字符串操作不改变原字符串内容,而是返回新字符串 Java使用Unicode编码表示String和charString/StringBuffer/StringBuilder它们之间的区别?为什么要引入其它两种.

2021-03-23 22:29:41 333

原创 leetcode 206.反转链表(Java版迭代法)

双指针迭代法:我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。第二个指针 cur 指向 head,然后不断遍历 cur。每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。tips:多一个中间变量t来暂时存储cur的下一个变量class Solution { public ListNode reverseList(ListNode head

2021-03-23 22:08:16 64

原创 leetcode 76. 最小覆盖子串(java版滑动窗口)

本题解思路参考labuladong的算法题解class Solution { public String minWindow(String s, String t) { //window 和 need为两个计数器 HashMap <Character,Integer> window = new HashMap<Character,Integer>(); HashMap <Character,Integer> n

2021-03-23 21:33:05 139

原创 Lambda表达式与函数式接口

Lambda表达式(1) 为什么用lambda表达式 : 受java面向对象影响,我们做什么都需要一个对象,但是当我们仅仅需要某个接口中的某个方法时,也要先通过一个类来实现这个接口,再实例化一个对象来调用这个方法。为了简化,我们通过匿名内部类来实现接口,然后还必须重写方法,这些都是重复在做的。而我们仅仅想要传入参数,按照自定义方法体执行而已,所以有了Lambda表达式,仅仅关注入参与方法内容,其他一律不管。(2)格式: () -> {}前面小括号()放的是入参,可以没有,可以有多个,.

2021-03-11 22:46:21 474

原创 线程sleep与synchronized解锁,sleep写在synchronized外面与里面的区别。

结论:当sleep写在synchronized里面的时候,当前线程会休眠,让出cpu,但是synchronized不会解锁,synchronized锁定的方法或者代码块不会往下执行,临界资源别的线程不能用。 结论:当sleep写在synchronized外面的时候,当前线程会休眠,让出cpu,写在外面就和锁没关系了,临界资源别的线程也就可以用了,只不过是让当前线程休息一会罢了。 结论出场景:来自于java实验课的一个多线程售票实验(花了一下午才明白其中的奥秘) 题目要求: ...

2020-12-16 15:57:44 1488

原创 redis单线程模型

1.解释:redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。2.文件事件处理器的结构包含 4 个部分:多个 socket IO 多路复用程序 文件事件分派器 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器3.模型4.上图运作解释:多个 socket 可能会并发.

2020-12-09 14:16:55 418

原创 数据库实验24题(HBU)

1.表结构24道题目:1.查询信息系(IS)的所有学生信息2.查询选修了“数学”课的所有学生名单3.查询至少选修了一门其直接先行课为5号课程的学生的姓名。4.查询全体学生的姓名和出生年份。5.查询所有姓王的学生。6.查询选修了3号课程的学生姓名及成绩,并按成绩降序排序。7.查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。8.计算2号课程的平均成绩。9.查询选修了2号课程的学生的最高成绩。10.求各个课程号及相应的选课人数。1

2020-11-15 20:40:22 5721 2

原创 xml增删改查实验,dom4j实现(附源码)

1. 编码工具:eclipse; 项目类型:普通java项目;源码下载2.导入dmo4j的jar包,如果项目中没有lib文件夹,自己创建一个,然后把jar粘贴进去。3.项目结构4.主要代码(Dom4jUtil.java)package CarManagement;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOEx

2020-11-15 20:25:42 454

原创 重写了equals为什么还要重写hashcode?

理解:当我们重写了equals方法,认为两个内容上相等的东西是同一个东西,如果不重写,hashcode根据这两对象物理地址来生成hash值,理论上是不同的,所以存入hashmap不同位置,这与我们认为他们内容相同需要存入hashmap相同位置相悖,所以重写hashcode,会让内容上相同但物理地址不同的两个对象生成一样的hash值,进而达到我们的目的。不重写equals与hashcode有关,重写两者,equals与hashcode就无关...

2020-07-23 10:46:55 224

原创 还不知道equals与==的区别?看这篇就够了

一丶equals与重写equals方法1.重点:提供equals方法的目的是为了比较内容的但是有一点:原始的equals方法 是 所有类的父类object的一个方法,java语言设计者并不知道你定义的类的内容是什么,所有默认object的equals方法是比较地址的。你想比较自己定义的两个类的内容是否相等,就得重写equals方法,让他比较内容。Java的一些类库中都重写了equals方法,String、Integer、Date总结:equals方法比较两个引用类型:默认比较地.

2020-07-23 10:45:46 362

原创 解决没有.ssh文件

如果没有.ssh公钥文件,左面右击打开git bash命令框输入ssh-keygen,然后一直回车就行了

2020-07-22 16:13:45 4423

原创 git基础命令(解决90%操作)

git基础命令 命令 解释 备注 git clone 仓库路径 把远程仓库下载到本地 git pull 把远程仓库代码拉取到本地,以保持最新代码 git status 查看工作区代码修改状态 git add . 提交所有更改到暂存区 git commit -m "备注" ...

2020-07-22 16:08:50 207

空空如也

空空如也

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

TA关注的人

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