Programmie
码龄7年
关注
提问 私信
  • 博客:91,504
    问答:13,515
    动态:10
    105,029
    总访问量
  • 48
    原创
  • 317,880
    排名
  • 84
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2018-04-12
博客简介:

Dennis学习小站

博客描述:
主要用于个人学习记录
查看详细资料
个人成就
  • 获得39次点赞
  • 内容获得39次评论
  • 获得290次收藏
  • 代码片获得110次分享
创作历程
  • 2篇
    2021年
  • 48篇
    2020年
  • 1篇
    2019年
成就勋章
TA的专栏
  • LeetCode
    15篇
  • 数据库
    5篇
  • Java基础
    4篇
  • 多线程
    6篇
  • kotlin
    4篇
  • docker
    4篇
  • 大数据
    2篇
  • 数据协议
    1篇
  • OPC UA
    8篇
  • 小技巧
  • 基础语法
    6篇
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

LeetCode 432 全O(1)数据结构

今天捣鼓一天总算是把整个代码给搞通顺了。整体思路是双端链表+Hash的方式,实现代码为C++;首先定义双端链表结点的数据结构(与LRU那道题有点类似),我们规定,链表是一个升序链表:struct Node { Node() {} Node(string key) : key(std::move(key)), count(1) {} // 保存当前的key和count值,其中count默认赋值为1 string key; int count; No
原创
发布博客 2021.07.11 ·
367 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

递归学习与理解

最近重新开始做力扣的习题,加深了自己对于递归的理解,因此以两道题为例分别解释递归的作用。两道题分别是LeetCode 83和24。虽然它们都有相应的迭代解法,但是递归的解法相对更为巧妙。以LeetCode83为例:迭代方式ListNode deleteDuplicates(ListNode head) { ListNode dummy = head; while (head != null && head.next != null) { if (hea
原创
发布博客 2021.07.10 ·
408 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

字节面试题:为每个学生进行排名

这道题还是比较有难度,主要是5.7的mysql不能使用rank函数。首先我们创建相应的表,以及create table if not exists `rank`.grade( id bigint not null primary key, name varchar(20) null, stu_rank int null);然后要注意的是,这是原来的表,需要新增一列stu_rank。ALTER TABLE grade ADD COLUMN stu_rank int null;我们先
原创
发布博客 2020.12.22 ·
401 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring Boot配置Redis主从复制

先说结论,Spring Boot是不能直接通过application配置来实现主从Redis的配置的。Spring Boot支持的cluster是原始的使用槽的集群模式,而不是常用的主从集群,因此最好自己来搭建Redis的主从集群模式。需要我们通过自己定义的方式来实现。这里我们用docker来搭建redis集群,详细的docker-file如下:version: "2.0"services: master: image: redis restart: always co
原创
发布博客 2020.11.11 ·
1933 阅读 ·
0 点赞 ·
0 评论 ·
7 收藏

LintCode 486:(快手面试真题)合并K个有序数组

当时没撕出来,下来看了一下,要用到最小堆来进行辅助。整体的算法复杂度是O(Nlogk),N是所有点的总数,logk是堆内调整的复杂度代码如下:public int[] mergekSortedArrays(int[][] arrays) { List<Integer> res = new ArrayList<>(); int high = arrays.length; Queue<int[]> queue = new PriorityQueu
原创
发布博客 2020.10.11 ·
306 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Spring Boot 纯注解实现Bean的生命周期

最近在准备面试,有关Bean的生命周期被问到了,下来巩固一下,之前都是针对Spring在回答Bean的各项注意事项,由于现在Spring Boot用的更多,因此找了一些如何用纯注解实现的方式。首先是Bean的完整加载流程:接下来是代码实现(已经按照顺序):@Componentpublic class Person implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean
原创
发布博客 2020.09.15 ·
444 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

ConcurrentHashMap:学习总结

ConcurrentHashMapJDK 1.7JDK 1.7 是一个Segment数组总览:Segment内部有一个HashEntry[] table 的字段Segment数组大小默认是16Segment由DEFAULT_CONCURRENT_LEVEL决定,去找比DEFAULT_CONCURRENT_LEVEL大的2次幂HashEntry由DEFAULT_CONCURRENT_LEVEL和initialCapacity决定。通过两者相除后再向上取整每个Segment对象内
原创
发布博客 2020.07.30 ·
381 阅读 ·
1 点赞 ·
1 评论 ·
1 收藏

面向对象思想:学习总结

面向对象的设计思想封装封装的是数据和基于数据的操作 – 构成不可分割的实体隐藏内部细节,只**暴露对外的接口(方法)**使其与外部发生联系优点减少耦合:各个模块相互独立提升代码重用性降低程序风险:整个系统不可用,但是单个模块是可用的易于维护和性能分析典型例子:Java Bean (POJO)继承对象之间的is-A的关系。继承需要遵循里氏替换原则:子类对象可以完全替换父类多态编译时多态:方法的重载运行时多态:类型只有在真正运行的时候才会最终确认条件:继承:声
原创
发布博客 2020.07.28 ·
184 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据库学习:MySQL总结

MySQL学习总结B+ Tree 原理B Tree — Balance Tree。B树是一棵平衡树B+ Tree。这个"+",加的是叶子结点之间的指针。通过B树去划分区间,在叶子结点可以通过指针进行范围遍历。结点的key按升序进行排列查找:先从根节点开始进行二分查找,再在指针的位置上递归进行查找。直到找出key所对应的data与红黑树对比:(数据结构)B+树的高度更低:有效的减少了指针向下递归的层树。红黑树出度为2,而B+树的出度会很多(硬件优化)磁盘读写快:磁盘寻道的次数与
原创
发布博客 2020.07.26 ·
325 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

数据库:知识总结

事务ACID性质A – 原子性:整体事务只有全部失败或全部成功。通过恢复日志进行事务的回滚C – 一致性:事务操作前后的状态具有一致性。这是指满足开始和结束的时候受到的程序约束是一致的。一致性状态下,事务对同一个数据的读取结果都是相同的。这里的一致性是指系统从一个正确的状态,迁移到另一个正确的状态.什么叫正确的状态呢?就是当前的状态满足预定的约束就叫做正确的状态.而事务具备ACID里C的特性是说通过事务的AID来保证我们的一致性.I – 隔离性:数据执行事务操作时不能被其他事务操作。在提交
原创
发布博客 2020.07.24 ·
170 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

动态规划:学习总结

动态规划1.题目特点(1)计数- 有多少种方式走到右下角- 有多少种方法选出k个数使得和是Sum(2)求最大最小值从左上角走到右下角路径的最大数字和最长上升子序列长度(3)求存在性取石子游戏,先手是否必胜能不能选出k个数使得和是sum例题: Coin Change动态规划解题步骤确定状态两个意识:最后一步 & 子问题(1)最后一步:得出的最后结果一定是最优结果。通过最优结果去反推前面的结果(2)子问题:通过最后的结果去反推前面的各个子问题(
原创
发布博客 2020.07.19 ·
219 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashMap:学习总结

首先是HashMap的整体结构:主体采用数组进行存储。当数组处的节点产生碰撞,会向下延伸,生成一条链表当超过成树阈值(8)且数组长度大于64后,采用红黑树进行存储(红黑树的结构复杂,但是查找效率高)HashTable的创建jdk8以前:在创建的时候就会有一个Entry[] table来存储jdk8以后:会在第一次put方法被调用的时候创建Entry[] 数组数据的存储通过Key的hashCode方法计算出值,再通过某种算法计算出数组中存储数据的空间的索引值,如果没有数据
原创
发布博客 2020.07.14 ·
2943 阅读 ·
13 点赞 ·
5 评论 ·
99 收藏

字符串部分:子字符串查找

子字符串查找在母串中匹配对应的模式串(pattern)暴力查找public class PatternMatch { public static int search(String pat, String txt) { int M = pat.length(); int N = txt.length(); for (int i = 0; i <= N - M; i++) { int j; /
原创
发布博客 2020.07.10 ·
423 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

最短路径:学习总结

最短路径最小生成树是以无向带权图为基准,而最短路径则是以加权有向图为基准最短路径树给定一幅加权有向图和一个顶点s。以s为起点的一棵最短路径树是图的一幅子图,它包含s和从s可达的所有顶点。根节点为s,到叶子结点的每条路径和都是有向图中的一条最短路径基本数据结构:public class DirectedEdge { // 定义的是起始节点,互相不一定互通 private final int v; private final int w; private fin
原创
发布博客 2020.06.22 ·
1671 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

LeetCode刷题(二):树的递归部分

树 – 递归部分1.求树的高度 – :没什么难度,分别对左子树和右子树求高度,取两者的较大值。+1是为了囊括结点本身的高度public class MaxDepth_104 { public int maxDepth(TreeNode root) { if (root == null) return 0; // 分别递归求解左右子树的高度,注意最后需要加上结点本身的高度 return Math.max(maxDepth(root.left)
原创
发布博客 2020.06.16 ·
289 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

有向图:学习总结

有向图相较于无向图,有向图的边是带有方向性的。v→w,那么v的邻接点链表中会有w,但是w的邻接点链表不存在v。因此就邻接表来说,体现有向性是通过链表中的节点有无来实现的。public class Digraph { private final int V; private int E; // 边的有向性体现在结点添加时,不像之前无向图,两端结点可以互达。 // 有向图的节点是不一定可互达的 private Bag<Integer>[] adj;
原创
发布博客 2020.06.16 ·
929 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

无向图:学习整理

无向图使用的数据结构:邻接表:使用一个以顶点为索引的列表数组 – 每个元素都是和该顶点相邻的顶点列表空间和V+E成正比添加一条条边所需的时间为常数遍历顶点v的所有相邻顶点所需的时间和v的度数成正比基本数据结构:public class Graph { private final int V; private int E; private Bag<Integer>[] adj; //邻接表 public Graph(int V) {
原创
发布博客 2020.06.16 ·
357 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

红黑树:整理学习

红黑树红黑树定义红色结点均为左节点 – 红色结点与黑色结点合并会得到一个-3结点没有任何一个结点同时和两个红色结点相连任一空连接到根节点的长度和黑色结点的数目相同结点定义// 红色结点记为true,黑色记为falseprivate static final boolean RED = true;private static final boolean BLACK = false;// BST helper node data typeprivate class Node {
原创
发布博客 2020.06.15 ·
157 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JMM 理解

JMM 理解read:将主内存中的数据读取出来load:紧跟在read之后,将数据写入到线程内部的私有数据副本中use:线程内部的方法将调用数据副本中的数据进行操作assign:如果数据副本的值在方法中发生改变,那么又会调用assign将其复制给数据副本中的对应变量store:会先在主内存中开辟一块空间,将变量值传入到主内存中write:在这一步中才会将数据值真正的写入到主内存中lock:将一个主内存中的变量设置会线程私有unlock:将一个线程私有的变量释放,可以令其他线程访问到
原创
发布博客 2020.06.15 ·
200 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

堆排序:学习记录

堆排序核心要点:通过下沉的方式,自底向上进行建堆 ,可以保证当检测到有父节点的堆有序时,其所有子堆都是满足堆的成立条件。即父节点大于任意两个子节点下沉排序的过程,实质上是在删除最大元素后,堆的自我调整过程。调整的过程中,堆逐渐构成一个有序序列父节点的坐标是左子节点的一半,所以开头要减一。由于使用了一个完全二叉树,因此索引为0的位置不能有数public static void heapSort(int[] arr) { int N = arr.length - 1; // 建堆
原创
发布博客 2020.06.14 ·
161 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多