- 博客(26)
- 收藏
- 关注
原创 找不到地方的稀碎知识点
java在使用一个类的时候会经历几个过程:加载,链接,初始化,使用,卸载。在初始化阶段才会真正实现new对象的过程(具体的类的加载过程后面会总结)我们这里定义了两个wuhu,一个内部类一个辅助类。可以看到new辅助类的对象时需要标明他是在thread_lock包中的。一个java文件中可以定义不止一个类,根据他们被定义的位置不同将他们称为内部类和辅助类。总得来说,静态的东西和这个类本身共存亡,普通的东西和实例(对象)共存亡。static可以用来修饰变量或方法以及部分类。
2024-07-17 17:10:55 293
原创 线程学习-2-通讯系统
要写一个简单的通讯系统,我们首先要明确几点:一:我们要有一个服务器和多个客户端、服务器和客户端之间通过套接字连接二:套接字之间通过输入输出流传递信息三:传递的信息的过程中要做好信息分割。四:一些技术细节。
2024-08-27 15:49:40 445
原创 java并发编程实战-初阅读-持续更新
从应用的角度来看,加锁实际上就是用synchronized关键字对一段代码或一个方法进行修饰。比如说,对一个类的实例(对象)中的某一个属性或方法进行访问时,从逻辑的角度上讲我们希望同时只有一个线程可以访问这个属性或方法,这时就需要加锁。就相当于我们有一个房间,但同一时间仅希望一个一个人进入,很简单地方法就是给这个房间加个锁。房间就相当于将要访问的属性或方法,人就相当于线程,加锁的动作就相当于用synchronized关键字修饰,加的锁就是使用关键字时加的参数。前面都比较好理解,这里再解释一下这个关键字。
2024-08-19 19:20:05 305
原创 HashMap源代码阅读初总结-看完线程安全之后再来看一遍
在刚开始的时候,HashMap中数量比较小,此时应该更倾向于将HashMap扩容而不是将List改为Tree。当List中元素多于第一个值(8)而HashMap整体元素少于第三个元素(64)时,对HashMap进行扩容而不是改变结构。即当他被遍历的过程中如果出现了结构改变的情况(增删元素,改变value的值不算),那么会报错。在普通初始化的时候,HashMap中每个值是List,当List中元素多到一定程度的时候会转化为(红黑)树。在HashMap中的元素多到一定程度的时候会将HashMap进行扩容。
2024-08-19 18:19:11 283
原创 计算机网络-入门版-持续更新
在刚开始学习计算机网络时,发现国内教材的切入点十分奇怪,上手十分困难,对初学者极不友好。因此在这里整理一下对计算机网络的整体框架做一下梳理,希望可以对后来者有一些帮助。
2024-08-16 18:05:17 415
原创 刷题笔记之动态规划
可以发现每次更新的时候都在使用上一行的内容,且只使用上一行的内容。区别就在于普通版的方法中,不放当前nums时用到的数据是上一行(01,从后往前)还是当前行(完全,从前往后)。现在感觉这类问题的难度主要集中在两点,一是发现这个问题可以用动态规划求解、一般情况下问题会披一个外衣,如何把这个外衣扒下来是有一些难度的。对于背包问题,一般会令一个数组,横坐标是背包容量+1,纵坐标为待选数组长度。01背包就是可以选择的元素只能选一次,完全背包则是可以选择无穷次。主要是要找到迭代的公式和对背包数组的初始化。
2024-08-01 20:46:28 185
原创 线程学习-1
可以认为并发是逻辑上同时进行(先一后二,但间隔极短),并行是严格意义上同时进行(一二同时,没有间隔)。在另一个类中new一个Runnable对象,然后new一个Thread对象,参数为新建的Runnable对象。例如对于一个8核16线程的CPU,他仅有8个物理核心(core)因此从物理上讲他只能同时处理8个并行的进程,但由于超线程技术(16线程),因此在逻辑上将可同时处理的线程增加到了16。线程和进程是两个不同的概念,可以简单理解为多个线程(Thread)组成一个进程(Process)。
2024-07-12 11:10:51 297
原创 刷题笔记之回溯算法①
写过二叉树,对递归算法有一些理解之后再来写回溯算法,其实会简单很多。回溯算法三步走:第一步:确定递归参数和返回值(参数根据实际情况确定,返回值大多数为void)第二步:确定递归停止条件第三步:确定循环中的逻辑(现在的感觉是用最后一层递归的逻辑来写比较好写)回溯算法实际上就是在原有递归的基础上又加了一个循环。如果把递归理解为深入的话,那么回溯就是浅出。下面用具体的例子来理解这一算法。
2024-05-20 11:38:18 246
原创 刷题笔记之二叉树 ①
二叉树有普通二叉树,满二叉树,完全二叉树,平衡二叉树,二叉搜索数等。二叉树实际上是某种意义上的链表。每个结点有左右两个子节点。每个节点储存相应的值。满二叉树指的是每个节点的左右子节点要么都为空,要么都不为空。完全二叉树指的是,如果把他相应的满二叉树按层级对节点标号,那么完全二叉树的节点标号和满二叉树一样。平衡二叉树:每个节点的左右子树的高度相差小于等于1.二叉搜索数:如果对二叉树按中序遍历,则得到的结果是从小到大排列的,并且没有重复元素。求解二叉树相关问题,一般有两套方法。递归或者迭代。
2024-05-17 10:21:46 821
原创 刷题笔记之哈希
由于本题要求的是返回下标,因此不能将数组进行重新排序(如果要求返回数组中的值而非下标的话,就可以考虑使用和三数之和,四数之和一样的双指针法了)。具体处理方法为:从头开始,先判断它是否可以和之前的元素一起构成题目需要的数组,如果可以的话将他们的下标一起输出,如果不可以的话就把这个元素存入HashMap里,Key为他的值,Value为他的下标。这题的思路纯纯的好东西,挺天才的。这就是标准的使用哈希法的题,因为他明确表明了唯一,哈希法是处理这类唯一问题的一个最好的方法(现阶段来看,以后怎么样不好说)
2024-04-01 11:36:52 642
原创 刷题笔记之链表
第二个为get,由于链表的性质,因此要求index一定大于0,小于0时直接返回,后续就是一个个向后找,找到了就返回对应的val,找不到就返回-1.第三个方法为添加头结点,依然是创建一个虚拟节点(不创建也行,这里创建实际上意义不大)。定义三个节点,一个当前操作的节点,一个前节点(希望当前节点指向的对象),一个临时节点储存当前节点的下一个节点(防止链表断掉)。在处理链表类问题的时候,要时刻记住自己处理的实际上不是变量,而是变量对应的那一块内存,一个变量可以有很多名字,他的名字也是随时可以被某个别的节点拿走的。
2024-03-24 16:30:17 239 1
原创 刷题笔记之数组
或者使用双指针法,一个指针对应最后要得到的数组,一个指针对应当前数组,如果当前数组指针对应的元素不是要被删除的元素,那么就把他令到得到数组指针对应的值上,并且两个指针都向后移动一位,如果是要删除的元素,那就只将当前数组指针向后移动一位,其他全部不变。双指针法的思路为从后和从前比较数的平方的大小,把大的数放在新数组的末尾,然后对应的指针向前或向后移动一位。暴力想法为依次遍历,找到相同的元素值时数组后的元素就都向前移动一位,然后从这一位接着往后找,这种方法需要注意循环结束条件。
2024-03-19 21:15:57 240 1
原创 知识应用之五子棋
需要用到的属性:标识黑棋或白棋的int变量count(后续取值只取0或1),记录落子次数的int变量num(从0开始),储存落子的stackLink变量chessLink,储存落子的数组变量Array,储存按钮文本的String变量str,储存绘图界面的Graphics变量g(需要在UI类中先定义Listener类的对象,并将Graphics传给Listener中的g以实现绘图。undo方法实现悔棋。首先创建UI类,继承JFrame类,设置窗口的布局方式,关闭键,标题,大小,位置,添加按钮,设置可视化。
2024-01-03 22:13:11 405 1
原创 哈希表的初步学习
问题主要出在哈希表的扩容上。对于链表中每一个节点的传递,我们都应该新令一个节点,它初对下一个节点的指向外,都与原节点相同,并把这个新节点挂在相应的链表上。而不建议把老节点直接挂在新链表上,这样会导致老节点之后的节点由于没有节点指向它而出现丢失的情况。
2024-01-01 21:31:27 371
原创 链表的初步学习
链表和数组一样,也是一种数据结构,但与数组在以下几个方面有所不同。首先,在所占用地址方面,数组占用固定长度的内存,也就意味着数组的长度是不可变化的。而链表占用的内存不固定,这就使得链表的长度可变。其次,在下标方面,数组的每一个元素都有与之对应的下标,但链表没有。这就意味这链表想要找到某一位置的元素,就只能从头开始遍历。最后,在每个位置的元素方面,数组的元素只储存这个位置的值。链表则不止储存这个位置的值,还储存下一个元素的地址。
2023-12-21 21:46:05 341 1
原创 创建一个长度可变的数组
数组定义有三个初始化方法1没有输入参数,这时候我们自己定义数组及其长度2输入参数为数组长度,这时候我们根据输入长度来定义数组3输入参数为数组,这时候将输入数组的内容传给我们自己的数组注意,我们希望我们自己定义的数组null元素只出现在末尾。
2023-12-11 11:38:47 477 1
原创 使用java进行简易绘图板制作
在这个类里面定义一个方法,实现窗口本身的定义(名字,大小,位置,x键的作用,窗口类型)实现按钮的定义(类型和颜色)对于按钮监听器,获取按钮上的文本,如果为空表示为颜色按钮,获取按钮颜色(此时要用到转型的方法),否则为类型按钮,获取其文本。对于鼠标监听器,依据文本的不同实现图形的绘制。同时定义一个数组,将每一次的操作都保存到这个数组里。(具体方法为定义一个新类,其中属性为一次点击或操作需要保存的数据,将这个类的对象作为数组来保存数据)注意,绘制图形的时候需要Graphic对象及其相应方法。
2023-12-03 22:35:43 149 1
原创 关于界面开发之动作监听器之接口11.22(初学者笔记_4)
从某种意义来说,接口和类是相互对应的。类的属性可以是抽象或具体的(换句话说,可以只定义属性(抽象)但不具体赋值)。但类的方法一定要是有完整定义的(参数只是没有具体数值,他的逻辑都是完整的)
2023-11-22 11:52:42 38
原创 关于类定义的学习总结23.11.14(初学者笔记)
(public)class 类名{}其中public 如果用的话,后面的类名一定要和Java文件名一样,毕竟创建的文件叫java类不是。至于加不加public有什么区别,暂时不是很理解,暂留。类名的命名要求是驼峰命名。类中包含两部分。一部分是性质(个人感觉把这一部分叫做类没什么道理),他们都是变量,存储和这个类有关的性质。命名规则遵循变量命名。至于可用范围,现阶段认为,在定义类时如果加public的话,这些变量在整个java文件夹(非这个Java文件)中都可用。至于为什么不是很理解,暂留。
2023-11-14 22:25:00 80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人