总结
Java抽象类和接口的区别
抽象类和接口都不能直接实例化。
抽象类可以有main方法,接口则不可以有。
抽象类可以有构造方法,接口则不可以有。
一个类可以通过implements实现多个接口,但是只能通过extends继承一个抽象类。
抽象类的成员变量可以是变量和常量;接口的成员变量只能是常量,默认修饰符是:public static final
抽象类的成员方法可以是抽象方法(不能用private和static和final修饰)和非抽象方法;
接口的成员方法在 JDK 1.7 时只能定义抽象方法,JDK 1.8 时可以定义默认方法和静态方法,JDK 1.9时可以定义私有方法。默认修饰符是:public
上转型对象和下转型对象推荐文章:Java对象类型向上转型和向下转型
上转型:父类引用指向子类对象
父类引用变量可以访问子类中属于父类的属性和方法(如果子类重写了父类的方法,则调用子类的方法),但是不能访问子类独有的属性和方法。
作用:减少重复的代码,对象实例化的时候可以根据不同需求实例化不同的对象。
下转型:子类引用指向父类对象
只有当这个父类对象原本就是子 ...
Daily Support
Notepad++行前行尾添加字符:
按Ctrl + H 打开替换窗口
查找模式选择正则表达式
输入 ^ 行前添加字符串
输入 $ 行尾添加字符串
删除包含某字符串的行:
按Ctrl + H 打开替换窗口
查找模式选择正则表达式
查找目标输入.*DROP.*,DROP是想替换的关键词
全部替换
删除空白行:
按Ctrl + H 打开替换窗口
查找模式选择正则表达式
查找目标输入^\s
全部替换
下划线转驼峰:
按Ctrl + H 打开替换窗口
查找模式选择正则表达式
查找目标输入_([a-z])
替换为\U\1\E
全部替换
SQL操作前的判断123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#创建表前的判断USE [db_test]GOIF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE type = 'U' AND name = 'table_name') ...
Loma 281 Module1
Module 1Lession 1Types of Risk【风险种类】Risk is the possibility of an unexpected result.
Speculative risk can result in a gain, a loss, or no change;
pure risk involves either a loss or no loss.
投机风险可能获利。纯风险没有获利,只有纯风险才能投保。
Risk Management【风险管理】Four risk management techniques:
Avoid the risk:避免风险(比如当心亏钱而不投资股票)
Control the risk :控制风险(比如安装烟雾探测器来防止或减少火灾的损失)
Accept the risk:接受风险(不通过其他方式管理风险:避免,控制或转移风险)
Transfer the risk:转移风险(比如通过购买保险将风险的经济责任转移给保险公司)
Life Insurance Terminology【人寿保险术语】Two basi ...
Java内存模型之JMM
计算机硬件存储体系 计算机存储结构,从本地磁盘到主存再到CPU缓存,也就是从硬盘到内存再到CPU。一般对应的程序的操作就是从数据库查数据到内存然后到CPU进行计算。
因为有这么多级的缓存(cpu和物理主内存的速度不一致的),CPU的运行并不是直接操作内存而是先把内存里边的数据读到缓存,而内存的读和写操作的时候就会造成不一致的问题。
Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,简称JMM) 来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。
Java内存模型Java Memory ModelJMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式,并决定一个线程对共享变量的写入何时以及如何变成对另一个线程可见,关键技术点都是围绕多线程的原子性、可见性和有序性展开的。
原则:
JMM的关键技术点都是围绕多线程的原子性、可见性和有序性展开的
能干嘛? ...
LockSupport与线程中断
中断机制首先一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以Thread.stop,Thread.suspend, Thread.resume 都已经被废弃了。
其次在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的机制——中断。中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现。
若要中断一个线程,你需要手动调用该线程的interrupt方法,该方法也仅仅是将线程对象的中断标识设成true;接着你需要自己写代码不断地检测当前线程的标识位,如果为true,表示别的线程要求这条线程中断,此时究竟该做什么需要你自己写代码实现。
每个线程对象中都有一个标识,用于表示线程是否被中断:该标识位为true表示中断,为false表示未中断;
通过调用线程对象的interrupt方法将该线程的标识位设为true;可以在别的线程中调用,也可以在自己的线程中调用。
中断相关的API方法
方法
描述
public void interrupt()
实例方法,实 ...
多线程锁
悲观锁定义:悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。
实现方式:synchronized关键字和Lock的实现类都是悲观锁
适用场景:写操作多的场景,先加锁可以保证写操作时数据正确,显示的锁定之后再操作同步资源。
伪代码说明:
12345678910111213141516 //=============悲观锁的调用方式public synchronized void m1(){ //加锁后的业务逻辑......}// 保证多个线程使用的是同一个lock对象的前提下ReentrantLock lock = new ReentrantLock();public void m2() { lock.lock(); try { // 操作同步资源 }finally { lock.unlock(); }}
乐观锁定义:乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁 ...
CompletableFuture
Future和Callable接口Future接口(FutureTask实现类)定义了操作异步任务执行的一些方法,如获取异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等。
12345678public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isDone(); V get() throws InterruptedException, ExecutionException; V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;}
Future接口可以为主线程开一个异步线程,专门为主线程处理耗时和费力的复杂业务。
Callable接口中定义了需要有返回的任务需要实现的方法
123456789101112 ...
油猴编写CSDN脚本
直达底部的文章推荐原本CSDN点击评论按钮,页面会滚到到下面的评论区,很方便看推荐文章;但现在点击评论按钮,评论会在侧边栏展开,所以写了个油猴脚本方便自己浏览CSDN。
效果如图:
分析:
右键侧边栏工具“检查”该元素,找到对应的html
可以看到在class="csdn-side-toolbar" 的div块中有各个侧边栏所对应的a标签
我们只需在该div块下加入自己的按钮,同时绑定点击事件(获取评论模块的高度,点击按钮滚动到指定位置)即可
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354// ==UserScript==// @name CSDN直达底部// @version 1.0// @description CSDN直达底部// @author Nan// @match https://blog.csdn.net/*/article/details ...
Kafka
参考视频:【尚硅谷】2022版Kafka3.x教程 https://www.bilibili.com/video/BV1vr4y1677k
概述定义Kafka传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。
Kafka最新定义: Kafka是一个开源的分布式事件流平台(Event Streaming Platform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。
应用场景缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。
消息队列的两种模式
点对点模式(一个生产者,一个消费者)
消费者主动拉取数据,消息收到后清除消息
发布订 ...