贪心算法
[TOC]
贪心算法455. Assign CookiesAssume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie.
Each child i has a greed factor g[i], which is the minimum size of a cookie that the child will be content with; and each cookie j has a size s[j]. If s[j] >= g[i], we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.
Examp ...
RabbitMQ learn
RabbitMQ相关介绍最好的学习文档: RabbitMQ 教程 - “Hello World!” |RabbitMQ 函数 — RabbitMQ tutorial - “Hello World!” | RabbitMQ
什么是消息队列 & 为什么使用?
Message Queue
顾名思义,存储消息的队列。
先来说说一个场景,以前送外卖的话或者送快递之类的,都是点到点,也就是快递小哥会直接送到你家,要是敲门发现不在,给你打个电话,此时你好像不得不回去?
其实先不说菜鸟驿站或者外卖柜。你们家家门口那块地就勉强算得上消息队列了,只不过不能保证安全,其他人也可以消费(bushi)
快递小哥只需要把快递放到你家门口,然后通过软件或者发短信,提醒你,就可以去干自己的事情了。而且你也不用马上去处理这个快递而打断当下做的事情。
什么是消息队列MQ全称为Message Queue,即消息队列。“消息队列”是在消息的传输过程中保存消息的容器。它是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接 ...
build your Hexo
使用Hexo 框架搭建博客解决没有钱买图床的问题
首先设置好typora的图片保存(这样在我们插入图片的时候会生成一个同名文件夹用来保存图片资源)
安装以及修改插件
npm install hexo-asset-image -- save
此时再使用命令查看
hexo clean & hexo g & hexo s
无题
Netty 学习JAVA BIOJAVA NIO
无题
多线程
线程实现
demo
public class TestThread1 extends Thread{ @Override public void run(){ for (int i = 0; i < 20; i++) { System.out.println("子线程" + i); } } public static void main(String[] args) { TestThread1 testThread1 = new TestThread1(); testThread1.start(); for (int i = 0; i < 20; i++) { System.out.println("主线程" + i); } }}
继承Thread类实现Runn ...
MySQL
基础篇1. 执行一条select语句,期间发生了什么?
your answer
2. MySQL 一行记录是怎么存储的?其他关联问题
MySQL 的 NULL 值会占用空间吗?
MySQL 怎么知道 varchar(n) 实际占用数据的大小?
varchar(n) 中 n 最大取值为多少?
行溢出后,MySQL 是怎么处理的?
索引篇
按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。
按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。
按「字段个数」分类:单列索引、联合索引。
代码随想录:哈希表
代码随想录-哈希表篇在大学或者其他时候学习数据结构课程时。不难发现,算法发展都是由于对时间或者空间有较高的需求,从而一步步优化。在查询优化时,到二分法( log(N) )时,开始出现了瓶颈, 如何降到O(1)或者退而求其次追求O(2),O(3)呢?
在顺序查找和二分查找时,我们都是索引+关键字存储,那能不能直接使用关键字充当索引,那不就能直接O(1)了吗?
哈希表就是怎么个思想(个人这样想的)
要深入学习的话,可以考虑由这些方面入手:空间开辟大小、哈希函数(存储)、解决哈希冲突、底层原理等。
嘛,这里主要是入门一下,通过做题感受一下
242.有效的字母异位词力扣题目链接(opens new window)
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true
示例 2: 输入: s = “rat”, t = “car” 输出: false
这个题目给出的都是小写字母,所以在用go写的方法里面就更简单一些。额也因为Jav ...
代码随想录:链表
[TOC]
代码随想录—链表嗨嗨,越是到了期末周,越是想开摆。复习什么的,60分万岁吧。有些东西真不感兴趣了。
这次是来到了链表篇(毕竟链表和数组在数据结构中很是重要)
这里我基本都是使用的迭代法(递归法得慢慢修炼修炼再考虑了)
(从大一c语言学习的时候,就觉得大多数情况下都能约定好使用的是虚拟头结点就好了)
所以推荐使用链表时都使用一个虚拟头结点(力扣人好像喜欢叫哑结点)
偶尔的话可以使用哨兵结点,用于减少判断条件或者越界
先大概概括一下基本题型吧
链表的建立以及增删查改
虚拟头结点的使用,temp临时指针等
边界条件判断(什么时候使用current !=null 什么时候使用current.Next !=null)
拓展: 双向链表,循环链表(记得试试约瑟夫环这个经典问题)
反转链表
原地反转(注意使用指针保存下一个结点)
新建头结点然后使用头插
删除链表倒数第N个结点
直接暴力,第一次先算链表长度,第二次遍历删除该结点
使用前后指针,先让快指针走N步,然后慢指针开始出发。
判断是否有环
让你判断是否有环
快慢指针
哈希表
寻找环的入口
快慢 ...
代码随想录:数组篇
[TOC]
数组篇总结首先跟着代码随想录刷了一刷,大概接触到题型有二分法、移除元素/排序、滑动窗口、模拟行为
二分法
确定好左右边界,以及mid的变化就好
移除元素
for循环暴力!
快慢指针: 快指针去探索找寻符合条件的宝藏,然后交给慢指针
使用堆栈或者队列
排序
首尾双指针
滑动窗口
双层for循环暴力! 其实这种也是滑动窗口,只是完全是无脑滑动(以边界条件为条件)
双指针滑动,两个for循环(上面是n*n,这个是2n),且移动条件为场景需求条件(使用hashmap进行维护)
模拟行为
害。。听天由命,画图吧。
可能这里更多的是用go去实现吧,因为go语言我也是刚学,然后语法都不太稳固那种,更别说使用什么api了,所以感觉就是算法和go都拿。有思路但是go很卡壳的话就先用Java写一下然后查go的语法然后用go写
二分法34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [ ...
数据库事务隔离等级
持续更新以及完善中…………………
数据库事务隔离首先,为什么要有事务隔离呢?
在单线程下,没什么大碍,但是我们想要提高效率,采用多线程并发时,便会出现一些问题。
下面的问题一定要当作一个事务来看待!!!!不要觉得连续两次查询就是一次事务了,这里的两次查询是处于同一个事务,你可以当作两次查询一次是写在函数开头,一次是写在了函数末尾。
void task(){ selectBySql(); .....干了其他事情,或者没干。 selectBySql();}
脏写
A有100块,现在给自己又转了20(就变成120了),现在B给A转了20块(变成了140),但是A转给自己20的事务因为某些原因出错导致回滚,又变成了100块。导致B不管先一步提交(120)还是后一步提交(140),都不是120块。
脏读
A转给自己20块,B读取了A资产发现有120块,但是A又因为某些问题导致回滚,B再去读A的资产发现变成了100块
不可重复读
幻读
A查询比自己财产更多的用户,发现只有C用户。
这个时候B和D用户开了账户,并转 ...
工厂模式
[TOC]
工厂模式(持续更新)我们这里以手机销售作为应用场景,后续设计模式也尽量贴近生活(使用学校例子(●’◡’●))
(感觉这里有点设计问题,写到后面感觉人麻了,自己理解不深以及应用场景想的不太好)
简单工厂模式初代设计首先设计一个手机商店
package factoryMod;public class PhoneStore { public Phone sellPhone(String type){ Phone phone; switch (type) { case "xiaomi" -> phone = new xiaomiPhone(); case "oppo" -> phone = new oppoPhone(); case "huawei" -> phone = new huaweiPhone(); default -> { ...
ElasticSearch学习
ElasticSearch的作用
ElasticSearch是一款非常强大的开源搜素引擎,具备非常强大的功能,可以帮助我们从海量数据中快速找到需要的内容
例如在电商平台搜索商品,搜索4090显卡会以红色标识
在搜索引擎搜索答案,搜索到的内容同样会以红色标识,也可以实现搜索时的自动补全功能
ELK技术栈
ElasticSearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域
而ElasticSearch是elastic stack的核心,负责存储、搜索、分析数据
ElasticSearch和Lucene
ElasticSearch底层是基于Lucene来实现的
Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发,官网地址:https://lucene.apache.org/
Lucene的优势
易扩展
高性能(基于倒排索引)
Lucene的缺点
只限于Java语言开发
学习曲线陡峭
不支持水平扩展
ElasticSea ...