
java学习
文章平均质量分 75
LengDanRan
生命在于运动,生活在于平衡。
小主致力学习,仍在不断进步。
欢迎关注个人公众号【然Coder】
Java资源分享+技术文章,持续更新推送
如有问题,欢迎【然Coder】私信哦
展开
-
DB-API——低代码数据库数据接口系统
DB-API——低代码数据库数据接口系统当前只支持MySQL数据库项目简介https://gitee.com/lengdanran/db-api可以通过只编写对应的SQL等数据查询语句(当前只支持MySQL), 即可生成对应数据接口API,用户可以通过API访问得到对应的数据线上体验地址:http://121.4.195.203/ 用户名:admin 密码:admin项目截图技术选型后端——dev分支Java 12MySQLSpring Boot 2.3.7mybat原创 2022-02-18 14:48:08 · 5709 阅读 · 0 评论 -
Java 手写一个线程池 - SimpleExecutor
Java 手写一个线程池 - SimpleExecutorb站视频讲解:https://www.bilibili.com/video/BV1jU4y1K7Tr/https://www.bilibili.com/video/BV1rF411z76U/什么是线程池 ?线程池可以简单理解为一个加工厂,里面有一定数量的加工机器。该加工厂可以执行各种加工任务,加工厂里面会有一定数量的加工机器一直运作,剩余的机器按照需要执行的任务量来动态的启动和关闭。这里的加工厂就是一个线程池,加工厂里面的机器就可以原创 2022-01-04 13:26:14 · 476 阅读 · 0 评论 -
Java线程的内存不可见性
内存不可见性所谓内存不可见性,就是线程对某个共享变量在线程自己的缓冲中存在副本的时候对主内存中共享变量的值是不可见的,看不见主存中的值。如图是一个2CPU的架构系统,每个CPU都有自己的控制器和运算器,每个CPU也有自己的一级缓存,在图中的架构中,这两个CPU核心共享一个二级缓存。假设某个时刻,这两个CPU核心分别运行着两个线程A和线程B,都要去同时访问主存中的一个共享变量x线程操作一个共享变量时,它首先从主存中拉取并复制一份变量放置到自己的工作内存中,然后在工作内存中对变量进行修改,处理完之后原创 2021-12-01 14:41:49 · 746 阅读 · 1 评论 -
ThreadLocal基本使用与原理
ThreadLocalThreadLocal可以为不同的线程提供不同变量副本,线程访问threadlocal变量实际上是访问的线程本地的内存中数据副本,线程之间的treadlocal变量互不影响。基本使用Examplepublic class ThreadLocalDemo { private static ThreadLocal<String> local = new ThreadLocal<>(); public static void main(St原创 2021-12-01 12:59:24 · 468 阅读 · 0 评论 -
Java多线程-wait-notify-notifyAll-sleep-join-yield-中断
1.wait()函数当一个线程调用共享变量的wait()方法时,该调用线程会被阻塞挂起,并且释放共享变量的监视器锁。当发生如下几种情况,才会返回:其他的线程调用该共享对象的notify()/notifyAll()方法,被阻塞的线程会被重新唤醒,进入可运行状态。其他线程调用了被阻塞线程上的interrupt()方法,则被阻塞的线程会抛出InterruptException异常放回。如果一个线程在没有获取到共享对象上的监视器锁,就立即调用共享对象上的wait()方法,线程会抛出IllegalMo原创 2021-11-28 16:32:12 · 377 阅读 · 0 评论 -
一致性hash算法讲解——Java实现
一致性hash算法讲解hashhash(哈希):即是将一个大的集合中的元素映射到一个特定大小的集合中的操作。普通hash的弊端普通的hash一般采用求余的方式得到映射关系,在java中hashmap中的hash索引的策略就是hashcode % table.size()-->实际为 : hashcode & (table.size() - 1),但是这个是在节点的数量一定的情况下,在redis中的,redis主要是做缓存用的,如果一个redis集群需要增加或者删除一个节点,那么采用这种原创 2021-10-22 15:20:41 · 1126 阅读 · 1 评论 -
Centos 7安装Nginx
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。参考:https://zhuanlan.zhihu.com/p/83890573下载http://nginx.org/en/download.htmlhttp://nginx.org/download/nginx-1.21.3.tar.gzNgin原创 2021-10-22 15:11:11 · 1234 阅读 · 0 评论 -
Java手写一个RPC框架(Spring-boot-starter)——基于Netty、Zookeeper
Java基于Netty/Zookeeper实现的RPC框架基于Spring Boot Starter的小型RPC框架。编写这个RPC框架并不是为了重复造轮子,而是出于学习的目的,通过手写一款RPC框架来达到知识的学习和应用目的。简易的RPC框架(danran-rpc),底层使用Netty进行网络通信,使用Zookeeper为注册中心。该项目可以Maven打包直接加入其他项目运行。另外一个仓库:https://gitee.com/lengdanran/danran-rpc-debughttps://原创 2021-08-26 16:45:18 · 1204 阅读 · 0 评论 -
CentOS 7 配置JDK和Maven和MySQL
配置JDK和Maven和MySQL示例项目使用Maven作为构建工具,所以需要配置JDK以及Maven环境。安装JDKhttps://repo.huaweicloud.com/java/jdkhttps://repo.huaweicloud.com/java/jdk/12.0.1+12/jdk-12.0.1_linux-x64_bin.tar.gz[root@9db20e678bb5 ~]# wget https://repo.huaweicloud.com/java/jdk/12.0.1+1原创 2021-08-23 11:18:59 · 296 阅读 · 0 评论 -
手写实现HashMap——源码梳理
Java手写实现HashMap——替换红黑树由于我之前封装实现过一棵红黑树 RBTree,在此次实现 HashMap中,我将会将我实现的红黑树整合到 HashMap中。算是自己的一个小小的尝试吧。哈希哈希,又叫hash, 指的是把一个任意长度的输入转为一个固定长度的输出。这是一种压缩映射,由于是将一个任意长度的输入转为一个固定长度的输出,所以,输入域大于输出域,那么就可能出现两个不同的输入会出现相同的输出。这就叫做哈希冲突。hash冲突:可以简单的理解为,将10个及以上的苹果放进9个格子中原创 2020-11-07 17:51:05 · 635 阅读 · 1 评论 -
CountDownLatch的简单使用——Java并发编程
Java并发编程CountDownLatch的使用允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。简述CountDownLatch用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果需要重置计数的版本,请考虑使用CyclicBarrier 。CountDownLatch是一种通用的同步工具,可用于多种用途。 一个原创 2020-09-29 21:25:34 · 121 阅读 · 0 评论 -
Spring/MySQL数据库简单图书系统——(课程设计)
基于Spring Boot的简单图书系统这个是一个数据库课程的课程设计,设计的十分简单。不足之处,还请见谅。开发背景数据库技术和Internet的飞速发展,使它们已经成为现代信息技术的重要组成部分,是现在计算机信息系统和计算机应用系统的基础和核心。对于任何一个企业来说,数据是企业重要的资产,如何有效利用这些数据,对于企业发展起着极其重要的作用。随着我国市场经济的迅速发展和人们生活水平的不断提高,图书馆藏书的树木逐渐增大,这也挑战了图书管理方面的技术,以前的人工管理方式已经不再适应现在的环境,原创 2020-09-28 19:24:57 · 1468 阅读 · 0 评论 -
二叉树的四种遍历:先序遍历、中序遍历、后序遍历、层次遍历
树结构public class Tree { Node root; public Tree(Node node) { this.root = node; } ... private static class Node { Node left; Node right; int data; Node(int data) { this.data = data;原创 2020-08-30 16:03:04 · 319 阅读 · 0 评论 -
JVM的运行时数据区域
什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。换句话说,就是如果我们能够设计一个编译器将“中文程序”翻译成字节码,原创 2020-08-26 18:23:57 · 248 阅读 · 0 评论 -
ArrayList的扩容机制和核心底层数据结构
ArrayList底层数据结构transient Object[] elementData; // 用于存储数据的buffer数组在 ArrayList集合的底层是由一个可变的动态 Object[]数组组成的,由于他是由数组构成的,所以该集合类框架对于随机访问的效率很高,时间复杂度为 O(1)。 public boolean add(E e) { modCount++;// 结构更改次数 add(e, elementData, size);// 套娃原创 2020-08-01 12:22:21 · 828 阅读 · 0 评论 -
Java——继承
继承本文首发于个人博客——然Coder在之前讨论过接口这种面向对象的特性,这里我们来看看另一个面向对象的特性——继承。继承,是在现有的类的基础上派生出另一个类,他可以从现有类中继承得到(或者叫重用)方法,并且还可以再原有的基础上进行适当扩展方法和域。父类与子类我们定义一个 Employee类,将其作为公司中所有员工的父类:该类是其他所有员工的基础信息类,不同员工有不同的属性和行为。public class Employee { public String ID; publ原创 2020-07-27 11:59:34 · 284 阅读 · 0 评论 -
Java——接口,这篇文章就可以了
java是一门纯面向对象的编程语言,而接口就是面向对象的一个突出的关键特性:它可以在不具体实现时,指定特定的功能和特性。本文首发于个人博客——然Coder接口的定义接口是服务者与被服务对象之间约定的一种机制。(制定规则)其实可以这样理解:接口类是一个服务商公司,该公司可以定义它的可以对外提供的服务,但是这些服务本身该公司可能并不需要实现,可以交给外包公司来实现,当用户需要从该服务商获得相应的服务时,服务商便根据用户的需求,为用户提供服务,具体的服务由特定的外包公司负责。另外,同一个服务针对不.原创 2020-07-25 19:57:58 · 340 阅读 · 0 评论 -
Java的基本数据类型和字符串(String API)
1.1 基本数据类型java是一门纯面向对象的编程语言,但是并不是所有的值都是对象,在Java中还是存在着基本数据类型的。1.1.1 有符号整型有符号整型数据表示没有小数部分的整型数据,但是有正负值之分。在Java中有4种有符号整型数据。类型存储空间范围byte1字节-128~127short2字节-32768~32767int4字节-2147483648~-2147483647long8字节-9223372036854775808~922原创 2020-07-16 19:34:02 · 610 阅读 · 0 评论 -
Mybatis初探——真香啊~~
MyBatis简介MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old/ Java Objects,普通老式 Java 对象)为数据库中的记录。我的第一个Mybatis程序安装入门传统构建要使用 MyBatis, 只需将 mybatis-x.x.x.jar原创 2020-05-27 18:56:41 · 591 阅读 · 0 评论 -
IDEA使用Mybatis连接数据库时报Error:java 错误:不支持发行版本5解决方案
Error:java 错误:不支持发行版本5解决方案第一步第二步其他可以检查一下项目的配置原创 2020-05-11 21:46:11 · 1897 阅读 · 0 评论 -
一张图搞定JDK动态代理实现原理——手绘实现动态代理Demo
动态代理模式说到动态代理模式,就一定要提到代理模式。代理模式类似于实际生活中的中介机构,可以给用户提供更好的服务,而不是直接与服务提供方交互。这种模式主要的目的有两个:1.保护目标对象2.增强目标对象动态与静态代理模式静态代理模式:源代码中需要声明代理类,单一的一对一的代理,可扩展性比较低。当需要代理的目标对象数量多的时候,这种模式的成本较高。动态代理模式:源代码中无需声明代理类,它可...原创 2020-04-18 17:18:06 · 841 阅读 · 0 评论 -
原型模式的深浅克隆区别
原型模式在日常生活中,很多地方都会使用到复制粘贴的经典CV操作,感觉不要太舒适。其实在开发中,也有这种的形式,这就是原型模式,就是给出一个想要进行复制的对象,然后根据这个对象创建一个他的副本,以供我们的开发需要。应用场景其实之前我也想过,不就是个创建对象吗?一行代码的事,都不叫事儿!但是请看:像这些类的创建和初始化所要消耗的资源多,并且过程十分繁琐,这对本身就身心已经疲惫不堪的开发者更是一...原创 2020-04-17 14:11:49 · 755 阅读 · 0 评论