- 博客(82)
- 资源 (2)
- 收藏
- 关注
原创 线程池面试点
Callable类型的任务是可以返回执行结果的,而Runnable类型的任务不可以返回执行结果。execute()方法主要用于启动任务的执行,而任务的执行结果和可能的异常调用者并不关心。submit()方法也用于启动任务的执行,但是启动之后会返回Future对象,代表一个异步执行实例,可以通过该异步执行实例去获取结果。当有任务的时候,线程池会不断创建核心线程数直到设置的数量,如果还是有任务,就会加入到等待队列当中去;线程池的作用是什么?其中核心线程数如果没满,即使有的线程在空转也会新建线程。
2024-10-31 09:52:50
548
原创 Mybatis缓存
二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactroy创建SqlSession查询结果会被缓存;此后若再次执行相同的查询语句,结果会从一个缓存中获取。flushinterval(刷新间隔) 可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。打印发现2个对象的地址值不一样,但是确实只发送了一次SQL语句的查询,二级缓存中存储的是数据,不是对象。2.sqlSession相同,查询条件不同,多次查询不同的情况,不会导致缓存失效。3.什么样的数据能使用缓存。
2024-10-31 08:57:32
684
原创 JVM 垃圾回收
大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 s0 或者 s1,并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(默认为 15 岁),就会被晋升到老年代中。):“Hotspot 遍历所有对象时,按照年龄从小到大对其所占用的大小进行累积,当累积的某个年龄大小超过了 survivor 区的一半时,取这个年龄和 MaxTenuringThreshold 中更小的一个值,作为新的晋升年龄阈值”。
2024-10-27 15:34:25
945
原创 Java 内存区域详解
大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 s0 或者 s1,并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(默认为 15 岁),就会被晋升到老年代中。也就是说,永久代是 HotSpot 的概念,方法区是 Java 虚拟机规范中的定义,是一种规范,而永久代是一种实现,一个是标准一个是实现,其他的虚拟机实现并没有永久代这一说法。对象的访问方式由虚拟机实现而定,目前主流的访问方式有。
2024-10-27 15:23:49
687
原创 类加载简述
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加 载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的 加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请 求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节 流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。
2024-10-27 15:15:58
516
原创 面向对象三大特性
继承性:允许通过继承原有类的某些特性或全部特性而产生全新的类,原有的累称为父类,产生的新类称为子类。子类不仅可以直接继承父类的共性,而且也可以创建它特有的个性。多态性:是指在基类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同行为,多态性有两种表现形式:重载和覆盖。封装性:类的封装性为类的成员提供公有、缺省、保护和私有等访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。类具有封装性、继承性和多态性。
2024-10-27 14:55:18
160
原创 abstract class 和 interface 有什么区别?
D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体),实现类必须要实现。A. interface需要实现,要用implements,而abstract class需要继承,要用extends。不可有私有的,默认是public static final 型,且必须给其初值,实现类中不能重新定义,不能改变其值。A. 两者都是抽象类,都不能实例化。
2024-10-27 14:52:54
267
原创 类初始化顺序
通过这种方式,Java确保了父类的初始化在子类之前完成,从而保证了继承关系中的正确性和一致性。在Java中,当一个子类被实例化时,其父类也会被初始化。按照从父类到子类的顺序,依次执行静态变量的初始化和静态初始化块。先执行父类的实例变量初始化和实例初始化块。再执行子类的实例变量初始化和实例初始化块。Parent 类的构造方法紧接着执行。Child 类的构造方法最后执行。Parent 类的静态块先执行。Parent 类的实例块先执行。Child 类的静态块后执行。Child 类的实例块后执行。
2024-10-27 14:51:15
175
原创 jconsole或者jvisual连接服务器Java进程
把最后的打开,下面是账号,上面是密码。在里面有个password文件。然后修改password。
2024-10-20 16:38:22
330
原创 redis简单理解
在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。c语言对字符串的存储是使用字符数组,遇到'\0'字符则认为字符串结束,redis的字符串可以存储任何类型的数据,因为任何类型数据都可以表示成二进制,sds结构中的char buf[]就是存储了二进制数据。1、列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。
2024-10-12 19:27:17
813
原创 jvm笔记
内存分一半,只操作一半内存的数据,标记活下来的放到另一半内存,原先内存数据全部删除。不同的锁标志位,会导致32bit的数据展示的不一样,对象的hashcode在其他锁状态没有是因为存到其他地方了。指针碰撞和空闲列表,都有并发问题,可以通过同步或TLAB,每个线程都分块地方,各自忙自己的。记忆集:将老年代存在跨代引用的加入记忆集,垃圾回收找记忆集,不用再遍历老年代。遍历对象,标记活下来的对象,删除其余对象。标记活着的,统一放到一块地方,删除其他的。哪些内存要回收,什么时候回收,怎么回收。
2024-10-11 18:09:22
435
1
原创 128陷阱
Java 5引入了自动装箱和拆箱机制,允许将基本数据类型自动转换为对应的包装类对象,反之亦然。例如,Integer a = 128;实际上会调用Integer.valueOf(128)方法。-128到127由于是热点数据,所以缓存了起来。Integer.valueOf()方法。
2024-10-10 11:05:13
149
原创 设计模式的六大原则
尽可能的拆分接口的方法,或可理解为尽量拆解为更具体更小的接口。程序要依赖抽象接口,不要依赖具体实现。超类的性质在子类依然成立。对扩展开放,对修改关闭。
2024-09-23 22:03:53
112
原创 Java工厂模式
简单工厂模式工厂模式抽象工厂模式超级工厂模式容器工厂模式工厂模式为了返回一个对象,但是尽量不通过规范的User user = new User()的方式,而是通过一些简单的名字、xml、注解或者其他来返回对象。就像一个人可能有很多东西,他的灵魂肉体,身份证号,社会身份,个人性格品质,学历能力等等等等,准确的返回一个人是很难的。通过工厂模式,就会通过“xx班的张三”,“学校是xxx学校,学号是999111的学生”就能精准的返回一个人。
2024-09-23 18:50:35
258
原创 mysql速起架子
在这可能有error while loading shared libraries: libaio.so.1: cannot open shared object...修改成功后,尝试在nav操作数据库。去到bin目录 cd bin。还要把服务器的安全组开放端口。先继续操作linux的命令。修改mysql配置文件。
2024-08-14 17:09:19
524
原创 node速起架子
链接:https://pan.baidu.com/s/1NF1e75P8pNDzphO1jBUSyg提取码:sf3w下载node安装好node -v。
2024-08-14 16:54:59
207
原创 gitlab 服务器安装
这里先stop,restart,start ,reconfigure 最后status。status没问题就访问吧。链接:https://pan.baidu.com/s/1Gn5bWHi45Dcpe1RH1S06dw。这里要很长的时间,加载差不多就ctrl z吧。然后就是有一台服务器。
2024-08-03 13:36:41
333
原创 通过idea图形化界面就能push到github流程
点这个按钮他会说我已经请求成功了,可以回idea看看有没有绑定好。里面进行认证有三个选项,先优先第一个打开网页后点击,等待idea是否加载到了你的账号。把这个复制粘贴进去,看看路径,千万不要出错,要和你的id_rsa保持一致。安装好后,再进行github加速,再加载一次刚刚那个网页操作。打开电脑的商店,下载一个叫watt toolkit的软件。这里也配好,配好后再配合1方案进行加速,笔者到这就成功了。先进行github认证,笔者在这吃了很多的亏和苦。笔者这里报错了,昨天是成功了,就不发成功截图了。
2024-08-03 13:16:35
518
原创 gitee的fork
在这fork复制一份到你自己的仓库,一般和这个项目同名。现在你有了自己的库,先对自己的库操作就行了。在这提交后,等待队长审核就行了。现在就提交到自己的库了。
2024-07-27 23:05:43
750
原创 git入门
Git是目前世界上最先进的的分布式控制系统(没有之一)。很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
2024-07-27 17:05:11
971
原创 Java并发的笔记
缓存行填充,缓存拿需要的变量时会去内存读,但是会一口气加载一个缓存行,也就是缓存行有64bit但是想要的变量就8bit,它会把剩下的56bit根据那个变量地址后面加载56bit。处理器发送任何指令都是电压传输,如果2个处理器同时发命令两个电压造成电压叠加必定会造成混乱,最好情况就是其中一个处理器的指令执行被吃了(这也很恐怖),如果两个电压抵消,两个处理器的指令白干活。volatile能保证,当一个处理器写了某个被volatile修改的数据,其他处理器能正确的读到被修改后的值,就是保证读的正确。
2024-07-22 13:37:51
527
原创 102. 二叉树的层序遍历&518. 零钱兑换 II
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> ret = new ArrayList<List<Integer>>(); if (root == null) { return ret; } Queue&.
2022-05-15 23:56:14
1095
原创 146. LRU缓存机制
class LRUCache extends LinkedHashMap<Integer, Integer>{ private int capacity; public LRUCache(int capacity) { super(capacity, 0.75F, true); this.capacity = capacity; } public int get(int key) { return su.
2022-05-15 23:51:42
1062
原创 215. 数组中的第K个最大元素&56. 合并区间
class Solution { Random random = new Random(); public int findKthLargest(int[] nums, int k) { return quickSelect(nums, 0, nums.length - 1, nums.length - k); } public int quickSelect(int[] a, int l, int r, int index) { int.
2022-05-15 23:49:58
998
原创 83. 删除排序链表中的重复元素&206. 反转链表
class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null) { return head; } ListNode cur = head; while (cur.next != null) { if (cur.val == cur.next.val) { .
2022-05-15 23:45:20
1004
原创 322. 零钱兑换
public class Solution { public int coinChange(int[] coins, int amount) { if (amount < 1) { return 0; } return coinChange(coins, amount, new int[amount]); } private int coinChange(int[] coins, int rem, in.
2022-05-15 23:43:07
894
原创 33. 搜索旋转排序数组
class Solution { public int search(int[] nums, int target) { int n = nums.length; if (n == 0) { return -1; } if (n == 1) { return nums[0] == target ? 0 : -1; } int l = 0, r = n - .
2022-05-15 23:41:45
894
原创 110. 平衡二叉树&236. 二叉树的最近公共祖先
class Solution { public boolean isBalanced(TreeNode root) { if (root == null) { return true; } else { return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && i.
2022-05-15 23:39:56
117
原创 88. 合并两个有序数组&108. 将有序数组转换为二叉搜索树
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { for (int i = 0; i != n; ++i) { nums1[m + i] = nums2[i]; } Arrays.sort(nums1); }}class Solution { public TreeNode sortedArrayTo.
2022-05-15 23:35:52
924
原创 3. 无重复字符的最长子串
class Solution { public int lengthOfLongestSubstring(String s) { // 哈希集合,记录每个字符是否出现过 Set<Character> occ = new HashSet<Character>(); int n = s.length(); // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动 int rk .
2022-05-14 16:21:40
959
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人