- 博客(24)
- 收藏
- 关注
原创 20220825每日一题:力扣658.找到k个最接近的元素
给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。由于题目中数组是已经排序好的,因此最靠近x的数应该是分布在x两侧的连续k个数。由于答案一定为连续的数组,因此可以采用双指针的方式,从数组两端向中间逼近,确定最终数组位置。...
2022-08-25 19:46:48
342
原创 20220817每日一题:力扣层数最深叶子节点的和
在该题,只需解决以上两个问题。因此简单实现可以通过一遍遍历确认最大深度,再一次遍历统计叶子节点和,完成该题。考虑到该题涉及树深度,因此直观思路通过层序遍历树结构,取最深层并把节点数累加,即为最终答案。一般来说,树,图的相关操作除了BFS(广度优先外),还能考虑从DFS(深度优先角度做)。可以做到用一次遍历完成任务。,请你返回 层数最深的叶子节点的和。给你一棵二叉树的根节点。
2022-08-18 16:51:47
251
原创 JVM-参数汇总(持续更新)
在我们生产中,常常涉及JVM性能调优。这里整理汇总了部分常见的参数,后续会对各参数进行实验测试(持续更新ing)JVM参数主要分为三类,标准参数(一般以-开头),非标准参数(一般以-X开头)和非Stable参数(一般以-XX开头)关于JVM选项的几点:1)布尔型参数选项:-XX:+ 打开,-XX:- 关闭。(比如-XX:+PrintGCDetails)**2)数字型参数选项:**通过-XX:=设定。数字可以是m/M(兆字节),k/K(千字节),g/G(G字节)。比如:32K表示32768字节。**3)字符行
2022-06-29 21:38:49
291
原创 深入探索String、StringBuffer和StringBuilder区别(源码 + 代码验证)
String、StringBuffer和StringBuilder都是Java中用来表示字符串的。在Java中,String类是一个不可变类,任何对String的改变都会引发新的String对象的生成。StringBuffer和StringBuilder则都是可变类,任何对他所指代的字符串都不会产生新的对象。StringBuilder是Java5后提出来的,与StringBuffer相比,StringBuilder有更高的执行效率,但其不是线程安全的。1. 性能对比下面对String,StringBuf
2022-04-11 19:15:00
2794
原创 20220321每日一题:力扣653.两数之和IV - 输入BST
题目给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。示例输入: root = [5,3,6,2,4,null,7], k = 9输出: true输入: root = [5,3,6,2,4,null,7], k = 28输出: false解法一:基于Set查询由于题目仅涉及到两数相加,且当其中一个数确定为x,仅需判断搜索树中是否存在另一个元素k - x即可。因此我们可以通过构建一个Set存储树结构内所有元素,
2022-03-21 14:21:54
665
原创 Java基础(一)-ArrayList和LinkedList性能对比与原因探索
今天学习的时候,看到一篇文章,说LinkedList的作者自己不用LinkedList,感觉十分的吃惊。本着实践出真知的态度,立刻写了几行代码用于测试ArrayList和LinkedList的在增删查改四大方面的性能对比(测试所有代码放在文末)。经过一番测试后,我得到了如下的对比图(由于随即插入,查找,删除,修改等操作LinkedList的时间简直慢得令人发指,因此只测试了在大量数据情况下对少量数据的更改操作):有意思的是,在我们学习数组和链表上,经常有如下结论:数组随机访问快,但随即插入删除
2022-03-18 14:08:48
977
原创 20220314每日一题:力扣599.两个列表的最小索引总和
题目假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。示例输入: list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["Piatti", "The Grill at Torrey Pines", "Hungry Hun
2022-03-14 16:58:45
1016
原创 20220310每日一题:力扣589.N叉树的前序遍历
题目给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。示例输入:root = [1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:[1,2,3,6,
2022-03-10 16:34:36
174
原创 Java容器遍历--List,Set,Map
在日常编码中常常需要对Java的常用容器进行遍历,这里对List,Set,Map的常用遍历方法进行汇总。在Java基础容器篇中,我们了解到Iterator是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。Collection的实现类都要实现iterator()函数,返回一个Iterator对象。因此我们可以考虑使用迭代器遍历Collection的容器。对于Map容器,因为没有继承Collection类,因此我们无法直接使用Iterator进行遍历。但是在Map中提供了一个entrySet
2022-03-08 14:12:51
153
原创 MongoDB--集群模式
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。MongoDB集群MongoDB 有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set
2022-03-02 16:31:38
2342
原创 220226每日一题:力扣2016.增量元素之间的最大差值
题目给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -1 。示例输入:nums = [7,1,5,4]输出:4解释:最大差值出现在 i = 1 且 j = 2 时,nums[j] - nums[i] = 5 - 1 = 4 。注意,尽管 i =
2022-02-26 17:27:00
483
原创 20220.25每日一题:力扣537.复数乘法
题目复数 可以用字符串表示,遵循 “实部+虚部i” 的形式,并满足下述条件:实部 是一个整数,取值范围是 [-100, 100]虚部 也是一个整数,取值范围是 [-100, 100]i2 == -1给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串。示例输入:num1 = "1+1i", num2 = "1+1i"输出:"0+2i"解释:(1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2
2022-02-25 15:24:41
104
原创 220218每日一题:力扣1791.找出星型图的中心节点
题目有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。示例输入:edges = [[1,2],[2,3],[4,2]]输出:2解释:如上图所示,节点 2 与其他每个节点都相连,所以节点 2 是中心节点。解法一:分
2022-02-18 13:57:06
150
原创 220217每日一题:力扣688.骑士在棋盘上的概率
题目在一个 n x n 的国际象棋棋盘上,一个骑士从单元格 (row, column) 开始,并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0,0) ,右下单元格是 (n - 1, n - 1) 。象棋骑士有8种可能的走法,如下图所示。每次移动在基本方向上是两个单元格,然后在正交方向上是一个单元格。每次骑士要移动时,它都会随机从8种可能的移动中选择一种(即使棋子会离开棋盘),然后移动到那里。骑士继续移动,直到它走了 k 步或离开了棋盘。返回 骑士在棋盘停止移动后仍留在棋
2022-02-17 16:59:03
342
原创 220214每日一题:力扣540.有序数组的单一元素
题目给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。示例输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2输入: nums = [3,3,7,7,10,11,11]输出: 10解法一:暴力最简单直观的解法自然是暴力解法。考虑到除了一个数字外,其余元素均会出现两次。因此可以考虑使用异或进行运算去重,找出单一值。具体实现
2022-02-15 11:00:28
6742
原创 Java基础-反射
在了解Java反射机制前,我们先来聊聊Java程序的执行流程。Java程序在运行时必须经过编写、编译和运行三个步骤:编写:是指在Java开发环境中进行程序代码的输入,最终形成后缀名为.java的源文件;编译:是指使用Java编译器对源文件进行错误排查的过程,编译完成后将生成后缀名为.class的字节码文件;运行:是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。其主要流程如下图所示:字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码。它是一种二进制文件,是 Jav
2022-02-14 22:59:27
67
原创 Redis架构基础(一)
Redis简介Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可给予内存亦可持久化的日志型、Key-Value数据库,并提供多语言的API。Redis支持存储的value类型很多,包括string,list,set,zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集操作,且这些操作满足原子性。为了保证效率,数据都是缓存在内存中,redis会周期性的把更新的数据写入磁盘或者把修改操
2022-01-28 13:37:58
183
原创 Java基础(一)-容器篇(Map专题)
在上一篇章中,我们对Java的基本容器类有了一个比较全面的了解,Java为数据结构中的映射定义了一个借口java.util.Map。此借口主要有四个常用的实现类。分别是HashMap、HashTable、LinkedHashMap和TreeMap。一、HashMap、HashTable、LinkedHashMap与TreeMap概述(1) HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条
2022-01-22 20:13:58
466
原创 220119每日一题:力扣219. 存在重复元素II
220119每日一题:力扣219. 存在重复元素II题目给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。示例输入:nums = [1,2,3,1], k = 3输出:true输入:nums = [1,0,1,1], k = 1输出:true解法一:暴力最直观的解法自然是我们的暴力解法,遍历数组,并查
2022-01-19 17:38:50
685
原创 Java基础(一)–容器篇
Java基础(一)–容器篇容器,是Java中封装的一批用于数据存储处理的工具类。在Java中,其容器主要可以划分为4个部分:List列表类、Set集合类、Map映射类和其余工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。容器类UML类图通过上图,我们可以把Java中容器类主要分为两个基本主体,Collection和Map。Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。Collection包含了List和S
2022-01-17 20:15:25
516
原创 2021-07-09
Sleuth基本知识概述&简介 随着业务的发展,单体架构变为微服务架构,并且系统规模也变得越来越大,各微服务间的调用关系也变得越来越复杂。在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败。Spring Cloud Sleuth为Spring Cloud实现了分布式的跟踪解决方案。Sleuth提供了以下功能:链路追踪:通过Sleuth可以很清楚的看出一个请求都通过了哪些服务,可以
2021-07-09 10:16:46
71
原创 2020-08-16
评论系统实现评论系统的方式有很多,常见的有gitalk,gitter,Valine,disqus等。本人使用的是Valine。它是基于leancloud的无后端评论系统,支持MarkDown语法,较安全快速。获取LeanCloud的APP ID和APP Key在LeanCloud中注册一个账号,并选择创建应用,填写你的应用名称,选择开发版后点击创建。进入创建的应用,点击存储,并创建Comment类(属性为默认值)然后进入设置栏安全中心板块,关闭除数据存储外的所有服务,最后点击应用Key获得Ap
2020-08-18 15:40:11
158
原创 2020-08-15
上一章已经简单的介绍了如何通过hexo搭建简单的博客,这一章我们将介绍如何美化我们的博客。域名绑定1.申请一个域名在服务器启动hexo之后,我们可以直接通过服务器的IP+端口(默认4000)访问我们的博客,由于ip比较难记,使用不太方便,这里可以去申请一个域名(可在阿里云、京东云、腾讯云等申请)对我们的服务器ip进行绑定,这里以腾讯云为例,绑定流程如下:注:第一次注册域名,需要登记完善个人信息,否则无法正常使用进入后按照要求输入服务器ip地址即可。域名绑定完服务器ip后,我们可以直接通过访
2020-08-15 23:27:36
85
原创 2020-08-13
Centos使用HEXO框架搭建第一个个人博客本人是小白,第一次尝试搭建自己的个人博客,总结了以下步骤,欢迎大家探讨交流。下载安装git下载并安装gityum install git配置用户名和邮箱信息(此处的username和email应该与github上的相同)#配置用户名git config --global user.name “username”#配置邮箱git config --global user.email “email”下载安装Node.js这里需要
2020-08-13 23:23:43
116
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人