代码随想录:哈希表
代码随想录-哈希表篇在大学或者其他时候学习数据结构课程时。不难发现,算法发展都是由于对时间或者空间有较高的需求,从而一步步优化。在查询优化时,到二分法( 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,返回 [ ...
无题
#表达式与运算符
##1.1 基本算术运算
代码内容:
#!/bin/basha=10b=20# 加法ret=`expr $a + $b`echo "a + b : $ret"# 减法ret=`expr $a - $b`echo "a - b : $ret"# 乘法ret=`expr $a \* $b`echo "a * b : $ret"# 除法ret=`expr $b / $a`echo "b / a : $ret"# 取余除ret=`expr $b % $a`echo "b % a : $ret"
运行情况:
##1.2 逻辑运算
代码内容:
#!/bin/basha=10b=20ret=`expr $a < $b`echo "a < b : $ret"ret=`expr $a = $b`echo "a = b : $ret"ret=`expr $a != $b`echo "a != b : $ret"ret ...
无题
表达式与运算符1.1 基本算术运算
#!/bin/basha=10b=20# 加法ret=`expr $a + $b`echo "a + b : $ret"# 减法ret=`expr $a - $b`echo "a - b : $ret"# 乘法ret=`expr $a \* $b`echo "a * b : $ret"# 除法ret=`expr $b / $a`echo "b / a : $ret"# 取余除ret=`expr $b % $a`echo "b % a : $ret"
1.2 逻辑运算#!/bin/basha=10b=20ret=`expr $a < $b`echo "a < b : $ret"ret=`expr $a = $b`echo "a = b : $ret"ret=`expr $a != $b`echo "a != b : $ret"ret=`expr $b >= $a`echo ...
无题
Shell脚本基础实验任务一:优雅退出select循环修改select菜单脚本,实现如下要求:
添加一个菜单项exit
用户选择其他菜单项的时候就输出选择的值
选择exit菜单项则退出脚本
不使用Ctrl+C结束脚本
代码及结果截图写入实验报告。
任务二:计算阶乘请编写Shell脚本,实现n阶乘的计算。提示用户输入n值,然后输出n阶乘计算结果。
为了避免计算时间过长,可以限制n值上限,例如15。
代码及结果截图写入实验报告。
任务三:打印杨辉三角形请使用Shell脚本的循环和输出控制,打印杨辉三角形。
用户输入n值,作为杨辉三角形的层数。也可以限制最大值。
例如:n=7的杨辉三角形
任务四:多种样式的进度条进度条用于帮助用户直观理解一个任务进行的进度。
1.请你设计一个用字符(-|/)构建的旋转进度条,伴随模拟进度百分比数值的变化,至100%时结束。例如:
时刻1显示:- (1%)
时刻2显示:/ (20%)
在同一位置逐个显示上述四个符号,可以实现旋转进度条。
进度百分比模拟即可,无需反应实际任务情况。
代码及结果截图写入实验报告。
#! ...
数据库事务隔离等级
持续更新以及完善中…………………
数据库事务隔离首先,为什么要有事务隔离呢?
在单线程下,没什么大碍,但是我们想要提高效率,采用多线程并发时,便会出现一些问题。
下面的问题一定要当作一个事务来看待!!!!不要觉得连续两次查询就是一次事务了,这里的两次查询是处于同一个事务,你可以当作两次查询一次是写在函数开头,一次是写在了函数末尾。
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用户开了账户,并转 ...
API开放平台
API开放平台项目介绍做一个提供API接口调用的平台,用户可以注册登录,开通接口调用权限。用户可以使用接口,并且每次调用会进行统计。管理员可以发布接口、下线接口、接入接口,以及可视化接口的调用情况、数据
背景:
前端开发需要用到后台接口
使用现成的接口(https://api.btstu.cn/)
业务流程做一个API接口平台
防止攻击(安全性)
不能随便调用(限制、开通)
计费
统计调用次数
流量保护
API接入
1、SDK的外语全称是Software Development Kit,中文为:软件开发工具包,一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合;
2、可以将其理解为,由第三方服务商提供的实现软件产品某项功能的工具包,里面一般以集合kpi和文档、范例、工具的形式出现,也就是由很多类型文件的集合;
技术选型前端Ant Design Pro
React
Ant Design Procomoponents
Umi
Umi Request (Axios封装)
后端Java Spring Boot
Spring B ...
工厂模式
[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 -> { ...
rabbitmq
rabbitmq:消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.
目比较常见的MQ实现:
ActiveMQ
RabbitMQ
RocketMQ
Kafka
几种常见MQ的对比:
RabbitMQ
ActiveMQ
RocketMQ
Kafka
公司/社区
Rabbit
Apache
阿里
Apache
开发语言
Erlang
Java
Java
Scala&Java
协议支持
AMQP,XMPP,SMTP,STOMP
OpenWire,STOMP,REST,XMPP,AMQP
自定义协议
自定义协议
可用性
高
一般
高
高
单机吞吐量
一般
差
高
非常高
消息延迟
微秒级
毫秒级
毫秒级
毫秒以内
消息可靠性
高
一般
高
一般
追求可用性:Kafka、 RocketMQ 、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力:RocketMQ、Kafka
追求消息低延迟:RabbitMQ、Kafka
docker安装部署# latest Rabbi ...
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 ...
Docker学习
1.简单命令# 启动Dockersystemctl start docker# 停止Dockersystemctl stop docker# 重启systemctl restart docker# 设置开机自启systemctl enable docker# 执行docker ps命令,如果不报错,说明安装启动成功docker ps
快速入门1.1部署MySQL首先,我们利用Docker来安装一个MySQL软件,大家可以对比一下之前传统的安装方式,看看哪个效率更高一些。
如果是利用传统方式部署MySQL,大概的步骤有:
搜索并下载MySQL安装包
上传至Linux环境
编译和配置环境
安装
而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用CV大法):
docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql
在windows下测试连接,测试成功!
当我们执行命令后,Docker做的第一件事情, ...
聚合搜索系统
聚合搜索系统
前端
vue3
ant design vue
后端项目初始化第一期前端,后端初始化
前端页面开发,后端基本搜索接口
第二期数据抓取
聚合搜索接口开发
适配器
门面模式
elasticsearch 搭建
第三期elasticsearch使用 建表,读写数据,调用api,Java整合
数据同步(四种同步方式)
第四期保障接口稳定性
项目优化(关键词高亮,搜索建议,防抖节流)
先鸽一下。
第一期前端初始化
后端初始化
前端页面开发,后端基本搜索接口
整合Axios
//这里注意看官方开发文档,跟着走npm install -g @vue/cli //创建项目vue create antd-demo#使用组件npm i --save ant-design-vue@4.x
后端采用初始模板,根据需求更改sql
前端瘦身,留下主页 indexPage
拆解页面
margin: 0 auto,
max-width: 1024px
用url记录页面搜索状态,当用户刷新页面时,能够还原之前的搜索状态
url <==> 页面状态
核心技巧: ...
Liunx踩坑之旅
description: 三行太多了,写不来
LinuxLinux 常用命令文件基本操作篇这里主要是描述文件的移动,复制,粘贴,额,后续学的多了自然有更多操作,俺现在不知道啊。。。
增删改//创建新的文件。。。touch your_file //mkdir your_directories//创建多级目录加入参数mkdir -p father/son/grandson----------------------cp--->文件复制cp your_file father/son/grandson复制目录的话需要加入参数-r | -Rcp -r father family--------------rm--->删除文件,嗨嗨删库跑路 sudo rm -rf /*-f是如果想忽略g提示,直接删除文件,可以使用 -f 参数强制删除: -r递归执行mv--->移动文件,类似于Ctrl+xmv 源文件 目的目录mv test_file Documents --新玩法 重命名-----------> mv 旧的文件名 新的文件名mv your_file new_ ...
java8基础知识
daisiki,在此见证Java8的预习,啊不,学习记录。
SpringCloud学习
首先的话还是感谢黑马提供的快速入门课程。当然,仅仅是快速入门。
视频如下:
https://www.bilibili.com/video/BV1kH4y1S7wz/?share_source=copy_web&vd_source=3362e6914fb759983690e6e0f1072453
在课前资料中给大家提供了黑马商城项目的资料,先导入这个单体项目。不过需要注意的是,你必须做好一些准备:
Centos7的环境及一个好用的SSH客户端
安装好Docker
会使用Docker
如果你没有这样的Linux环境,或者不是Centos7的话,那么这里有一篇参考文档:
Linux环境搭建
建议按照上面的文档来搭建虚拟机环境,使用其它版本会出现一些环境问题,比较痛苦。
如果已经有Linux环境,但是没有安装Docker的话,那么这里还有一篇参考文档:
安装Docker
微服务微服务架构,首先是服务化,就是将单体架构中的功能模块从单体应用中拆分出来,独立部署为多个服务。同时要满足下面的一些特点:
单一职责:一个微服务负责一部分业务功能,并且其核心数据不依赖于其它模块。 ...
Vue的学习之路
Why (。・∀・)ノ゙,这还有啥why,混口饭吃,有个能创建网站的前置能力,已经很足够了
vue
初始工程创建命令npm create vue@latestcd your_demonpm installnpm run serve
重要文件node_moudles 组件库public src 主要编写文件index.html 入口文件pack-lock.json package.json 配置依赖等vite.config..js 配置文件
computed作用: 根据已有数据计算新数据
<template> <div class="person"> 姓: <input type="text" v-model="firstName"><br> 名: <input type="text" v-model="lastName"><br> 全名: <span> ...