Java学习与算法实践
文章平均质量分 55
Java基础学习和源码分析,面试八股文,数据结构与算法
我是lk
爱学习的小白
展开
-
锁系列一:有哪些锁机制?
Exclusive(独占):只有一个线程能执行,如ReentrantLock。公平锁:按照线程在队列中的排队顺序,先到者先拿到锁非公平锁:当线程要获取锁时,无视队列顺序直接去抢锁,谁抢到就是谁的Share(共享):多个线程可同时执行,如Semaphore/CountDownLatch。Semaphore、CountDownLatch、 CyclicBarrier、ReadWriteLock的Read锁。不同的自定义同步器争用共享资源的方式也不同。原创 2022-09-12 18:03:00 · 334 阅读 · 0 评论 -
java-文件与IO操作详讲
long lastModified():返回当前文件最后一次被修改的时间。boolean isAbsolute():判断当前路径是否为绝对路径。boolean isHidden():判断当前文件是否是一个隐藏文件。boolean isDirectory():判断当前文件是否为目录。boolean isFile():判断当前文件是否为一个标准文件。boolean exists():判断文件或目录是否存在。String getName():返回文件或目录的名称。long length():返回当前文件的长度。原创 2022-09-12 17:57:26 · 157 阅读 · 0 评论 -
AOP、IOC、注解、反射
IOC(控制反转)就是依赖倒置原则的一种代码设计思路。就是把原先在代码里面需要实现的对象创建、对象之间的依赖,反转给容器来帮忙实现。所谓的 IoC 容器就是指的 Spring 中 Bean 工厂里面的 Map 存储结构(存储了 Bean 的实例)。注意,只有一个值的时候,使用value,在赋值时可以忽略,但其他的单词是不行的,这是一个不成文的规定。原创 2022-09-12 17:53:14 · 447 阅读 · 0 评论 -
类加载器与垃圾回收机制
目录索引1.类加载器1.1类生命周期1.2三种类加载器1.3类加载的特性1.3.1类不会重复加载1.3.2双亲委派机制1.3.3沙箱安全机制2.垃圾回收机制2.1概念2.2jvm运行时区方法区堆内存虚拟机栈本地方法栈程序计数器2.3堆内存空间2.4垃圾收集算法2.5垃圾收集器原创 2022-04-07 08:42:14 · 1755 阅读 · 0 评论 -
锁系列二:利用Redisson实现分布式锁-集群、单机
redisson作为一个简单的高度封装的工具,可以帮助轻松实现分布式锁,处理各种资源抢占问题原创 2022-04-06 19:28:47 · 2048 阅读 · 0 评论 -
锁系列三:优雅的通过数据库行锁代替Redis实现分布式锁
当系统有一个时间较长的同步任务执行时,不能有其他线程重复去执行这个任务,因此需要用到锁,由于是集群应用,所以只能是分布式锁。分布式锁比较常见的方式都是借助一个中间件实现的,比如zookeeper锁,redis锁。但是这样的话会额外映入一个组件,并不是很划算。一般系统会用到redis,所以使用redis锁的会比较常见,但是redis并非完全可靠,所以也不是特别好。所以这里使用数据库(mysql)实现一种基于行锁的简单优雅的实现方式。原创 2022-04-06 16:12:38 · 2306 阅读 · 0 评论 -
java面试学习宝典记录
java面试学习宝典记录原创 2022-04-04 10:24:24 · 397 阅读 · 0 评论 -
C语言 链表的创建,添加
#include<stdio.h>#include<stdlib.h>#include<string.h>#define LEN 20struct PersonNode //定义一个结构体(链表框架的基础) {char company[LEN];char name[LEN];str翻译 2019-02-15 16:21:00 · 237 阅读 · 0 评论 -
C语言200行代码写一个贪吃蛇小游戏
#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <windows.h>#include <time.h>#define High 35 //游戏画面尺寸#define Width 70/*函数外全局变量*/int canvas[High]...原创 2020-04-06 15:02:40 · 3289 阅读 · 1 评论 -
简单案例学链表——C语言
#include <stdio.h>#include <stdlib.h>#include <malloc.h> typedef struct NODE{ //链表节点 int data ; struct NODE *Next;}Node; Node * CreatNode() { //创建 int n=1;...原创 2019-03-16 21:41:55 · 149 阅读 · 0 评论 -
Java中short x1=1;x1 = x1 +1不能编译,但是x1+=1却正常
先看一下问题第二行报错了,但是第三行正常。我们来看一下它编译后得到的字节码文件就知道答案了也就是说上面其实有一个隐式的强制类型转换原创 2021-03-05 15:45:39 · 340 阅读 · 0 评论 -
两个Integer的127用“==”比较结果是true,但是两个Integer的200用“==”比较结果是false?
public class Demo1 { public static void main(String[] args) { Integer a1 = -111; Integer a2 = -111; System.out.println(a1 == a2); Integer a3 = 127; Integer a4 = 127; System.out.println(a3 == a4);原创 2021-03-03 18:44:57 · 229 阅读 · 1 评论 -
maven命令解释
部分命令解释mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。mvn clean deploy依次执行了clean、resources、compile、testResources、原创 2022-03-19 16:31:25 · 435 阅读 · 0 评论 -
JVM参数详解
JVM参数调优,各个JVM启动参数的用法及其含义还有使用场景原创 2022-03-19 16:25:33 · 175 阅读 · 0 评论 -
JVM参数中的 -、-X、-XX、-D、-Javaagent:
一.JVM 启动参数规则:-、-X、-XX、-D参考:https://blog.csdn.net/liujianyangbj/article/details/115215680通过JVM运行一个java程序的时候,我们通常会用java -jar xxxx.jar 的命令,我们通常都会根据情况配置很多的运行参数。这些参数可以分为四类:1.以 - 开头的是标准参数,所有JVM都支持,并且向后兼容-verbose:gc -server2.以 -X开头的为非标准参数,绝大多数都是控制JVM的参数-X原创 2022-03-19 16:01:54 · 2201 阅读 · 0 评论 -
limit1000000,10优化以及分页写txt避免频繁full gc
1.问题导入在开发中偶的遇见一个问题,系统频繁full gc,触发线上报警。经过初步排查,是因为有大对象停留在内存中。并且该对象的产生是由于一个txt写入的接口造成的。2.问题分析定位到接口后经过分析,该接口经过一些查询条件最终筛选出一个id列表,并写入txt中,然后将txt上传至专门的文件存储节点。由于整个查询的过程比较耗时,所以系统进行了多线程异步处理,前端能够快速拿到结果,而由其他线程去进行查询写入。其大致过程如下图:3.解决方案...原创 2021-09-27 14:56:17 · 1009 阅读 · 0 评论 -
CPU缓存与内存屏障
一.CPU缓存三级缓存缓存同步协议二.运行时指令重排三.两个问题四.内存屏障原创 2021-05-05 19:25:22 · 85 阅读 · 0 评论 -
java与多线程相关概述
1.多线程的创建方式1.1继承Thread方式public class ThreadA extends Thread { @Override public void run() { System.out.println("---" + this.getName() + "---"); }}1.2实现Runabble方式public class ThreadB implements Runnable { @Override public v原创 2021-05-05 16:23:30 · 97 阅读 · 0 评论 -
计算Long类型的数字的二进制中的个数的高级方法
public class Main { public static int solution(long num) { int count = 0; while (num != 0) { if (num != (num >> 1) << 1) { count++; } num = num >> 1; }原创 2021-04-01 15:39:45 · 1005 阅读 · 1 评论 -
NIO编程简述
ChannelNIO与BIO的区别NIO与多线程结合的改进方案小结原创 2021-01-17 19:28:06 · 117 阅读 · 0 评论 -
java里的hash表
1.hash表的结构2.jdk1.8之前:哈希表底层使用数组+链表实现jdk1.8之后:哈希表底层使用数组+链表+红黑树实现当链表长度超过阈值8时,将链表转换为红黑树,极大地优化了哈希表的性能3.整个详细过程...原创 2021-01-17 10:03:29 · 102 阅读 · 0 评论 -
Iterator迭代器与其它循环之间的删除比较
使用iterator方法做集合的遍历删除不会出问题,但是使用增强foreach循环 以及 fori循环都有可能出现很多问题public class IteratorDemo { public static void main(String[] args) { //构建一个没有泛型的集合 ArrayList list = new ArrayList(); list.add(1); list.add(true); list.add("你好"); list.add(2); //直原创 2021-01-17 09:48:13 · 243 阅读 · 2 评论 -
StringBuilder与StringBuffer
1.均是为了解决String类长度不可变的问题所提供的类 他们里面的的API方法几乎一模一样,只是Sun公司提供出的时间和安全这些有所区别2.区别StringBufferJDK1.5时提供,线程不安全,异步,速度快StringBuilderJDK1.0时提供,线程安全,同步,速度慢...原创 2021-01-17 09:28:00 · 74 阅读 · 0 评论 -
java学习回顾与总结
网易云java架构师课程学习,回顾总结一.基础回顾1.java基础内容1.1 java语法1.2 方法的重写与重载,覆盖与隐藏1.3 java修饰词与访问权限1.4 继承1.5 封装1.6 多态1.7 super与this1.8 内存分配1.9 封装1.10 继承1.11 封装2.java中级内容二.重点掌握三.个人总结四.未来展望...原创 2020-11-25 18:58:33 · 559 阅读 · 4 评论