- 博客(96)
- 收藏
- 关注
原创 回溯算法实现矩阵最小权重路径-Java版本
矩阵拓扑:1 2 3 4 5 6 7 8 9 最小权重:21最小权重路径:[0, 0] [0, 1] [0, 2] [1, 2] [2, 2]
2024-11-26 14:26:59 229
原创 Java 数组 和 String相互转换
字符数组与字符串互转:使用或。字符串数组与字符串互转:使用或。整数数组与字符串互转:使用或手动转换。字节数组与字符串互转:使用或getBytes()。整数与字符串互转:使用或。这些方法能帮助你在 Java 中高效地进行数组和字符串之间的相互转换。
2024-11-22 00:49:16 238
原创 Java list
LinkedList提供了灵活的方式来处理链表中的元素。add()addFirst()addLast():添加元素。remove():移除元素。get()set():访问或修改元素。
2024-11-21 15:37:08 816
原创 Java Map
Java 中的Map是一个非常强大且常用的数据结构,用于存储键值对。常用的Mapput():插入或更新键值对。get():获取键对应的值。和:检查Map是否包含指定的键或值。remove():删除键值对。keySet()values()和entrySet():获取键集合、值集合和键值对集合。clear()isEmpty()size():清空、检查空集合和获取大小。HashMap和TreeMap是最常见的Map实现,它们各自有不同的特性,可以根据需要选择合适的实现。
2024-11-21 15:26:36 314
原创 java 数组
Java 中的数组是一个非常基础且常用的数据结构,了解它的常用操作是开发中必备的技能。获取数组的长度,访问和修改元素。使用Arrays类进行排序、填充、复制、比较等操作。使用for或增强型for循环遍历数组。使用工具类如来打印数组。虽然 Java 数组本身没有像集合框架那样丰富的方法,但通过结合Arrays工具类和基本的数组操作,我们可以方便地进行常见的数组处理。
2024-11-21 15:01:49 388
原创 Java String
String是不可变的,因此每次修改字符串时都会创建新的字符串对象。常用的字符串方法包括length()charAt()equals()indexOf()replace()split()等。对于大量字符串拼接,建议使用或。通过字符串常量池,Java 可以更高效地管理字符串的内存使用。这些方法和技巧帮助你有效地处理和操作字符串,适用于大多数常见的编程需求。
2024-11-21 14:34:42 757
原创 java Scanner
Scanner是一个非常强大的工具,适合用来处理用户输入和从文件中读取数据。通过使用next()nextLine()nextInt()等方法,你可以根据不同的需求读取不同类型的数据。记住在使用完Scanner后调用close()关闭它,以释放资源。
2024-11-21 14:10:42 480
原创 数据结构与算法总结
一、数据结构数组 链表 栈 队列 跳表 散列表 树 二叉树 B+ 树 红黑树 Trie 树 堆 图二、算法类型 算法 复杂度 原理 实现 排序 冒泡 排序 插入 排序 选择 排序 快速 快速排序-java版本-CSDN博客 排序 归并 排序 计数
2024-11-20 11:47:20 305
原创 图的搜索:BFS and DFS
广度优先搜索,通俗的理解就是,地毯式层层推进,从起始顶点开始,依次往外遍历。广度优先搜索需要借助队列来实现,遍历得到的路径就是,起始顶点到终止顶点的最短路径。深度优先搜索用的是回溯思想,非常适合用递归实现。换种说法,深度优先搜索是借助栈来实现的。在执行效率方面,深度优先和广度优先搜索的时间复杂度都是 O(E),空间复杂度是 O(V)。
2024-11-19 11:08:16 417
原创 【leecode-121】买股票的最佳时机 - java实现
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。在这种情况下, 没有交易完成, 所以最大利润为 0。买入这只股票,并选择在。
2024-11-17 17:46:18 175
原创 【leecode-88】合并两个有序数组-插入排序java实现
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。因为两个数组都有序,所以遍历第二个数组,插入到数组1的指定位置即可。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。需要合并的数组是 [] 和 [1]。个元素表示应合并的元素,后。需要合并 [1] 和 []。中,使合并后的数组同样按。合并结果是 [1]。
2024-11-16 08:53:00 182
原创 差分数组-实现区间强度算法
**`segments.put(from, segments.getOrDefault(from, 0) + amount)`**:在 `from` 点加上 `amount`,表示从 `from` 开始,强度增加 `amount`。- **`segments.put(to, segments.getOrDefault(to, 0) - amount)`**:在 `to` 点减去 `amount`,表示从 `to` 开始,强度停止增加 `amount`。3. 最后,我们通过差分数组恢复原数组。
2024-11-15 17:49:18 885 1
原创 https原理
加密对称加密秘钥一个(通讯双方用同一把要是加密解密)效率较高无法直接暴露在网络上传输非对称加密公钥+私钥(私钥加密,公钥解密;私钥server端自己持有,公钥发送给消费端;通讯双方相互都给对方自己的公钥,自己保留私钥,然后用自己私钥加密,对方用对应的公钥解密)如何确认别人给你的公钥是合法的:ca证书 ,向权威机构A获取对应的通讯端的公钥。=>如何证明A是合法的=>向更权威的机构B确认A是合法的=>...https步骤1,通过向权威机构获取证书,来获取对方
2020-11-05 11:39:31 218
原创 选举算法-redis集群
Raft[编辑]维基百科,自由的百科全书跳到导航跳到搜索关于木筏,请见“筏”。Raft是一种用于替代Paxos的共识算法。相比于Paxos,Raft的目标是提供更清晰的逻辑分工使得算法本身能被更好地理解,同时它安全性更高,并能提供一些额外的特性。[1][2]:1Raft能为在计算机集群之间部署有限状态机提供一种通用方法,并确保集群内的任意节点在某种状态转换上保持一致。Raft算法的开源实现众多,在Go、C++、Java以及Scala中都有完整的代码实现。Raft这一名字来源于"Reli...
2020-11-05 11:28:32 1030
转载 图解 TCMalloc
前言TCMalloc是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配。它具有现代化内存分配器的基本特征:对抗内存碎片、在多核处理器能够 scale。据称,它的内存分配速度是 glibc2.3 中实现的 malloc的数倍。之所以学习 TCMalloc,是因为在学习 Golang 内存管理的时候,发现 Golang 竟然就用了鼎鼎大名的 TCMalloc,而在此之前虽然也对内存管理有过一些浅薄的了解,但一直没有机会深入。因此借此机会再巩.
2020-10-29 23:55:18 348
原创 mysql主键索引为什么用B+树而非B树,红黑树等
接下来我们就通过了解B+树去全面解决这几个问题。一、B+树的数据结构树的概念我的就赘述了,其他文章都写的非常清楚了。我们要注意的一个点:InnoDB和MyIsam在存储的区别。InnoDB主键索引的存储结构是:叶子节点存储了主键值和其他字段数据值其他索引的存储结构是:叶子节点存储了索引值和主键索引值区别是其他索引存的是主键索引值MyIsam索引的存储结构是:叶子节点存储了主键值和数据记录的地址主键索引和其他索引存储结构是一样的说B+树之前先说说B树,B+树是在B树基础上
2020-10-29 23:24:54 1149
转载 为什么Redis集群有16384个槽
我在《那些年用过的Redis集群架构(含面试解析)》一文里提到过,现在redis集群架构,redis cluster用的会比较多。如下图所示对于客户端请求的key,根据公式HASH_SLOT=CRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作!那大家思考过,为什么有16384个槽么?ps:CRC16算法产生的hash值有16bit,该算法可以产生2^16-=65536个值。换句话说,值是分布在0~65535之间。那作者在做mod运算的时候,为什么不
2020-10-29 11:15:34 178
转载 redis集群
本文实现环境centos 7.3 redis 4.0 redis工作目录 /usr/local/redis 所有操作均在虚拟机模拟进行一、集群简介集群是为了解决主从复制中单机内存上限和并发问题,假如你现在的云服务内存为256GB,当达到这个内存时redis就没办法再提供服务,同时数据量能达到这个地步写数据量也会很大,容易造成缓冲区溢出,造成从节点无限的进行全量复制导致主从无法正常工作。那么我们就需要把单机的主从改为多对多的方式并且所有的主节点都会连接在一起互相通信。这样的方式既可以分
2020-10-29 11:02:59 299
原创 nginx负载均衡配置
负载均衡 - 配置 # 首先,你要有两台或以上可以提供相同服务的Web服务器,不然这个负载均衡配置就没有意义! # 在配置过程中只需要改代理服务器的配置就行,其他服务器不用管。 - vim /usr/local/nginx/conf/nginx.conf # 在http下添加如下代码 upstream item { # item名字可以自定义 server 192.168.101.60:81 参数
2020-10-28 14:32:02 259
原创 堆和栈
堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:(1)程序内存布局场景下,堆与栈表示两种内存管理方式;(2)数据结构场景下,堆与栈表示两种常用的数据结构。1.程序内存分区中的堆与栈1.1 栈简介栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈。参考如下代码:int main() { int b; //栈 char s
2020-10-27 21:42:40 2871
原创 什么是队头阻塞以及如何解决
前言通常我们提到队头阻塞,指的可能是TCP协议中的队头阻塞,但是HTTP1.1中也有一个类似TCP队头阻塞的问题,下面各自介绍一下。TCP队头阻塞队头阻塞(head-of-line blocking)发生在一个TCP分节丢失,导致其后续分节不按序到达接收端的时候。该后续分节将被接收端一直保持直到丢失的第一个分节被发送端重传并到达接收端为止。该后续分节的延迟递送确保接收应用进程能够按照发送端的发送顺序接收数据。这种为了达到完全有序而引入的延迟机制非常有用,但也有不利之处。假设在单个TCP连接上
2020-10-25 23:25:10 2159
原创 描述一次完整请求
请求浏览器输入url地址,url地址为统一资源定位符,有着标准的格式,浏览器能够识别,可以统一处理。(应用层HTTP) 浏览器把url域名发送给dns服务器,dns服务器解析域名返回IP地址。(应用层HTTP) 因为http协议是基于tcp协议,接下来要建立tcp协议:三次握手建立tcp协议。(目前使用的 HTTP 协议大部分都是 1.1。在 1.1 的协议里面,默认是开启了 Keep-Alive 的,这样建立的 TCP 连接,就可以在多次请求中复用。)(传输层TCP) tcp连接建立以后,浏览器
2020-10-25 23:24:09 138
原创 问题汇总
KS调度机器人顶举指定容器的商品到指定站点,完成【分拣投递】并打包出库流程。FWA模型主要是登记作业动作,并进行库存维护,触发订单状态扭转。 Flip AGV子仓: 借鉴Go GMP并发模型思想,设计分拣投递系统。 SocketGateWay缓存池:避免重复连接和连接复用。数据层面:32个站点,8秒做一次投递任务,一小时产能为:3600/8 * 32 = 1.44万件QPS:1/8*32=4 ---- 1*32=32 = 4—32之间JDBUV:1.3亿日活:130..
2020-09-02 11:04:33 1225
原创 常用负载均衡模式
1. 集中式LB(Proxy Model)集中式LB.png在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现。LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向LB发起请求,由LB以某种策略,比如轮询(Round-Robin)做负载均衡后将请求转发到目标服务。LB一般具备健康检查能力,能自动摘除不健康的服务实例。 该方案主要问题:单点问题,所有服务调用流量都经过LB,当服务数量和调用量
2020-07-09 15:24:23 1488
原创 算法练习
链表反转,非递归实现func resv4(head *LinkedNode) (nn *LinkedNode) { var pre, next *LinkedNode for head != nil { next = head.nextNode // 1.next先指向第二个节点,node为当前节点 head.nextNode = pre // 2.反转当前的链表 pre = head // 3.保存当前节点为上一个节点,共下次反转使用 head = ne
2020-07-08 23:36:44 107
转载 Nginx服务器的内部核心架构设计
前言Nginx 是一个 免费的,开源的,高性能 的 HTTP 服务器和 反向代理,以及 IMAP / POP3 代理服务器。 Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。Nginx是一个 Web 服务器,也可以用作 反向代理,负载均衡器 和 HTTP 缓存。正文1. Nginx的整体架构1.1. 主进程Nginx 启动时,会生成两种类型的 进程*,一个是 主进程(master),一个(windows 版本的目前只有一个)或 多个工...
2020-07-01 18:20:44 182
原创 TCP/IP四层模型
TCP/IP 网络分层模型还是先从 TCP/IP 协议开始讲起,一是因为它非常经典,二是因为它是目前事实上的网络通信标准,研究它的实用价值最大。TCP/IP 当初的设计者真的是非常聪明,创造性地提出了“分层”的概念,把复杂的网络通信划分出多个层次,再给每一个层次分配不同的职责,层次内只专心做自己的事情就好,用“分而治之”的思想把一个“大麻烦”拆分成了数个“小麻烦”,从而解决了网络通信的难题。你应该对 TCP/IP 的协议栈有所了解吧,这里我再贴一下层次图。TCP/IP 协议总共有四层,就像搭积木
2020-07-01 15:26:23 12944
转载 redis主从同步
什么是主从复制持久化保证了即使 redis 服务重启也会丢失数据,因为 redis 服务重启后会将硬盘上持久化的数据恢复到内存中,但是当 redis 服务器的硬盘损坏了可能会导致数据丢失,如果通过 redis 的主从复制机制就可以避免这种单点故障,如下图:说明:主 redis 中的数据有两个副本(replication)即从 redis1 和从 redis2,即使一台 redis 服务器宕机其它两台 redis 服务也可以继续提供服务。主 redis 中的数据和从 redis 上的.
2020-06-30 11:02:28 184
转载 进程间通信IPC
IPCInterProcess Communication一、进程间通信的概念每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)进程间通信模型二、进程间通信的7种方式第一类:传统的Unix通信机制1. 管道/匿名管道(pi.
2020-06-29 22:59:15 314
原创 判断二叉树是否镜像对称,编程实现
思想:若此树就一个节点或者没有节点,则为对称。 若此树不值一个节点,则分别比较其左节点和右节点的值。 然后在比较左节点和右节点的比较中,在分别比较,左节点的左子树跟右节点的右子树,左节点的右子树,跟右节点的左子树是否对称相等。 同时注意,左节点为空和左节点不为空右节点不为空场景。type Tree struct { Data interface{} Left *Tree Right *Tree}/*判断二叉树是否镜像对称,编程实现*/func MirrorTree(tree T
2020-06-28 04:30:57 422
原创 实现一个最大栈,包含Push、Pop、Max方法,Max方法要求返回当前栈内最大元素值
简单版package mainimport "fmt"type Stack struct { Value []int MaxV int MinV int}func (this *Stack) Push(i int) { this.Value = append(this.Value, i) if i > this.MaxV { this.MaxV = i } if this.MinV == 0 || i < this.MinV { this.MinV
2020-06-28 03:52:28 731
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人