自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

上山的人

拥抱变化

  • 博客(84)
  • 收藏
  • 关注

原创 用微信公众号控制ESP8266的LED,进一步使用微信当遥控器

用微信公众号控制ESP8266的LED,进一步使用微信当遥控器(避免写APP或者IOS或者小程序),控制一切设备。官网教程微信硬件平台成果演示B站投稿,欢迎三连功能架构图1 公众号注册1.申请认证公众号&开通设备功能1.1公众号申请:https://mp.weixin.qq.com个人订阅号 功能有限,不能有设备管理模块功能,本教程系列使用的是订阅号,做一个测试足够了。企业服务号注册必须要有公司信息,法人等组织代码,个人用不了。..

2022-03-26 10:32:40 2568

原创 华为机考LeetCode练习题库

剑指 Offer 59 - I. 滑动窗口的最大值。剑指 Offer 58 - II. 左旋转字符串。剑指 Offer 50. 第一个只出现一次的字符。剑指 Offer 22. 链表中倒数第k个节点。剑指 Offer 45. 把数组排成最小的数。剑指 Offer 03. 数组中重复的数字。剑指 Offer 13. 机器人的运动范围。105. 从前序与中序遍历序列构造二叉树。剑指 Offer 38. 字符串的排列。208. 实现 Trie (前缀树)974. 和可被 K 整除的子数组。

2023-07-01 10:37:06 931

原创 SpringBoot项目中controller层、service层、Dao / Mapper层、entity / model / pojo层作用

controller层调用了service层的具体功能和方法,service层由service对应的接口和实现类组成,serviceImpl实现service的相关接口同时完成相关的业务逻辑处理。service层(serviceImpl)再调用mapper层的接口进行业务逻辑应用的处理。mapper层的接口在对应的xml配置文件中进行配置、实现以及关联,故mapper层的任务就是向数据库发送sql语句,完成数据的处理任务。pojo层映射数据库,pojo层的一个实体类映射数据库中的一张表。

2023-06-26 11:28:34 1126

原创 链表反转方法汇总

【代码】链表反转方法汇总。

2023-05-29 16:39:19 272

原创 JAVA基础:Scanner类中next(), nextLine(), hasNext(), hasNextLine()

2、判断输入的缓存中是否有效字符,遇到空格结束。3、如果只输入空格,不匹配,返回false。2、判断输入的缓存中是否有效字符,遇到回车结束。3、如果只输入回车,不匹配,返回false。二、nextLine() : 读取除回车以外的所有符号(整行内容),光标定位在下一行。一、next() : 只读缓冲区中空格之前的数据,并且光标指向本行。

2023-05-06 15:42:39 3611 1

原创 GridSearchCV和cross_val_score

除了自行完成叉验证外,还返回了最优的超参数及对应的最优模型所以相对于cross_val_score来说,GridSearchCV在使用上更为方便;但是对于细节理解上,手动实现循环调用cross_val_score会更好些。一般用于获取每折的交叉验证的得分,然后根据这个得分为模型选择合适的超参数,通常需要编写循环手动完成交叉验证过程。

2023-04-02 10:42:31 525

原创 Java多线程与并发

对于处理器重排序,JMM 的处理器重排序规则会要求 java 编译器在生成指令序列时,插入特定类型的内存屏障(memory barriers,intel 称之为 memory fence)指令,通过内存屏障指令来禁止特定类型的处理器重排序(不是所有的处理器重排序都要禁止)。由于CPU分时复用(线程切换)的存在,线程1执行了第一条指令后,就切换到线程2执行,假如线程2执行了这三条指令后,再切换回线程1执行后续两条指令,将造成最后写到内存中的i值是2而不是3。有序性:即程序执行的顺序按照代码的先后顺序执行。

2023-04-02 10:32:48 481

原创 48. 旋转图像

【代码】48. 旋转图像。

2023-02-26 20:35:00 100

原创 Trie树、字典树

208. 实现 Trie (前缀树)

2023-02-09 15:47:07 184

原创 redis数据库错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persis

究其原因是因为强制把redis快照关闭了导致不能持久化的问题,在网上查了一些相关解决方案,通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。有两种修改方法,一种是通过redis命令行修改,另一种是直接修改redis.conf配置文件。

2022-11-14 11:31:16 802

原创 Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnect报错解决

②或不注释 追加你自己redis服务器的ip地址 bind 127.0.0.1 192.168.100.100。4. 增加redis连接密码,与spring项目中yml或者properities文件中配置的保持一致。①注释当前绑定的主机ip地址: #bind 127.0.0.1。5.重启redis即可。

2022-11-14 10:20:00 7586 1

原创 回溯法、DFS、递归、栈、BFS知识点总结

回溯法、DFS、递归、栈、BFS知识点总结。

2022-10-23 20:05:45 624

原创 二分查找汇总

在于等号是和大于在一起还是小于在一起,以左边界举例的话就是每次边界收缩时 l指针mid+1左侧的mid一定是小于target的,这就保证了循环结束时 L指针的左侧必定和自己相异。如果左边界l要更新为 l = mid,此时我们就要使用模板2,让 mid = (l + r + 1)/ 2,否则while会陷入死循环。如果左边界l更新为l = mid + 1,此时我们就使用模板1,让mid = (l + r)/2。单调区间(非绝对单调,可有相等值)二分问题优先取r都不会翻车。时间复杂度O(lonN)

2022-10-20 21:57:18 514

原创 Integer.parseInt()和Integer.valueOf()

1. 使用Integer.parseInt(String s)方法将Integer.valueOf(String s)的字符串类型参数转成int类型.2. 判断参数值是否在[-128, 127]范围之间, 在范围内则直接从IntegerCache类中取值,返回int值。返回值是int类型,将一个字符串转成10进制的int数值,例如"123"——>123。3. 不在范围内则创建一个新的对象 new Integer(int value);返回值是Integer类型。

2022-10-05 16:59:13 659

原创 LeetCode 热题 HOT 100——31. 下一个排列

3. 如果最后没有找到nums[i] > nums[i-1]的,说明目前数组是倒序,Arrays.sort(nums)即可。时间复杂度:O( N*log(N) ),其中 N 为给定序列的长度,主要是Arrays.sort(nums)的复杂度,不考虑这个的话就是O(N)。1. 从后往前找出第一个相邻的后一个大于前一个元素:nums[i] > nums[i-1],此时的i-1位置就是需要交换的位置。2. 对i自己和之后的元素排序,[i,len)从小到大,第一个大于i-1位置的进行交换,那么就是下一个排列。

2022-09-18 17:05:59 148

原创 23. 合并K个升序链表

K 条链表的总结点数是 N,平均每条链表有 N/K 个节点,因此合并两条链表的时间复杂度是 O(N/K)。从 K 条链表开始两两合并成 1 条链表,因此每条链表都会被合并 logKlogK 次,因此 K 条链表会被合并 K * logK次,因此总共的时间复杂度是K∗logK∗N/K 即 O(NlogK)。使用小根堆维护 k 个链表的头部,每次 O(logK) 比较 K个链表的头结点 求 min,然后poll出来,若该 min 节点的 next 不为空,则继续加入到堆中,时间复杂度:O(NlogK)

2022-09-16 22:53:31 912

原创 回文子串汇总

一、中心扩展法:1. 以k为中心: left=k-1, right=k+12. 以k右边的空白位置为中心: left=k, right = k+1。

2022-09-15 11:25:30 1399

原创 239. 滑动窗口最大值

单调队列思路:0. 队列存储的是元素下标1. 遍历数组元素2. 维护队列:队列不为空并且当前遍历元素 >= 队尾元素,向前压,比它小的全部被压扁了(删除了),直至队列为空或者遇到比它大的元素,停止。4. 该元素下标入队5. 计算窗口左边界left6. 判断队首元素是否需要维护,如果 队首元素的下标 < left 说明该元素已经不在窗口内,可以从队列中清除7. 将窗口内的最大值存入数组(这里窗口内的最大值也即是队首元素)8. 返回操作1,直至退出循环。

2022-09-14 21:08:49 150

原创 SQL语句执行过程详解

逻辑查询处理阶段简介::对 FROM 子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1:对VT1应用ON筛选器。只有那些使为真的行才被插入VT2。:如 果指定了(相对于 或(),保留表(:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。:对V

2022-06-13 15:31:03 2229

原创 设计模式——工厂模式

设计模式——工厂模式

2022-06-13 15:26:46 351

原创 前缀和总结

目录总结:523.连续子数组的和1. 学习到的知识点:2. 算法思想:525. 连续数组560. 和为 K 的子数组算法思路:974. 和可被 K 整除的子数组算法思路:1248. 统计「优美子数组」1. 学习到的知识点:2.算法思路:总结:①关于hashmap的初始化,求个数就存个数,哨兵存(0,1) 求长度就存下标,哨兵存(0,-1)②元素只有0、1的一般要初始化把0变化为-1③模板里面的hashmap.put的位置:if.....

2022-05-23 20:35:34 333

原创 961. 在长度 2N 的数组中找出重复 N 次的元素

目录961. 在长度 2N 的数组中找出重复 N 次的元素方法一、哈希表方法二、随机法思路与算法复杂度分析169. 多数元素方法一:哈希表方法二:排序返回中位数方法三:摩尔投票法方法三:随机化 ( 由于随机数可能每次都一样或者多次重复,实际复杂度有可能无穷大,一直找不到众数)思路算法961. 在长度 2N 的数组中找出重复 N 次的元素961. 在长度 2N 的数组中找出重复 N 次的元素方法一、哈希表2N个元素,N+1种,其中..

2022-05-21 16:20:50 463

原创 常见子数组问题 通用解法

1. 和积 最值问题第i位置的答案,一定由第i-1位置的答案发展而来,不用考虑i-2,i-3...因此用普通dp,可以做到O(n)。53. 最大子数组和普通DP。因为它向前扩展必连上dp[i-1],考虑dp[i-2]的话就不是连续子数组了。 有一个更优解法判断 sum 是否大于0的,其实就是化简后的普通DP(贪心算法)。53. 最大子数组和public class Solution { public int maxSubArray(int[] nums) {...

2022-05-20 17:29:26 676

原创 462. 最少移动次数使数组元素相等 II

462. 最少移动次数使数组元素相等 II学习到的知识点:1. 数组长度为 奇数 2n+1 则中位数两边各有n个数 设左边所有数和中位数的差值和为x 右边所有数和中位数的差值和为y 则所有需要移动的次数为x+y;如果不选择中位数 例如选择中位数-1 这样总的移动次数 >= ((x-n) + (y+n) + 1);也即 最好的情况下比中位数大1 。2. 如果数组长度是偶数 有两个中位数 选择两个中位数的任何一个或者两个中位数的平均数 都是可以的3. 另外就是求移动次数的时候,除了使用

2022-05-19 10:29:02 202

原创 378. 有序矩阵中第 K 小的元素

378. 有序矩阵中第 K 小的元素方法一:直接排序思路及算法最直接的做法是将这个二维数组转成一维数组,并对该一维数组进行排序。最后这个一维数组中的第k个数即为答案。class Solution { public int kthSmallest(int[][] matrix, int k) { int rows = matrix.length, columns = matrix[0].length; int[] sorted = ne....

2022-05-18 17:27:28 117

原创 设计模式学习笔记

目录一、OOP七大原则二、工厂模式遵循OOP的以下原则:核心本质:三种模式:小结:应用场景:三、抽象工厂模式定义:适用场景:优点:缺点:一、OOP七大原则一、开-闭原则(Open-Closed Principle, OCP)对扩展开放,对修改关闭。最基础,最重要的一个原则。顾名思义,对一个类允许扩展其功能,但是不能影响到现有的功能模块。对提供方开放,对使用方关闭。二、里氏替换原则(Liskov Substitution Principl

2022-05-15 17:56:53 274

原创 设计模式——单例模式

一、单例模式1. 饿汉式每个类只初始化一个对象。这个对象,无论你需要不需要,我都会给你,因此有可能会造成内存空间浪费。也因此引出懒汉式单例模式package singleton;public class Hungry { //饿汉式单例模式 //可能会浪费空间,我们想要在使用的时候再申请内存空间,因此引入懒汉式 private byte[] data1 = new byte[1024*1024]; Private byte[] data2 = new..

2022-05-15 15:20:09 357

原创 面试题 01.05. 一次编辑

面试题 01.05. 一次编辑方法一:DP1、dp数组定义dp[ i ] [ j ] 表示以i-1,j-1结尾的两个字符串的需要最小的编辑距离。存在一次编辑的时候一共有四种情况:1. len ( str1) > len ( str2) , 相当于str2需要增加一个字符,或者 str1 删除一个字符。2. len ( str1 ) == len ( str2 ),相当于替换str1一个字符, 或者替换 str2 一个字符。3. len ( str1) &lt..

2022-05-14 10:23:46 161

原创 15.三数之和

15. 三数之和重点要保证:1. target不能重复2. 组成target的元组也不能重复然后固定target,剩余两个用双指针class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> ans = new ArrayList<>(); if (nums == n...

2022-05-12 21:47:13 108

原创 排序和查找算法汇总

排序分类1. 内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(就是内存)进行的排序过程。 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序2. 比较类排序 和 非比较排序比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非..

2022-05-12 21:43:18 752

原创 LRU算法(JAVA实现)

一、算法介绍最近最久未使用(Least Recently Used LRU)算法是⼀种缓存淘汰策略,它是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法。该算法的思路是,发生缺页中断时,将最近一段时间内最久未使用的页面置换出去。 从程序运行的原理来看,最近最久未使用算法是比较接近理想的一种页面置换算法,这种算法既充分利用了内存中页面调用的历史信息,又正确反映了程序的局部问题。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。..

2022-05-10 23:35:23 9987 2

原创 操作系统基础篇——内存管理

1. 虚拟内存单片机是没有操作系统的,所以每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。另外,单片机的 CPU 是直接操作内存的「物理地址」。在这种情况下,要想在内存中同时运行两个程序是不可能的。操作系统是如何解决这个问题呢?操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。我们程序所使用的内存地址叫做虚拟内存地址(Virtual Memory Address) 实际存在硬件里面的空间地址叫物理内存地址(Physical Memory Addr

2022-05-09 16:41:28 560

原创 GMP 原理与调度

一、Golang “调度器” 的由来?(1) 单进程时代不需要调度器早期的单进程操作系统,面临 2 个问题: 单一的执行流程,计算机只能一个任务一个任务处理。 进程阻塞所带来的 CPU 时间浪费。 (2) 多进程 / 线程时代有了调度器需求在多进程 / 多线程的操作系统中,就解决了阻塞的问题。但是进程拥有太多的资源,进程的创建、切换、销毁,都会占用很长的时间,CPU 虽然利用起来了,但如果进程过多,CPU 有很大的一部分都被用来进行进程调度了。(3) 协程来提高 ..

2022-05-08 21:22:28 978

原创 Go并发编程

并发介绍进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 C.一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。 协程和线程协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。线程:一个线程上可以跑多个协程,协程是轻量级的线程...

2022-05-07 12:26:10 1908

原创 1823.找出游戏的获胜者(约瑟夫环问题)

1823. 找出游戏的获胜者方法一:模拟 + 队列时间O(NM),空间O(N)(队列)class Solution { //队列 + 模拟 public int findTheWinner(int n, int k) { Queue<Integer> queue = new ArrayDeque<Integer>(); for (int i = 1; i <= n; i++) queue.offer(i); .

2022-05-05 10:57:25 267

原创 计算机网络学习笔记一:基础篇

2.1 TCP/IP 网络模型有哪几层?问大家,为什么要有 TCP/IP 网络模型?对于同一台设备上的进程间通信(管道、消息队列、共享内存、信号等)。不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出了一套通用的网络协议。这个网络协议是分层的,每一层都有各自的作用和职责,接下来就根据「 TCP/IP 网络模型」分别对每一层进行介绍。应用层应用层只需要专注于为用户提供应用功能,比如 HTTP、FTP、Telnet、DNS、SMTP等。..

2022-05-03 12:05:19 3974 1

原创 MySQL事务隔离级别以及MVCC机制

学习资料来源:小林coding侵权删除事务隔离级别是怎么实现的?事务有哪些特性?原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)InnoDB 引擎通过什么技术来保证事务的这四个特性的呢?持久性是通过 redo log (重做日志)来保证的; 原子性是通过 undo log(回滚日志) 来保证的; 隔离性是通过 MVCC(多版本并发控制) 或锁机制来保证的; 一致性则是通过持久性+原子性+隔离性来保证;并

2022-05-02 21:17:52 1024

原创 数据库学习笔记一:索引篇

从数据页的角度看 B+ 树 | 小林coding从数据页的角度看 B+ 树 | 小林coding学习资料来源,侵权删除:从数据页的角度看 B+ 树 | 小林coding一、索引篇InnoDB 是如何存储数据的?记录是按照行来存储的,但是数据库的读取并不以「行」为单位,否则一次读取(一次 I/O 操作)只能处理一行数据,效率会非常低。因此,InnoDB 的数据是按「数据页」为单位来读写的,也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位整体读入

2022-05-02 20:22:10 1908

原创 104. 二叉树的最大/最小深度

二叉树的最大深度和最小深度

2022-04-27 20:45:41 214

原创 116.填充每个节点的下一个右侧节点指针

116. 填充每个节点的下一个右侧节点指针说人话:为二叉树增加next指针。方法一:利用队列进行层序遍历,遍历的同时修改next指针。时空都是O(N)class Solution { //队列 + 层序遍历 public Node connect(Node root) { if(root == null) return root; Queue<Node> queue = new LinkedList<Node>

2022-04-27 20:04:56 527

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除