Java
文章平均质量分 85
popofzk
准研究生,方向:机器学习 深度学习 自然语言处理
展开
-
《并发编程的艺术》小结
这里写目录标题一、并发编程的挑战1.1 上下文切换如何减少上下文的切换呢?1.2 死锁死锁的排查避免死锁的几个方法1.3 资源限制的挑战二、Java并发机制的底层实现原理2.1 volatile的应用volatile的实现原理2.2 Synchronized的实现原理Synchronized的底层指令Synchronize锁的是啥?Java对象头(一) 对象头1. Mark Word☆☆☆锁升级过程2. 指向类的指针3. 数组长度(二)实例数据(三)对齐填充字节2.3 原子操作的实现原理2个机制实现原子性无原创 2022-03-10 21:35:04 · 544 阅读 · 0 评论 -
Spring IOC、AOP的理解
这里写目录标题前言IOCAOP代理(照搬JavaGuide)静态代理动态代理JDK 动态代理机制JDK 动态代理类使用步骤代码示例CGLIB 动态代理机制CGLIB 动态代理类使用步骤代码示例JDK 动态代理和 CGLIB 动态代理对比静态代理和动态代理的对比前言用了这么久的Springboot,一直没有对IOC、AOP这两个核心知识作总结,还依稀记得刚入门学习Springboot的时候完全看不懂这两个概念在说啥,因为没有怎么实践,没有一个具体的印象。下面我结合一些日常开发实践来总结一二。IOCIO原创 2022-03-10 17:36:53 · 1376 阅读 · 0 评论 -
MySQL底层采用B+ tree的原因探究
MySQL索引底层采用B+ tree的原因哈希索引https://www.cs.usfca.edu/~galles/visualization/ClosedHash.html通过 哈希 函数计算和类似取余运算,可以将元素插入到对应的bucket中,find的过程是o(1)时间复杂度,那find速度这么快,为啥Mysql底层不用呢?因为Mysql的查询涉及大量的范围查询,Hash索引这个无序集合,是不支持范围查询的,再比如mysql的排序查询(order by),而哈希是无序的,也无法支持!就像我们原创 2022-01-26 22:45:11 · 1162 阅读 · 0 评论 -
函数式编程(Lambda && Stream)
函数式编程(Lambda && Stream)目录函数式编程(Lambda && Stream)以sort引入几个官方提供的接口PredicateFunctionConsumerSupplier流Stream创建中间操作流式debugfiltermapdistinctsortedflatMaplimitskip终结操作foreachmax&mincollectanyMatchallMatchnoneMatchfindAnyfindFirstreduce归并注意事项O原创 2021-11-28 00:09:51 · 334 阅读 · 0 评论 -
Java方法传参到底传的是什么?值传递&引用传递辨析
引言本文主要讲解Java方法传参、值传递、引用传递,其中涉及到JVM的相关知识,最近弥补了这一块,发现理解很多问题都变得豁然开朗了,知其所以然!(JVM在我其他博客中有详细辨析)在刷力扣题目时,遇到这样一个问题,当我把一个变量传进dfs方法后,无论递归中如何对该变量赋值,最终都没有生效,今来探究其原因,说到底还是Java值传递、引用传递的问题:方法传参Java的方法传值,有基本数据类型以及引用类型两种:int num = 10; //基本类型String str = "hello"; /原创 2021-11-07 13:24:36 · 651 阅读 · 0 评论 -
深入理解JVM
概述:JVM类加载机制深入剖析JVM内存管理JVM垃圾回收机制JVM故障诊断性能调优目录一、JVM类加载机制1.1 Java运行时一个类是什么时候被加载的?1.2 JVM一个类的加载过程?1.3一个类被初始化的过程?☆☆☆1.4 继承时父子类的初始化顺序是怎样的?1.5 究竟什么是类加载器?1.6 JVM有哪些类加载器?1.7 JVM中不同的类加载器加载哪些文件?1.8 JVM三层类加载器之间的关系是继承吗?1.9 JVM类加载的双亲委派模型 ☆☆☆1.10 JDK为什么要设计双亲委派模型,有什原创 2021-11-06 17:47:50 · 127 阅读 · 0 评论 -
弄懂服务端、客户端【手写一个socket聊天室】
预备知识常见架构:C/S架构:Client/Server(客户端/服务器)结构B/S架构:Browser/Server(浏览器/服务器)结构服务端和客户端 简单地说:一般客户端负责和用户的交互,也就是屏幕显示(UI/UE),服务端负责数据存储,也就是你的用户数据,而计算能力,客户端和服务端一般各负责一部分。 微信、qq这种聊天功原创 2021-08-02 16:33:41 · 402 阅读 · 0 评论 -
初探线程池【手写线程池!阿里弃用之辨析】
线程池什么是线程池 线程池和数据库连接池非常类似,可以统一管理和维护线程,减少没有必要的开销。为什么要使用线程池 因为频繁的开启线程或者停止线程,线程需要从新被 cpu 从就绪到运行状态调度,需要发生cpu 的上下文切换,效率非常低。当线程从run中sleep后,会到达阻塞状态,这时候要想再回到run状态,得先就绪再到run状原创 2021-06-30 16:06:04 · 200 阅读 · 0 评论 -
深入Java中的字符串(equals && ==)
目录预备知识equals、==常量池介绍案例1案例2案例3总结预备知识equals、== 首先明确一点,==比较的是引用,equals比较的是内容,在类库没有定义equals方法重写的情况下,自然继承的是Object类的equals方法,上源码: public boolean equals(Object obj) { return (this == obj); } &原创 2021-06-29 13:47:59 · 143 阅读 · 0 评论 -
多线程中的wait与sleep,synchronize与lock有啥子区别?生产消费模型是啥?死锁怎么解决?
目录wait与sleepsynchronized与locksynchronizedlocksynchronized 与 lock区别生产消费模型synchronized实现此处存在的问题lock锁实现Condition死锁为什么需要锁?锁的工作模式:解决死锁的办法wait与sleep来自不同的类首先,wait和sleep都不是一个类下的方法:wait来自:Objectsleep来自:Thread因为java中所有的类都是继承自object的,所以所有类都可以调用wait方法,这是一个fi原创 2021-06-27 15:03:18 · 379 阅读 · 0 评论 -
Springboot项目Docker部署,无需重做容器,随时更新配置路径【容器外挂载】
利用docker对一个Springboot打包时会遇到要及时更改相关数据库或者外部接口的ip及port,如果每次都进到容器内部修改,那一定非常麻烦,这里我想到了两种解决方案,并最终使用了后者。两种方法类似,无论哪种,都必须经过外挂载的步骤,也就是要把配置文件放到一个和宿主机映射的目录下:如图,这里采用的是docker-compose.yaml容器编排方式,不赘述:将配置文件放在宿主机目录的config下,代码中写到“/原创 2021-06-26 21:56:13 · 639 阅读 · 0 评论 -
手写简易二维码
引言 其实二维码就是由URL字符串转换得到的,那么手写一个最简单的字符与图像的转换如何实现呢?下面请看字符串转二维码import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import javax.swing.JFrame;public class BinaryString extends JFra原创 2021-06-13 23:11:19 · 2260 阅读 · 0 评论 -
实验室学姐问我可见性的细节?让我不知所措【多线程中的可见性原理初探】
之前也只是知道有可见性这么回事,但是原理不算很明白!今天把多线程的可见性原理梳理一下,原理弄懂,而非死记硬背! 先看多线程例子:public class Demo { public static void main(String[] args) { //1. 启动线程 MyThread t = n原创 2021-06-13 20:24:28 · 63 阅读 · 0 评论 -
面试复习2:【计算机基础:二进制+字节+移位运算】
二进制提到二进制,为啥计算机底层数据存储都采用二进制呢?计算机内部事由IC电子部件构成,IC的一个引脚,只能表示两个状态(《程序是怎样跑起来的》第二章)字节二进制的数一般是8位、16、32,8位的二进制数被称为一个字节,字节是最基本的信息计量单位,而位是最小单位,字节是基本单位,内存和磁盘都是用字节来储存和读写数据,使用位单位则无法读写数据,因此,字节是基本单位位bitbit位:位是计算机存储的最小单位简称为b也称为比特(bit)例如1b,2b,3bbyte字节:byte字节是计算机用于计量存原创 2021-06-11 12:44:27 · 383 阅读 · 1 评论 -
面试复习1:【Java:OOP+继承+接口】
OOP继承继承的内容子类继承到父类的哪些东西?所有子类以及子类对象可以调用到继承的哪些属性和方法?要看 父类的属性、方法的具体访问修饰符:访问修饰符访问范围public项目里private类里protected包下,不同包的子类缺省同包下那么对于子类来说,同包下: 只有private不能调用不同包下: public,protected 可以调用protected 受保护的,子类不能访问父类的私有字段。不过有时候希望限制父原创 2021-05-27 16:57:23 · 60 阅读 · 2 评论 -
Docker 集成多容器镜像实 践:Jdk8,py37,Mysql,es,采用Dockfile+docker-compose编排
前言 对于一个较大的项目(Jdk8+py37+Mysql+es),如果仅仅使用一个容器做部署,安装过程可能会极其复杂,并且并不利于后期各模块的更新,为了方便他人,也为了快速生成镜像部署,对于多服务的项目,我采用了Dock-compose技术生成多容器,并进行编排,第一次做,耗时3天成功,有不少经验分享于此,便于以后快速部署环境!1. Mysql &n原创 2021-01-29 22:50:01 · 757 阅读 · 0 评论 -
【Springboot】用户权限框架:Shiro
1、Shiro简介1.1、Shiro 是什么?Apache Shiro 是 Java 的一个安全(权限)框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以完成:认证、授权、加密、会话管理、与Web 集成、缓存等。下载地址官网:http://shiro.apache.org/github:https://github.com/apache/shiro1.2、有哪些功能?Auth原创 2021-01-29 21:51:16 · 439 阅读 · 0 评论 -
Mybatis-plus:大大简化Mybatis,无须繁琐的CRUD
MyBatisPlus概述需要的基础:把我的MyBatis、Spring、SpringMVC就可以学习这个了! 为什么要学习它呢?MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成! JPA 、 tk-mapper、MyBatisPlus偷懒的!简介是什么? MyBatis 本来就是简化 JDBC 操作的! 官网:https://mp.baomidou.com/ MyBatis Plus,简化 MyBatis !快速搭建导入依赖<!-- mybatis原创 2021-01-24 16:44:17 · 815 阅读 · 0 评论 -
ElasticSearch 7.8.1教程(from b站狂神)+JD商城仿站
ElasticSearch安装elasticsearch官网:elastic.cohttps://www.elastic.co/cn/downloads/elasticsearch官网下载巨慢,翻墙下载目录启动,访问9200:访问9200接口:安装elasticsearch-head:git clone git://github.com/mobz/elasticsearch-head.gitcd elasticsearch-headnpm installnpm run sta原创 2020-09-02 21:11:23 · 1404 阅读 · 2 评论 -
Java核心技术4&5章(对象、类、继承)读书笔记
Java核心技术 读书笔记:第四章 对象与类对象的理解:每个对象包含对用户公开的特定功能部分和隐藏的实现部分。从根本上来说,只要对象能够满足要求,就不必关心其功能到底如何实现!此外,每个对象都保存着描述当前状况的信息——对象的状态。对象状态的改变必须通过调用方法实现(如果不经过调用就可以改变对象状态,只能说明破坏了封装性!)对象引用:对象的创建通过对象提前写好的构造函数(无参 有参),new+构造才能够创建出一个新的对象Date s = new Date()Date s = k实际上,k原创 2020-08-27 23:01:54 · 267 阅读 · 0 评论