【2024杂记】谦卑,杀死骄傲
482cf1b093465b79eb3d9373149899955c4e161f7f5be90ce495a93eb83f41eff28f117eb845804395e75040d60e09d9790fde2febe1268e32102fcdd59838be41568be69d98318d9f75507ad775d46526cc9091c2b34bd118666549e0de3266207bb23e921f0c5aaff68e83efd0749376a19478c6f9acac73f4cb2b22933f724128b0a1d4029dfe3e8e9c5c6653ed19987de28b49bbeb5b7107bca6793d627dcef79ad67eb28ca349e43e30400fd7c38473715be16c4cb25835f2699692db7b27b85b3743b691e320c224826226fa0c7693cda0a3d37c1404a893489f7d1684170a70b1ef80a8689080979755272726a7675c871652a81b7 ...
2023年度总结&展望
d5761eba7b00ec46cfabf0d4ac5666dc641160d72979f069c8822a5a16518f0d4ef0f1274adeb00548f1f6fc36aab83c0335c6ddf9c7aac9bb25da79bd3f0aa5b5406face01dc2e6d29ef6f7249f213b8a1271983dec4681429c089c4baed8b1d632d2413edf8b93e71bad84ce31287437153fcbac3712331bc2a98230698744dea0a17070ade4eb9a3347fe082b17e5c366650a11ce6e77f603251b904895d98bc20cdd63478723f1a47d8b1644399f010256043443df9312385affb2d9e24894c8dd18c3025fc309b2fddde25ed30bc18b40bbd19cb713116ba707bd350aec154c7935cdfd557b5e6a0ac23d02d7c6bff6974a8db6dae90 ...
IDEA相关配置与使用技巧
IDEA常用快捷键
Alt + Enter : 显示波浪线提示
Alt + Insert : 快速生成,插入构造之类的方法
Ctrl + i : 实现接口方法
Ctrl + o : 覆写父类方法
双击Shift:全局搜索
其他使用问题/技巧IDEA将普通项目转化为maven项目链接:IDEA如何把maven添加到普通java项目中_java 普通项目 加pom-CSDN博客
导入lombok注解插件链接:便捷开发,解放双手,lombok插件 (zhihu.com)
————在学习过程中,不断补充、完善————
常见限流算法,从原理到实现
一点背景在当今数字化时代,互联网服务的普及使得大量的请求不断涌入系统,这使得有效的流量控制和资源管理成为至关重要的挑战。为了维护系统的可用性、稳定性以及提供更好的用户体验,限流算法应运而生。
在这个背景下,限流算法成为了互联网基础设施中的一项关键工具。这些算法的设计旨在:控制请求的访问速率,从而平衡系统的负载,防止过度请求引发的性能问题。限流不仅仅适用于服务器端,还在分布式系统、微服务架构等多个领域发挥着重要作用。例如Kafka作为一种消息中间件,在处理大量数据和消息时,通常需要实施限流策略以保护系统免受过载的影响。
本文就来挖掘一些常见的限流算法,了解这些算法的原理、如何实现、分析各自的优劣以及适应的场景。
常见限流算法常见的限流算法有:计数器固定窗口、滑动窗口、漏斗以及令牌桶算法。下面对这几种算法进行分别介绍,并给出具体的实现。
计数器固定窗口算法最基础、最简单的限流方式
原理:对一段固定时间窗口内的请求进行计数,若请求数超过了阈值,则舍弃;否则接受并递增计数器。当时间窗口结束时,重置计数器。
示意图:
代码实现-Java:
123456789101112131415161718 ...
Java基础补一补
语法基础
abstract抽象方法,—虚函数的实现原理;
byte的取值范围,— [-128, 127]
final关键字的作用,—修饰变量,修饰方法(不能被子类重写),修饰类(不能被继承)
单精度浮点数在初始化的时候,要加后缀f,否则默认为double类型
接口interface和抽象类abstract class 有什么区别?—接口是一种特殊的抽象类,接口中的所有方法默认都是抽象的,所有的字段都是静态常量。
总的来说,如果你想要定义一种契约,规定类应该提供哪些方法,那么应该使用接口。如果你想要提供一些通用的实现,并且希望子类可以选择性地覆盖这些实现,那么可以使用抽象类。
java函数中参数为对象时,其实是对象引用的值拷贝,可以通过.运算符来改变对象,但无法改变外部的对象引用的值。
12345678910111213public class Main { public static void changeName(Person person) { //person = new Person("John Doe"); // ...
解析Java多线程编程
在Java中如何使用多线程,在使用的过程中又有哪些需要注意的事项呢?本文带着学习的目的,去探索、解析Java中的多线程编程,感兴趣的话就一起来看看吧。
创建线程的方式一般来说,创建线程的方式主要有两种:
直接继承Thread类,重写run()方法,并在线程对象上调用start()方法来开启线程;
1234567891011121314151617public class TestThread1 extends Thread { @Override public void run() { for (int i = 0; i < 20; ++i) { System.out.println("线程1 --- " + i); } } public static void main(String[] args) { TestThread1 testThread1 = new TestThread1(); testThread1. ...
JVM入门学习记录
在Java的面试题中,JVM也经常会被问到,例如下面是一些经典的题目:
请你谈谈对JVM的理解?java8虚拟机和之前的变化是什么?
什么是OOM,什么是栈溢出StackOverFlowError,怎么分析?
JVM的常用调优参数有哪些?
内存快照如何获取,怎么分析Dump文件?
谈谈JVM中的类加载器?
等等。其实这些问题在理解JVM后也都比较基础,那么就带着问题来揭开JVM的面纱吧。
JVM体系结构正如下图所示,是一个很简单的结构图,没有把复杂的功能显示出来,而主要揭示了JVM的组成部分。
JVM本身位于操作系统之上,是用C++写的。目的是简化java语言,在jvm中隐蔽了指针概念,以及内存管理等功能。并基于垃圾回收(GC)机制来自动管理内存。Java栈、本地方法栈以及程序计数器中不可能产生“垃圾”,“垃圾”在方法区(特殊堆区)和堆区产生,故JVM的调优也主要是对堆的调优。
类加载器来思考一个问题,new一个类的时候,java是怎么生成这个实例对象的呢?
这里以Car类为例:首先编写Car类的.java文件,通过javac编译为.class文件,然后由类加载器进行加载。
类加 ...