
JAVA
文章平均质量分 60
java基础
狗头实习生
通俗易懂的语言讲解后端技术栈以及算法,精通拿来主义。(励志变成生产队的驴)
展开
-
java值传递&址传递
在main函数的内存中,存储了一个student的地址,在st函数的内存中存储了一个新的student,当运行到st方法时,会将新new出来的student赋值给s,这个时候,s已经指向了student,所以修改的是student地址中的数据。(通俗点理解,main函数是你家,你作为student,你要去st函数家串门,但是在st函数家来了另一个人小七替你充当了student,这个时候st下达了一条指令,将student家的电脑换掉,所以这时候小七是代替你的把家里电脑换掉)第一个例子中输出结果是10。原创 2022-09-27 19:00:00 · 3517 阅读 · 1 评论 -
缓存穿透、缓存击穿、缓存雪崩以及解决方法
redis是一种NoSql高速缓K-V存数据库,可以实现快速的访问。redis比较适用于存储Session信息、缓存、排行榜、消息队列、好友关系以及计数器等。原创 2022-07-27 08:46:09 · 880 阅读 · 0 评论 -
java求职篇——异常操作
java异常处理原创 2022-07-14 19:38:30 · 213 阅读 · 0 评论 -
java求职篇——单例模式
2.懒汉式3.使用普通类声明单例模式破坏单例的三种情况预防方法防止通过反射的方法去获取单例对象,在构造函数中添加一个判断。通过重写方法来预防序列化反序列化的方式获取单例对象。Unsafe目前无法预防注: 当我们使用枚举类去声明单例模式时,并不需要手动去防止序列化反序列化以及反射去破坏单例,枚举类会自动为我们来防止这些,但是Unsafe还是无法防止。在静态代码块中,代码是线程安全的,所以只要想办法吧代码放入静态代码块就可以避免很多麻烦的操作。这里将声明放入到内部类中,可以简化我们的操作原创 2022-07-11 09:39:04 · 174 阅读 · 0 评论 -
java求职篇——基础集合
扩容规则ArrayList调用无参构造函数时,数组大小为0。当传入参数时,则创建指定大小空间的数组当传入集合时,则会根据集合大小创建初始容量当容量不足时,数组会进行扩容,长度为之前的1.5倍。例如:[0,10,15,22,33,49...]当传入集合个数大于扩容规则时,会取较大值例如:当我们调用无参构造函数时,初始大小为0,但我们传入一个14个元素的数组时,容量并不会先扩大到10再扩大到15,而是会直接扩大到14,取较大值。fail-fast、fail-safe机制fail-fast指的是当数组遍历的时候,原创 2022-07-09 11:02:58 · 194 阅读 · 0 评论 -
java求职篇——基础数据结构
优化效率位运算比除法效率高,并且解决溢出问题面试面试题[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H2cIdOkt-1657110015976)(…/…/typore图片/image-20220706091837501.png)]在实际中,二分查找左右边界选取可能会不同,进而影响选择的答案通过判断是否交换过元素进行初步优化通过记录最后一次交换的位置,进一步优化2.选择排序每次选择最小值与当前值进行交换与冒泡相比:1.两者的时间复杂度都为O(n2)2.选择一般原创 2022-07-06 20:22:34 · 285 阅读 · 0 评论 -
集合还在只用list吗?不如看一下Map集合
1.Map集合Map集合是一种双列集合,每个元素包含两个数据Map集合的每个元素的格式:key=value(键值对元素)Map集合也被成为键值对集合特点Map集合的特点都是由键决定的Map集合的键是无序,不重复,无索引Map集合后面重复的键对应的值可以覆盖前面重复键的值Map集合的键值对都可以为nullMap集合实现类特点HashMap:元素按照键是无序,不重复,无索引的...原创 2022-05-19 10:23:26 · 183 阅读 · 0 评论 -
集合还在只用list吗?不如看一下Set集合
java面试题:throw 和 throws 的区别? (1)throw作用在方法内,表示抛出具体异常,由方法体内的语句处理; 一定抛出了异常;(2)throws作用在方法的声明上,表示抛出异常,由调用者来进行异常处理; 可能出现异常,不一定会发生异常;1.Set集合Set集合特点无序:存取顺序不一致不重复:可以去重无索引:没有索引,不能使用for循环遍历Set实现类HashSet:无序、不重复、无索引LinkedHashSet:有序、不重复、无索引TreeSet:排序、原创 2022-05-15 12:44:35 · 635 阅读 · 0 评论 -
五分钟实现java网络传输数据
1.什么是网络编程网络编程将数据通过规定好的协议进行包装,接收端按照规定好的协议进行解析,从而获取数据,达到通信的目的。2.如何实现网络编程?每台主机都有一个IP地址,我们只要知道IP地址便可以通过TCP或UDP协议去访问它...原创 2022-05-14 14:05:42 · 1766 阅读 · 0 评论 -
如何实现动态代理
1.动态代理和静态代理的区别静态代理:在编译之前就已经确定好代理对象,代理方法等等动态代理:在编译后才明确代理对象以及代理方法等等2.JDK代理原理使用JDK动态代理方法,我们需要代理类和被代理类同时继承同一个接口才能进行增强。3.CGlib代理原理JDK动态代理时,必须提供一个接口,但是在有些环境中,我们并不能提供一个接口,只能采用第三方的代理方法CGlib。它的优势是只要提供一个非抽象类,即可进行增强处理。4.JDK实现动态代理daopublic in...原创 2022-04-06 16:35:03 · 2960 阅读 · 1 评论 -
两分钟实现SpringBoot定时工作
我们在写项目时,难免会用到定时器,比如数据库同步、定式发送消息等等。那我们如何去实现定时器呢?先看一个例子每分钟触发一个,时间间隔是ms@Servicepublic class scheduled { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private Integer conunt1 =1;原创 2022-04-03 22:06:03 · 3159 阅读 · 0 评论 -
git的基础用法
1.初始化仓库 git init创建一个文件夹,右击打开git bash here,输入git init运行成功后会生成一个.git的隐藏目录2.基础指令linux:ll 查看当前目录文件touch text1.txt 创建文件1.git add 将工作区——>暂存区git add . 将所有文件添加到暂存区2.git commit 暂存区——>本地仓库例如git commit -m "zxcasd" ""内为备注信息3.git st...原创 2022-03-18 09:15:41 · 205 阅读 · 0 评论 -
快速入门JAVA数据结构-HashMap实现原理以及常用方法
hashMap是基于Map实现的,存储的是<key,value>键值对,切内部元素是无序的。实现原理:HashMap底层是由链表+数组实现的,采用数组查询效率比较高使用链表的原因,我们通过给key的hash值取余数组长度来决定数组的下标,由此便造成了一个问题就是hash冲突,因为既然是数组,那么长度是固定的,难免会碰到两个key不同,但是获取的数组下标是相同的,便产生了冲突当发生hash冲突时,会以2的幂次方进行扩容常用方法:添加、删除元素 HashM原创 2022-03-02 14:12:36 · 361 阅读 · 0 评论 -
快速入门JAVA数据结构-LinkedList常用方法
LinkedList相比于ArrayList增加删除的操作效率更高,但是查找和修改的效率更低适合LinkedList的情况:1.需要循环迭代访问列表中的某些元素2.需要频繁的在列表开头、中间、结尾等添加或者删除元素基本的添加和删除操作:add、pop LinkedList<String> stack = new LinkedList<>(); stack.add("a1"); //添加元素 stack.add("a2")原创 2022-03-02 09:35:39 · 799 阅读 · 0 评论 -
通过反射操作属性小栗子
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException { Class student = Student.class; //通过反射获取一个无参构造对象 Student s1 = (..原创 2022-02-14 06:00:00 · 292 阅读 · 0 评论 -
通过反射获取类的结构小栗子
public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException { Class student = Student.class; //获取类的名字 System.out.println(student.getName());//获取包名+类名 System.out.println(student.getSimpleName(..原创 2022-02-13 22:55:00 · 249 阅读 · 0 评论 -
获取class类的三种方式
//方式一:通过对象获得 Class c1 = person.getClass(); //方式二:forname获得 Class c2 = Class.forName("com.spring.reflection.Student"); System.out.println(c1.hashCode()); System.out.println(c2.hashCode()); ...原创 2022-02-13 19:33:13 · 1979 阅读 · 0 评论 -
两万字使用通俗语言讲解mybatis
目录1.简介2.搭建环境2.1依赖2.SqlSessionFactory3.第一个mybatis程序3.1导入依赖3.2创建实体类3.3编写接口类3.4编写配置文件UserMapper.xml3.5测试4.关于mybatis-config.xml4.1properties属性配置4.2settings设置4.3typeAliases别名5.XML映射文件5.1select5.2insert, update 和 delete5.3...原创 2022-02-05 21:33:20 · 1403 阅读 · 0 评论 -
五分钟实现mybatis增删改查。
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。mybatis – MyBatis 3 | 简介 上面是mybatis官方文档简介,话不多说,让我们来看看如何实现CRUD。...原创 2022-01-27 10:16:11 · 1882 阅读 · 0 评论 -
c3p0连接池报错?数据库连接不成功?改了三天的bug,血的教训。
这几天在写课设,发现一个很狗血的情况,c3p0连接数据库失败,报了很多错误,什么没有权限,远程登录错误等等等等。。。。 去网上搜索很多大部分都是配置信息错误,但是检查了很多遍,确定没问题。后来分析是c3p0jar包版本过高,mysql版本低不兼容引起的,又重新安装了高版本的mysql。 结果还是失败,后来求助大佬,说是连接配置有问题。下面是之前的连接cpds.setDriverClass("com.mysql.jdbc.Driver");...原创 2021-12-16 10:09:43 · 3380 阅读 · 0 评论 -
三行代码判断月份天数!
if(month==2)return year%4==0?(year%100==0?(year%400==0?29:28):29):28;return (month==4||month==6||month==9||month==11)?30:31;原创 2021-10-11 20:45:12 · 362 阅读 · 1 评论 -
浅谈lambda表达式——建议收藏
lambda表达式并不建议频繁使用,如果频繁使用会使你的代码非常简洁但是让人难以理解,后期会难以维护,同事看了想打人系列。说明:lambda是java8中引入的一个新的操作符“->”,成为箭头操作符或者是lambda操作符。左侧:lambda表达式的参数列表。右侧:lambda表达式中所需执行的功能,即lambda体。依赖于函数式接口,lambda表达式即对接口的实现。特点:1.lambda使句式变得更加简洁。话不多说上栗子: @Test ...原创 2021-10-08 17:11:58 · 1661 阅读 · 0 评论 -
浅谈final关键词——建议收藏
final 最终的 顾名思义,最终的就是不能改变的,最后的。我们来看一下都有哪些用法。基础:1.修饰类 当final修饰类的时候,说明这个类是最终类,不可以被继承。当你设置当前类为final时,那么这个类当中的所有方法都会被默认的设置为final。举个栗子:2.修饰方法当一个类中的方法被final修饰时,那么这个方法将不可以被复写。private方法被默认的指定了final方法。举个栗子:3.修饰变量最为常见的也就是修...原创 2021-10-07 21:07:59 · 205 阅读 · 0 评论