- 博客(52)
- 收藏
- 关注
原创 SpringBoot嵌入式Servlet容器 相关学习笔记
因为一开始在createWebServer()方法里是通过调用getWebServerFactory()得到服务器组件,具体是查找类型为ServletWebServerFactory.class的组件。前面说了ServletWebServerFactory是服务器组件间接实现的一个接口,所以可以通过修改父类/接口的功能,来对实现类/子类进行功能扩展。但是由于。
2023-03-11 00:44:39
607
原创 RequestResponseBodyMethodProcessor
RequestResponseBodyMethodProcessor既是一个参数解析器,也是一个返回结果处理器。
2023-03-07 19:25:54
2095
原创 Java中Socket通信-客户端向服务端发送照片
客户端:package TCPCopy;import java.io.*;import java.net.InetAddress;import java.net.Socket;//服务器端public class Client { public static void main(String[] args) throws IOException { Socket socket = new Socket(InetAddress.getLocalHost(),8888);
2022-05-04 22:24:59
683
原创 节点流和处理流
节点流和处理流的区别和练习节点流是底层流/低级流,直接和数据源相接。处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连。处理流的功能主要体现在:性能的提高,主要以增强缓冲的方式来提高输入输出的效率操作的边界,处理流可能提供了一系列便捷方法来一次输入输出大批量的数据,使用更加灵活。节点流(字节流)实现文件的拷贝:package copy_;i.
2022-04-30 10:31:39
798
原创 通过文件输入输出流完成文件的拷贝
package outputstream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/** * @author Yhj * @date 2022/4/29 21:22 * @project IO */public class FileCopy { public static void main(String[] args) throws IO
2022-04-29 21:53:02
156
原创 java创建文件的三种方式
package file;import org.junit.jupiter.api.Test;import java.io.File;import java.io.IOException;/** * @author Yhj * @date 2022/4/29 18:46 * @project IO */public class FileCreate { public static void main(String[] args) { new FileCrea
2022-04-29 19:02:42
9647
1
原创 java线程同步问题例题
要求:在main方法中启动两个线程第一个线程循环随机打印100以内的整数第二个进程从键盘读取了”Q“命令package com.yuanhuajun.Homework;import java.util.Scanner;/** * @author Yhj * @date 2022/4/29 8:44 * @project chapter17 */public class Homework01 { public static void main(String[] a.
2022-04-29 09:59:17
974
原创 HashSet和TreeSet如何实现去重
HashSet的去重机制 首先,hashSet底层是数组+链表+红黑树,在添加时,通过hashCode(),得到一个hash值,通过hash值能得到对应的索引,即在数组中的位置,如果发现table索引所在的位置没有数据,直接存放进去,如果当前索引已有数据,就进行euqals比较【遍历比较】,若比较后都不相同,就加入在后边,否则不加入。TreeSet的去重机制 首先,TreeSe
2022-04-24 19:25:46
1848
原创 开发中如何选中集合实现类
在开发中,选中什么集合实现类,主要取决于业务操作特点,然后根据集合实现类特征选中,分析如下:1)先判断存储的类型(一组对象【单列】或一组键值对【双列】)2)一组对象【单列】:Collection接口 允许重复:List 增删多:LinkedList【底层维护了一个双向链表】(增强删除不需要移动) 改查多:ArrayList【底层维护了Objet..
2022-04-24 12:49:39
573
原创 Map接口实现类——HashTable以及它的子类Properties
1)存放的元素是键值对,即K-V2)hashtable的键和值都不能为null,否则会抛出空指针异常3)hashtable的使用方法和hashmap基本一样4)hashtable线程安全,hashmap线程不安全Hashtable的初始化和扩容:底层有数组,Hashtable&$Entry[],初始化为11临界值threshold = 11*0.75=8扩容:超过临界值,一次扩容成*2+1执行 方法 addEntry(hash, key, value, index); 添加K-.
2022-04-24 12:23:53
134
原创 Map接口和常用方法
Map接口实现类的特点(JDK8)1. Map与Collection并列,用于保存具有映射关系的数据Key-Value;而在Set中,Value是对象常量”PRESENT"2. Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中3. Map中的key不允许重复,value可以重复4. Map中的key可以null,value也可以为null,只能有一个key为null,可以有多个value为null5. 当有相同key存在时,就替换6. 常用Strin.
2022-04-24 12:00:55
402
原创 HashSet底层原码
使用无参构造HashSet并首次添加元素1.执行HashSet(),可以看到本质是一个HashMap2.调用add方法,PRESENT主要是占位,没有什么意义private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null; }3.执行put方法 ,key是元素值,value是PRESENT
2022-04-21 22:43:27
100
原创 ArrayList扩容底层结构和原码分析
ArrayListSource.java1)ArrayList中维护了一个Object类型的数组elementDatatransient Object[] elementData ,transient 表示瞬间,短暂的,表示该属性不会被序列化2)当创建ArrayList无参构造器,则初始化elementData容量为0,第1次添加,则1扩容elementData为10,如需再次扩容,则扩容为elementData为1.5倍(现有大小+现有大小/2)。3)如果使用指定大小的构造器,则初始ele
2022-04-21 10:26:26
197
原创 Integer 的装箱和拆箱
public static void main(String[] args) { //int <--> Integer 的装箱和拆箱 //jdk5之前手动装箱和拆箱 //手动装箱 int->Integer int n1 = 100; Integer integer = new Integer(n1); Integer integer1 = Integer.valueOf(n1); ...
2022-04-16 22:23:26
317
原创 在VirtualBox上安装deepin
先看效果 这是桌面,微信是我通过自带的应用商店安装的,里面还能下载其他很多应用。文件管理器:终端:文章目录先看效果前言一、deepin是什么?二、安装步骤1.准备工作软件准备:硬件准备(官方推荐):2.开始安装总结前言 想尝试安装一款国内开发的Linux系统,自己对Linux了解也不多,在网上几经浏览,发现了这款系统热度比较高。起初以为是同名,实则自己很多年前就下载过
2022-04-10 11:31:39
6879
2
原创 匿名内部类的使用
public class AnnoymousInnerClass { public static void main(String[] args) { Outer outer = new Outer(); outer.method(); }}class Outer{ //外部类 private int n1 =10; public void method(){ //基于接口的匿名内部类 //1.需求
2022-04-08 20:11:58
438
原创 局部内部类的使用
说明:局部内部类定义在外部类的局部位置,比如在方法中。局部类可以直接访问外部类的所有成员,包含私有的。局部类不能添加访问修饰符,因为本身就是一个局部变量,局部变量不能使用修饰符,但是可以用final修饰。外部类要访问局部类,可以先在局部类所在的方法中创建实例或其他操作,而后在外部类中通过对象调用这个局部类所在的方法。外部类和局部类重名时,就近原则,但可以通过外部类名.this.成员去访问外部类成员。上代码:public class OuterClass { int x=3;
2022-04-08 15:17:06
1002
原创 如果不重写toString()方法...
每个类都是Object的子类,Object自带一个toString()方法,它的内容是这样的: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 解释:也就是打印
2022-04-07 22:15:01
318
原创 java的动态绑定机制
1.当调用对象方法的时,该方法会和该对象的内存地址/运行地址绑定2.当调用对象数学时,没有动态绑定机制,哪里声明哪里使用public class OuterClass { public static void main(String args[]) { A a = new B(); //父类引用指向子类对象 System.out.println(a.sum()); //30+10-》40 }}class A { int i
2022-04-07 16:07:33
487
原创 向上转型和向下转型(强转) 总结
向上转型:本质:父类引用指向了子类的对象语法:父类类型 引用名 = new 子类类型();特点:编译类型看左边,运行类型看右边可以调用父类中的所有成员(需访问权限)不能调用子类特有的成员;最终运行效果看子类的具体实现!方法的调用:public class OuterClass{ public static void main(String args[]) { A a = new B(); //父类引用指向子类对象
2022-04-07 14:07:49
850
原创 static到底是存放在堆中还是方法区中
首先肯定:静态变量是被对象共享的jdk8之前:放在方法区jdk8及以后:存放在堆中反射的class对象(即类加载后会在堆中生成一个对应的class对象)最后
2022-04-03 09:07:12
2204
原创 java中继承使用注意项
子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问子类必须调用父类的构造器, 完成父类的初始化当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译失败如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)super 在使用时,必须放在.
2022-03-12 10:59:43
246
原创 可变参数的使用
可变参数可以在不确定实参具体数目的时候,先写好方法,格式为:类型... 参数名 。但在调用时,传的值无论多少个,都必须要符合可变参数的类型。1. 实参可以为0或者一个:2.可变参数的实参可以为数组(可变参数的本质就是数组)3.可变参数可以和普通参数一起放在形参列表,但必须保证可变参数在最后4.一个形参列表只能出现一个可变参数...
2022-03-08 22:01:58
318
原创 小老鼠走迷宫问题(递归)
地图和寻找路径如下:/** * * @author Yhj * */public class demo1 { public static void main(String[] args) { // 1.先用二维数组创建迷宫 // 2.先给map数组元素定值:0表示可以走;1表示障碍物;2是通路;3走过是死路 int[][] map = new int[8][7]; for (int i = 0; i < map.length; i++) { map[i].
2022-03-08 10:21:51
384
原创 break跳转到指定的标签
如果break后不加标签,默认跳出最近的一层循环:如果break后加标签就退出标签所在的循环:注:尽量不要使用,影响代码可读性
2022-03-06 07:55:35
613
原创 java打印空心金字塔
代码如下: public static void main(String[] args) { int total; Scanner scan = new Scanner(System.in); total=scan.nextInt(); int i=1; for(i=1;i<=total;i++){ for(int k=1;k<=total-i;k++){ System.out.print(" "); } for(int j=1;j<=i.
2022-03-05 21:47:56
236
原创 什么是JDK JRE
- JDK 、JRE 和JVM的包含关系JDK=JRE+开发工具集(例如Javac,java等编译工具)JRE=JVM+Java标准类库JDK=JVM+Java标准类库 +开发工具集如果只想运行开发好的.class文件,只需要JRE
2022-03-03 10:13:17
5963
原创 蓝桥杯(梅森素数)
梅森素数如果一个数字的所有真因子之和等于自身,则称它为“完全数”或“完美数”例如:6 = 1 + 2 + 328 = 1 + 2 + 4 + 7 + 14早在公元前300多年,欧几里得就给出了判定完全数的定理:若 2^n - 1 是素数,则 2^(n-1) * (2^n - 1) 是完全数。其中 ^ 表示“乘方”运算,乘方的优先级比四则运算高,例如:2^3 = 8, 2 * 2^3 = 16, 2^3-1 = 7但人们很快发现,当n很大时,判定一个大数是否为素数到今天也依然是个难题。
2022-03-01 10:52:15
157
转载 蓝桥杯(世界末日题)
题目要求:曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会…有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!于是,“谣言制造商”又修改为星期日…1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?请回答该年份(只写这个4位整数,不要写12月31等多余信息)答案:2299public class test1 { publi
2022-03-01 09:05:49
204
原创 求n位水仙花数 C语言代码
lude <stdio.h>int main(){ int n; scanf("%d",&n); int first=1; int i=1; while(i<n){ first*=10; i++; } printf("first=%d\n",first); i=first; while(i<first*10){ int t=i; int sum =0; do{ int d =t%10; t/=10; int
2022-01-09 16:40:00
396
原创 求最大公约数的两种方法
方法一:#include <stdio.h>int main(){ int a,b; scanf("%d %d",&a,&b); int ret=0; int i; for(i=1;i<=(a>b?b:a);i++){ if(a%i==0&&b%i==0){ ret=i; } } printf("%d和%d的最大公约数是%d",a,b,ret); }方法二:辗转相除法:#include <stdio.h&
2022-01-09 16:02:11
300
原创 整数分解和逆序
#include <stdio.h>int main(){ int x; scanf("%d",&x); int mask=1; int t=x; while(t>9){ t/=10; mask*=10; } printf("x=%d,mask=%d\n",x,mask); do{ int d= x/mask; printf("%d",d); if(mask>9){ printf(" "); } x%=mask; mas
2022-01-09 13:44:01
405
原创 C语言输出100以内的素数
#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){int n;int isPrime=1;int i=1;int j=2;for(int i=1;i<=100;i++){ for(int j=2;j<i;j++){ if(i%j==0){ isPrime=0; } } if(isPrime==1){ printf("%d\n",i);
2022-01-09 12:31:57
890
原创 C语言计算最大公约数的两种方法
效果如图#include <stdio.h>int main(){ int x,y; int min; int i; printf("请输入两个数字\n"); scanf("%d %d",&x,&y); if(x<y){ min=x; }else{ min=y; } int ret=0; for(i=1;i<=min;i++){ if(x%i==0){ if(y%i==0){ ret=i; }
2021-10-12 17:03:18
195
空空如也
@ComponentScan和@AutoConfigurationPackage的区别
2023-03-21
关于s1.intern()方法,这样理解对不对。
2022-10-15
为什么只给run方法上锁后,只有一个进程能执行
2022-09-26
HashSet添加元素的问题
2022-09-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人