设计模式
创建型单例模式饿汉式(在使用时进行实例化,线程不安全)
123456789101112131415public class achieve1 { private static achieve1 singleton ; // 私有化构造器 禁止外部构造 不能防止反射破环 private achieve1(){ } // 给外界提供获取实例方法 线程不安全 // 不安全的原因:同时多个线程去构造实例 public static achieve1 getInstance(){ if(singleton == null) { singleton = new achieve1(); } return singleton; }}
懒汉模式要变成线程安全的除了用饿汉模式之外,还有两种方法:
加synchronized关键字
此方法是最简单又有效的方法,不过对性能上会有所损失。比如两个线程同时调用这个实例 ...
javase
for 循环的执行顺序12345678910111213static boolean foo(char c){ System.out.print(c); return true; } public static void main(String[] args) { int i =0; for(foo('A');foo('B')&&(i<2);foo('C')){ i++; foo('D'); } }// 输出 ABDC BDCB
try catch finally当Java程序执行try块、catch块时遇到了return或throw语句,这两个语句都会导致该方法立即结束,但是系统执行这两个语句并不会结束该方法,而是去寻找该异常处理流程中是否包含finally块,如果没有finally块,程序立即执行return或throw语句,方法终止;如果有final ...
新生赛
题 A 最大化网格图中正方形空洞的面积
题目描述题 解给你一个网格图,由 n + 2 条 横线段 和 m + 2 条 竖线段 组成,一开始所有区域均为 1 x 1 的单元格。所有线段的编号从 1 开始。给你两个整数 n 和 m 。同时给你两个整数数组 hBars 和 vBars 。hBars 包含区间 [2, n + 1] 内 互不相同 的横线段编号。vBars 包含 [2, m + 1] 内 互不相同的 竖线段编号。如果满足以下条件之一,你可以 移除 两个数组中的部分线段:如果移除的是横线段,它必须是 hBars 中的值。如果移除的是竖线段,它必须是 vBars 中的值。输入描述:两个正整数 1 ≤ n ≤ 10^9 ,1 ≤ m ≤ 10^9 。接下来两个数组1 <= hBars.length <= 1002 <= hBars[i] <= n + 11 <= vBars.length <= 1002 <= vBars[i] <= m + 1输出描述:请你输出移除一些线段后(可 ...
WebSocket
WebSocket 的由来
在 WebSocket 出现之前,我们想实现实时通信、变更推送、服务端消息推送功能,我们一般的方案是使用 Ajax 短轮询、长轮询两种方式:
比如我们想实现一个服务端数据变更时,立即通知客户端功能,没有 WebSocket 之前我们可能会采用以下两种方案:短轮询或长轮询
上面两种方案都有比较明显的缺点:
HTTP 协议包含的较长的请求头,有效数据只占很少一部分,浪费带宽
短轮询频繁轮询对服务器压力较大,即使使用长轮询方案,客户端较多时仍会对客户端造成不小压力
WebSocket 是什么
WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。客户端和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。
WebSocket 优缺点优点
实时性: WebSocket 提供了双向通信,服务器可以主动向客户端推送数据,实现实时性非常高,适用于实时聊天、在线协作等应用。
减 ...
前缀树,布隆过滤器
前缀树前缀树的3个基本性质:
根节点不包含字符,除根节点外每一个节点都只包含一个字符。
从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
每个节点的所有子节点包含的字符都不相同。
前缀树实现敏感词过滤123456789101112131415{ "傻": { "逼": { "isEnd": "Y" }, "子": { "isEnd": "Y" }, "大": { "个": { "isEnd": "Y" } } }}
树 ...
抖音有声小说
前因该死的抖音小说推广,每每看到高潮结束,然后就是各种广告和软件下载。
程序员能受这气?直接开搞。
后果
找书源
爬取小说内容
文字转语音
首先找一个书源
笔趣阁(很全但是有”DDoS protection by Cloudflare”)
铅笔小说 没有很多权限,很适合我这种半吊子选手
开爬
首先看url是否正确读取
12345678910import urllib.request as ururl = "https://www.23qb.net/book/232488/90659053.html"req = ur.Request(url)req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36")response = ur.urlopen(req)html = response.rea ...
限流
限流的经典算法
常见限流用法固定窗口限流首先维护一个计数器,将单位时间段当做一个窗口,计数器记录这个窗口接收请求的次数。
当次数少于限流阀值,就允许访问,并且计数器+1
当次数大于限流阀值,就拒绝访问。
当前的时间窗口过去之后,计数器清零。
假设单位时间是1秒,限流阀值为3。在单位时间1秒内,每来一个请求,计数器就加1,如果计数器累加的次数超过限流阀值3,后续的请求全部拒绝。等到1s结束后,计数器清0,重新开始计数。如下图:
伪代码
123456789101112131415161718/** * 固定窗口时间算法 * @return */ boolean fixedWindowsTryAcquire() { long windowUnit = 1; //设置窗口时间单位 long lastTime = 0; // 初始时间 long currentTime = System.currentTimeMillis(); //获取系统当前时间 if (currentTime - lastRequestTime > windowUn ...
牛客周赛
题 A 游游的7的倍数
题目描述题 解游游拿到了一个正整数x,她希望在x中添加一个数字,使它成为7的倍数。你能帮帮她吗?输入描述:一个正整数x。1 ≤ x ≤ 10^9输出描述:x添加一个数字后形成的数。请务必保证操作的合法性,且一定是7的倍数。如果有多解,输出任意一个合法解。可以证明,至少存在一个正确答案。案例1234输入 1输出 21思路:每十个数里一定有至少一个7的倍数,因此枚举个位即可。123456789101112131415import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); long n = in.nextLong(); for (int i = 0; i < 10; i++ ...
数据库知识点补充
存储引擎
查看表的存储引擎12345678910111213mysql> show create table bills;+-------+---------------------------------------------------| Table | Create Table |+-------+--------------------------------------------------| bills | CREATE TABLE `bills` ( `id` int NOT NULL AUTO_INCREMENT, `username` varchar(20) DEFAULT NULL, `money` double DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |+-------+----------------------------------------- ...
首次项目部署
1. 服务器配置
2 核 4G(Centos 7)CentOS 安装 Docker官方网站上有各种环境下的安装指南,这里主要介绍 Docker CE 在 CentOS 上的安装。2.1 卸载(可选)如果之前安装过旧版本的 Docker,可以使用下面命令卸载:12345678yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2.2 安装 Docker123456789101112131415# 1、yum 包更新到最新 sudo yum update # 2、作用:安装需要的软件包, yum-util 提供y ...