Thread是Runnable的实现类
要使用start()方法必须创建或者继承Thread类。
run方法和start()方法的区别:
如果一个子类重写了方法如下:
12345public static void main(String[] args) { myThread th1 = new myThread(); th1.run(); th1.start();}
想想会是什么结果?
run()调用主线程,start()则会启动新线程,执行run()的方法
线程的join()有什么用?会阻塞当前调用此方法的线程,要求完成后,才会继续执行下面的代码。
123456789101112Thread thread = new Thread(new File());Thread thread1 = new Thread(new web());thread.start();thread1.start();try { thread.join(); thread1.join();}cat ...
要求2进制中1的个数,
比如1010 就有2个1;
对此怎么求呢?
需要了解 x&-x
如果 x-=x&-x (1010 -=0010) = 1000 再剪一次就等于0000;算下来进行了俩次,所以有2个1;
所以我们需要了解这个x&-x怎么来的
***源码 补码 反码 ***
我们需要了解这三个概念。
10
源码:1010(10)
反码:1010(10)
补码:1010(10)
正数的补码源码反码是一样的;
所以我们要观察负数的
-10 = -10 的 补码
0110
1010 & 0110 = 0010;
x&-x 则是原码&补码。补码表示的就是x的负数。反码+1 等于补码。
总结记住,x&-x 可以求得二进制的最后一个1的位数消除最低1的位数。
比如这道题:给定一个长度为 nn 的数列,请你求出数列中每个数的二进制表示中 11 的个数。
输入格式第一行包含整数 nn。
第二行包含 nn 个整数,表示整个数列。
输出格式共一行,包含 nn 个整数,其中的第 ii 个数表 ...
自动装箱:将基本数据类型自动转换为包装类对象。
拆箱:将包装类对象自动转换为基本数据类型。
性能:频繁的装箱和拆箱操作可能影响性能,尤其是在需要高效处理数据时
基本数据类型和包装类型有哪些?
基本数据类型:byte, short, int, long, float, double, char, boolean
包装类型:Byte, Short, Integer, Long, Float, Double, Character, Boolean
关于拆箱的一些坑int a = 128;
Integer = 128;
a == interger
别急再看看下面的
flag 一个为true 一个为false 为什么呢
首先int 类型和Integer类型比较时候用 == 会比较值,不会比较其引用地址
然后如果为包装类型比较,如果不存在缓存的地址中,【-128,127】 这是Integer的缓存机制,直接返回缓存的对象,如果超过但是不会发生拆箱,而是构造了一个新对象。因为超过了Integer的常量池。
常量池字符串常量池 ...
关于java.lang.NullPointerException异常问题 以下则会发生空指针异常1.对象中的空字段访问或修改
1if(map.get("demo1").equals("i7o"));
2.null对象调用实例方法
123//假设定义了一个类Student有一个方法show()输出“show”; Student demo2 = null; demo2.show();
3.将 null 长度视为一个数组
1234int[] demo3 = null;for(int i =0;i<10;i++){ demo3[i] +=i;}
4.访问或修改 的插槽 null ,就好像它是数组一样
12int[] c = null;System.out.println(c[1]);
5.像一个值一样Throwable投掷null
12Throwable demo5 = null; throw demo5;
经过测试以上五条是会发生空指针的异常的情况,首先先 ...
==
==比较的是对象的引用地址(内存地址是否相同)
但是 int 类型比较的时候比较的是 值 基本数据类型比较。
equals
equals一般重写的话都是比较对象的内容 即使引用地址不相同,但是内容相同任然返回ture;
但是如果不重写话,则和==相同
如图:
还要一个概念Objects.equals这是java的工具类
很简单,如果你的类没有重写的话,就相当于 == 比较,如果重写了比较内容,则equals方法会比较内容即可。
建议进行比较的时候,使用Objects.equals()这个工具类。
总结如果进行比较的时候,要确定是否是比较对象的内容还是地址完全相同,如果地址相同则说明内容和地址都会相同,如果只是比较内容,建议使用equals方法来进行比较。
关于int类型和Integer类型比较
int Integer比较
integer则回拆箱来进行比较。
== 比较的还是int类型的方法,比较的是值。无论是否超过-128,127;
== 基本类型比较的 ...
关于hashCode与equals()方法如果equals想等,则hashCode也要相同。
但是hashCode相同,equasl不一定为ture;
如果重写equals方法,则要重写hashCode,来确保这个契约确保了在哈希集合中相等的对象具有相同的散列码。
不等的对象:即使两个对象的 hashCode 相同,它们不一定通过 equals 方法比较相等,因为不同对象可以有相同的哈希值(哈希冲突)。
关于==与常量池如果创建了俩个不同的对象,虽然对象在不同的内存地址中,
但是指向了相同的常量池中,则俩个对象的引用相同,==也会变为true;
如果我把注释打开则会
因为指向了相同地址。
哈希冲突怎么解决回到正题
链地址法:使用链表或其他数据结构来解决冲突,适合插入和删除操作频繁的情况。
开放地址法:通过探测下一个可用位置解决冲突,常用于简单实现。
再哈希:在负载因子达到一定值时扩大哈希表的大小,并重新分配元素。
我没用过先记着就行,等用到了文章会更新的。
Java创建对象的方式有几种?1.通过new创建新对象
2.通过clone()
3.通过反射
4.使用反序列化
5.使用工厂模式
6.使用Builder模式
样例如下:
12Student stu1 = new Student();stu1.show("1");
12Student stu2 = (Student)stu1.clone();stu2.show("2") //使用clone的方法需要继承Cloneable 重写此方法
123Class<Student> clazz = Stduent.class;Student stu3 = clazz.getDeclaredConstructor().newInstance();stu3.show("3")
1234String fileName = "绝对路径/Student.stu1";ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName) ...
直接上图
相关端口号占用命令:
12345678-- 检查当前端口号占用PIDnetstat -ano | findstr "端口号"-- 检查当前端口号是哪个文件应用占用tasklist | findstr "进程ID"-- 终止当前PIDtaskkill /F /PID 进程ID
123456789101112131415161718192021222324252627282930313233-- 查看相对路径git status -- 查看本地仓库和上游仓库git remote -v -- 查看当前所在分支git branch-- 提交本地缓存文件git add .-- 提交缓存文件到本地仓库git commit -m '相关信息'-- 拉取上游分支最新项目git pull upstream + 分支-- 推送到远程本地创库 git push origin + 分支git pull origin BRANCH_20240806git add xxx.java xxx.javagit commit -m "信息-2024-9810_优化202406"git push origin BRANCH_20240806-- 查看报错信息git diff + 相对路径
回退git案例先查询git提交日志:
其次可以看看到 commit 后面的数值,这是commit ID,需要回退到哪个则保存哪个commit。
接下来则
输 ...
启:关于我在使用@PathVariable的注解时 但是我请求地址为http://localhost:8002/api/shortlink/v1/user?username=i7
一关于@RequestParam以及@PathVariable的使用
其次我不太了解,也是百度查过来的。
其次关于了解
1.当URL指向的是某一具体业务资源(或资源列表),例如博客,不同用户,使用@PathVariable。
2.当URL需要对资源或者资源列表进行筛选过滤,用@RequestParam。
12@RequestMapping(value = “/user/{username}”) public String userProfile(@PathVariable(value = "username"))
12@RequestMapping(value = "/user") public String userprofile(@RequestParam(value = "usernmae"))
分别对应的路径为:
12 ...




