
Java知识
文章平均质量分 92
面试1000题呕心总结
BlackTurn
安静的搬砖人士~
(有些内容涉及个人信息、公司信息,所以设置为付费专栏)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
摘要与登记
10.17:k8s,netty,dubbo,设计模式。10.30:spring事务。11.13:spring事务。11.08:设计模式。原创 2024-11-15 08:27:36 · 507 阅读 · 0 评论 -
Leecode Hot25
①"eat", “tea”, “ate"是字母字母异位词,他们的共同特点是对它们排序后值相等都是"aet”,所以我们用一个Map<String, List>存放结果,map的key就是排序后的内容"aet",value就是[“eat”, “tea”, “ate”]②遍历字符串数组,对于每个字符串(如"tea"),将其转换为字符数组(如[“t”,“e”,“a”]),然后排序(如[“a”,“e”,“t”]),将排序后的字符数组转换回字符串(如"aet"),作为哈希表的键,往map里面放即可。原创 2021-11-02 15:41:36 · 754 阅读 · 0 评论 -
Leecode Hot50
【代码】Leecode Hot50。原创 2025-03-26 10:37:13 · 555 阅读 · 0 评论 -
Leecode Hot75
*查找第一个位置(左边界)^ ^left<=right所以进行第一次迭代:left=0 right=5 mid=0+(5-0)/2=2, nums[2]=7 (小于target,向右查找),所以移动left指针,left=mid + 1=3^ ^left<=right所以进行第二次迭代:left=3 right=5 mid=3+(5-3)/2=4, nums[4]=8 (大于等于target,向左查找),所以移动right指针,right = mid - 1 = 3left=3。原创 2021-11-02 15:43:39 · 298 阅读 · 0 评论 -
Leecode Hot100
【代码】Leecode Hot100。原创 2025-03-26 10:41:30 · 392 阅读 · 0 评论 -
Day00_场景题与自我介绍
有比较丰富的redis使用场景,还有就是之前项目上面强依赖于netty,所以我也研究过netty的源码。原创 2024-08-30 08:32:52 · 1231 阅读 · 0 评论 -
Day00_谷粒商城核心技术摘要
一开始商城首页使用Redis商城首页是一个非常热点的数据,redis数据过期后很容易大并发请求到数据库,容易发生缓存击穿要解决缓存击穿就需要加锁,而加本地锁不行,只能加分布式锁,但是加分布式锁又要考虑一堆分布式并发问题,于是就有了Redisson;用上Redisson后还要考虑缓存和数据库一致性问题,于是SpringCache应用而生。原创 2025-03-06 14:57:27 · 893 阅读 · 0 评论 -
Day01_JavaSE篇
一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口点。定义:用于解释说明程序的文字Java注释的作用:在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。原创 2021-08-24 14:38:32 · 703 阅读 · 0 评论 -
Day01_JavaSE篇(精炼版)
(main方法所在的类)基本数据类型sout打印出来的是数值, 引用数据类型sout打印出来的是对象的地址值其中八种基本数据类型:byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double,boolean子类有super(),如果父类没有空参构造方法就会编译报错内部类可以分为四种: 成员内部类、局部内部类、匿名内部类和静态内部类。(1)自定义一个编译器异常:自定义类 并继承 java.lang.Exception。原创 2021-09-14 17:55:20 · 392 阅读 · 0 评论 -
Day02_JUC
1.什么是指令重排?指令重排:在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。大多数现代微处理器都会采用将指令乱序执行,在条件允许的情况下,直接运行当前有能力立即执行的后续指令,避开获取下一条指令所需数据时造成的等待。通过乱序执行的技术,处理器可以大大提高执行效率。而这就是指令重排。int x=1;①int y=2;②x=x+5;③y=x*x;④//我们期望的执行顺序是①②③④,但可能执行的顺序会变成②①③④等//可不可能是 ④①②③?原创 2021-08-19 15:28:04 · 2479 阅读 · 0 评论 -
Day02_JUC(精炼版)
1.什么是指令重排?指令重排:在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。大多数现代微处理器都会采用将指令乱序执行,在条件允许的情况下,直接运行当前有能力立即执行的后续指令,避开获取下一条指令所需数据时造成的等待。通过乱序执行的技术,处理器可以大大提高执行效率。而这就是指令重排。4.volatile 针对指令重排做了啥?volatile中会加一道内存的屏障,这个内存屏障可以保证在这个屏障中的指令顺序。原创 2021-09-14 14:39:17 · 711 阅读 · 0 评论 -
Day04_JVM面试题(尚硅谷)
JVM中常见的两种Error栈内存溢出堆内存溢出。原创 2021-08-20 18:02:20 · 792 阅读 · 2 评论 -
Day04_JVM面试题(尚硅谷)精炼版
不再被使用到的空间。原创 2021-09-14 17:02:06 · 271 阅读 · 0 评论 -
Day04_JVM实战
可以看到,FullGC非常频繁,而且我们的方法区,占用了58729KB/1024= 57.8M空间,你JVM参数里面方法区设置的是60M,几乎把整个方法区空间占用,所以得出的结论是方法区空间设置过小,或者存在大量由于反射生成的代理类。这里面的OU是老年代已经使用的量,你每隔十分钟采样一次,然后比较这多组数据的OU的数值,如果这些值呈上涨趋势,则说明该Java程序的老年代内存已使用量在不断上涨,这意味着无法回收的对象在不断增加,因此很有可能存在内存泄漏。但GC频率比之前的1024M时要多了一些。原创 2024-09-18 10:49:43 · 1627 阅读 · 0 评论 -
Day06_操作系统篇
操作系统本质上是一个运行在计算机上的软件程序 ,用于管理计算机硬件和软件资源。举例:运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件。操作系统的内核(Kernel)是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。内核是连接应用程序和硬件的桥梁,决定着系统的性能和稳定性。原创 2021-08-22 15:05:00 · 1637 阅读 · 0 评论 -
Day07_计算机网络
在三次握手过程中,服务器发送 SYN-ACK 之后,收到客户端的 ACK 之前的 TCP 连接称为半连接(half-open connect)。此时服务器处于 SYN_RCVD 状态。当收到 ACK 后,服务器才能转入 ESTABLISHED 状态.SYN攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。原创 2021-09-03 19:49:30 · 815 阅读 · 0 评论 -
Day07_计算机网络(精炼版)
服务器发送 SYN-ACK 之后,收到客户端的 ACK 之前的 TCP 连接称为半连接(half-open connect)。SYN攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包;服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。原创 2021-09-14 17:56:58 · 569 阅读 · 0 评论 -
Day08_MySQL
索引是一种数据结构,可以帮助我们快速的进行数据的查找。视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。原创 2021-08-25 17:14:27 · 471 阅读 · 0 评论 -
Day09_Redis
Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据写入到硬盘上进行保存。原创 2021-08-26 16:18:59 · 746 阅读 · 0 评论 -
Day10_JavaWeb(已经提炼到JavaSE中)
那么我们保存用户状态呢?典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。原创 2021-09-03 20:24:25 · 325 阅读 · 1 评论 -
Day11_Mybatis篇
jdbcsql两个兼容Mybatis是一个优秀的持久层框架,它使得开发者只需要专注于SQL语句本身,而不用去关心注册驱动,创建connection等;而且SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;很好的与各种数据库兼容;能够与Spring很好的集成;答:虽然Mybatis解析Xml映射文件是按照顺序解析的,但是,被引用的B标签依然可以定义在任何地方,Mybatis都可以正确识别。原创 2021-08-25 13:28:12 · 238 阅读 · 0 评论 -
Day12_Spring
Spring 是个java企业级应用的开源开发框架。简化Java企业级应用开发。原创 2021-08-28 11:31:26 · 381 阅读 · 0 评论 -
Day12_Spring事务
在使用@Transactional注解声明事务时,有时我们想自定义回滚的异常,spring也是支持的。可以通过设置rollbackFor参数,来完成这个功能。@Slf4j@Service如果在执行上面这段代码,保存和更新数据时,程序报错了,抛了SqlException、DuplicateKeyException等异常。而BusinessException是我们自定义的异常,报错的异常不属于BusinessException,所以事务也不会回滚。原创 2024-09-24 16:05:20 · 841 阅读 · 0 评论 -
Day13_springboot
spring boot来简化spring应用开发,使用properties或yml文件来进行配置,去繁从简,just run就能创建一个独立的,产品级别的应用当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的程序中。SpringBoot而且内嵌了各种servlet容器, Tomcat、Jetty等 ,现在不再需要打成war包部署 到容器中,Spring Boot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。原创 2021-08-28 11:31:41 · 352 阅读 · 0 评论 -
Day14_Spring Cloud
微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,一个服务做一件事,服务之间互相协调、互相配合,拥有自己独立的数据库,并且能够被独立地部署到生产环境。spring cloud 是将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供服务注册中心–服务调用–服务网关—服务总线—服务配置—服务降级Zuul巧妙的整合了Eureka来实现面向服务的路由。API网关将自己注册到Eureka服务注册中心上,也会从注册中心获取所有服务以及它们的实例清单。原创 2021-08-28 16:57:34 · 1244 阅读 · 1 评论 -
Day14_Spring Cloud摘要
【代码】Day14_Spring Cloud摘要。原创 2021-11-02 15:31:10 · 224 阅读 · 1 评论 -
Day48_SpringSecurity
SpringSecurity能干什么?Spring Security本质上只是一堆 servlet 过滤器,Spring Security 能够完成用户认证和授权,还能防御一些常见的攻击(1)用户认证指的是:验证某个用户能否访问该系统。这就像回答问题你是谁?(2)用户授权指的是:验证某个用户是否有权限执行某个操作。比如某个接口是否运行调用,某个修改操作是否允许。它可以被认为是对用户可以做/读这个的问题的回答?(3)防御常见攻击:CSRF、HTTP Headers、HTTP Requests。原创 2024-09-26 14:56:59 · 1049 阅读 · 0 评论 -
Day15_设计模式
整个系统只能使用一个对象实例。(1)饿汉式单例模式的写法:线程安全(2)懒汉式单例模式的写法:非线程安全(3)双检锁单例模式的写法:线程安全类是public修饰的,而且类里面只有一个public,其余的都是private。如果一个对象不能处理该请求, 那么它会把相同的请求传给下一个,它们连成一条链,并沿着这条链传递该请求请求处理者(节点对象)只需关注自己感兴趣的请求进行处理即可,对于不感兴趣的请求,直接转发给下一级节点对象;链路结构灵活,可以通过改变链路结构动态地新增或删减责任;原创 2024-08-25 10:50:01 · 1460 阅读 · 0 评论 -
Day16_Zookeeper
ZAB协议,全称Zookeeper Atomic Broadcast(Zookeeper原子广播协议),是Zookeeper设计的一种支持崩溃恢复和原子广播的协议。集群间通过Zab协议(Zookeeper Atomic Broadcast)来保持数据的一致性;Zab协议包含两个阶段:Zab协议包含两个阶段:leader election阶段和Atomic Brodcast阶段(选举模式和广播模式)。原创 2024-08-25 10:32:41 · 1264 阅读 · 0 评论 -
Day17_Dubbo
SPI 是 Service Provider Interface,主要用于框架中,框架定义好接口,不同的使用者有不同的需求,因此需要有不同的实现,而 SPI 就通过定义一个特定的位置,Java SPI 约定在 Classpath 下的 META-INF/services/ 目录里创建一个以服务接口命名的文件,然后文件里面记录的是此 jar 包提供的具体实现类的全限定名。所以就可以通过接口找到对应的文件,获取具体的实现类然后加载即可,做到了灵活的替换具体的实现类。原创 2024-08-25 10:31:27 · 745 阅读 · 0 评论 -
Day18_Netty
Channel代表了一个网络连接,可以是客户端到服务器的连接,也可以是服务器之间的连接。每个Channel都由一个EventLoop负责处理,而一个EventLoop可以管理多个Channel。Channel中可以执行I/O操作,如读取、写入、连接和绑定等。是一个由一系列组成的处理链。如进行数据编解码、业务逻辑处理等。将这些串联起来,形成一个处理链。每个Channel都有一个关联的,用于处理入站和出站的数据。编解码器(Codec)是负责将数据在不同表示形式之间进行转换的组件。原创 2024-08-25 10:29:43 · 1122 阅读 · 0 评论 -
Day19_RabbitMQ
RabbitMQ是一款开源的消息中间件,可以用它来:应用解耦、异步提速、削峰填谷。1.应用解耦2.异步提速3.削峰填谷在非cluster模式下,元数据主要分为Queue元数据(queue名字和属性 等)、Exchange元数据(exchange名字、类型和属性等)、Binding元数据 (存放路由关系的查找表)、Vhost元数据(vhost范围内针对前三者的名字空 间约束和安全属性设置)。在cluster模式下,还包括cluster中node位置信息和node关系信息。原创 2021-08-25 23:28:11 · 317 阅读 · 1 评论 -
Day20_Elasticsearch
Elasticsearch是一个基于Lucene的搜索引擎。具有良好的全文搜索功能。Lucene 是apache的一个开放源代码的全文检索引擎工具包。原创 2021-10-02 17:54:48 · 232 阅读 · 0 评论 -
Day21_Docker
Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像。Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,作为操作系统的独立进程运行,高效轻量并保证部署在任何环境中的软件都能始终如一地运行。孤儿卷是未与任何容器关联的卷。原创 2021-08-29 10:22:30 · 252 阅读 · 0 评论 -
Day22_K8S
项目。原创 2024-08-25 11:46:10 · 522 阅读 · 0 评论 -
Day23_Nginx
Nginx ,在我眼里它就是可以充当服务器,比如它可以作为 http server,可以作为反向代理服务器,可以实现负载均衡作为 http server反向代理服务器实现负载均衡(可实现http服务器、反向代理、负载均衡)Server {listen 80;return 444;这里,服务器名被保留为一个空字符串,它将在没有“主机”头字段的情况下匹配请求,而一个特殊的Nginx的非标准代码444被返回,从而终止连接。原创 2021-08-29 19:06:34 · 191 阅读 · 0 评论 -
Day24—Git
Git操作本地仓库、Git操作远程仓库、Git创建合并删除分支、Git操作标签。2.使用TortoiseGit相当于使用图形化界面的方式。1.下载Git然后使用命令的方式操作。3.使用Idea集成Git。原创 2021-10-04 11:42:40 · 122 阅读 · 0 评论 -
Day25_Linux篇
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。load average: 如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。在命令模式下,通过使用命令对文件进行常规的编辑操作,例如:复制、粘贴、删除、定位、翻页 等等。末行模式是vim编辑器的出口,要退出vim,必须要在末行模式下。在末行模式下,执行 退出文件、保存并退出文件 等操作。(系统比较慢,要么是cpu导致,要么是磁盘I/O导致)打开文件首先进入命令模式,是使用vim编辑器的入口。【find找什么样的文件】原创 2021-08-24 20:56:26 · 361 阅读 · 2 评论 -
Day26_数据结构与算法
等分切分是切分了logn次,最坏的情况下切分n次,所以切分时时间复杂度是O(nlogn)或O(n^2),平均情况是O(nlogn)归并排序:尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止,然后进行归并。快速排序中首先设定一个分界值,小于分界值的数据放到数组的左边,将大于或等于分界值的数据放到到数组右边。但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以希尔排序是不稳定的。(看这个就行了,别看那边的笔记)原创 2021-09-09 09:49:57 · 204 阅读 · 0 评论 -
Day27_数据结构与算法
第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator接口的子类型(需要重写compare方法实现元素的比较),相当于一个临时定义的排序规则,其实就是通过接口注入比较元素大小的算法,也是对回调模式的应用(Java中对函数式编程的支持)。可惜的是,这种算法是无法实现的。41位时间戳:41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截 )得到的值,这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的。原创 2021-09-03 20:24:08 · 329 阅读 · 0 评论