自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 一个算法题引发思考:字符串遍历string.charAt(i)与achar[i]的算法效率解惑

很明显效果变好了,所以不得不联想到JVM的内存区域已经内存模型的思想,我们在执行一个方法的时候,首先会方法入栈,然后就是方法内部的变量入栈,遇到方法就会周而复始的操作,直到执行完最后一步,方法和属性依次弹栈。总结:在算法题中,尽可能避免出现方法入栈的情况,因为其方法入栈后会创建对应的栈帧包含了局部变量表、操作数栈、动态链接、方法返回地址等信息,也就是栈帧会在方法的执行过程中存储相关数据,占用内存。在上面《解答:字符串双指针》的代码中,可以看到.length()和.charAt()方法总共6次方法入栈。

2023-08-17 10:58:06 99

原创 LeetCode算法:12. 整数转罗马数字

罗马数字符号罗马数字由 7 个不同的单字母符号组成,每个符号对应一个具体的数值。此外,减法规则(如问题描述中所述)给出了额外的 6 个复合符号。这给了我们总共 13 个独特的符号(每个符号由 1 个或 2 个字母组成),如下图所示。罗马数字的唯一表示法让我们从一个例子入手。考虑 140 的罗马数字表示,下面哪一个是正确的?我们用来确定罗马数字的规则是:对于罗马数字从左到右的每一位,选择尽可能大的符号值。对于 140,最大可以选择的符号值为 C=100。

2023-04-28 11:27:52 355

转载 使用 Java 携手 SpringBoot + PhantomJS + ECharts 在服务端生成图表并存为图片

随着前端技术越来越成熟,许多公司的项目也转为了前后端分离框架,而最常用的图表组件(Echarts )也非常成熟的与 Vue 结合起来。但是,最近接到了一个非常奇葩的需求,要求用 Java 在服务端生成图表,并转为图片,用于媒体分享和邮件传送!作为一个 “资深” 的 Java 开发工程师,我能被这点小事难住吗?官方介绍:PhantomJS是一个基于 WebKit 的服务器端JavaScript API。

2023-03-27 17:05:33 1145 1

原创 LeetCode算法:1758. 生成交替二进制字符串的最少操作数

当输入开头为 00000000 时, 从0开始为01为0, 10的次数为0,总长度为8,最少需要变换 (8-0*2)/2=4 次。当输入开头为 0100 时, 从0开始为01为1, 10的次数为0,总长度为4,最少需要变换 (4-1*2)/2=1 次。当输入开头为 1111 时, 从0开始为01为0, 10的次数为0,总长度为4,最少需要变换 (4-0*2)/2=1 次。当输入开头为 01 时, 从0开始为01为1, 10的次数为0,总长度为2,最少需要变换 (2-1*2)/2=0 次。

2022-11-29 16:24:51 175

原创 LeetCode算法:1025. 除数博弈(怀疑算法有问题)

为什么怀疑呢?是因为官方的数学推论与归纳总结的解法,我发现了一个从n=4的时候,就与结论的解法结果不一致,但官方的解法却盘为正确,故而怀疑算法有问题或算法题本身有问题?

2022-11-28 22:26:09 166

原创 消息中间件RabbitMQ入门到进阶【RE】

MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。MQ是消息通信的模型;实现MQ的大致有两种主流方式:AMQP、JMS。AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。

2022-11-14 11:47:09 242

原创 Docker快速入门到进阶【RE】

入门篇:docker快速上手,包含docker安装、进程相关指令、镜像相关指令、容器相关指令、docker容器数据卷、常用应用容器部署、拉去镜像等;进阶篇:dockerfile、自定义镜像、服务编排等概念和原理,如何使用docker搭建私有仓库等

2022-11-11 14:25:02 327

转载 快速入门Lambda表达式【RE】

我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:在Java 8之前,这个是做不到的。但是Java 8问世之后,利用Lambda特性,就可以做到了。JDK8新特性之Lambda表达式。当然,这个并不是一个很简洁的写法。所以,为了使这个赋值操作更加elegant, 我们可以移除一些没用的声明。这样,我们就成功的非常优雅的把“一块代码”赋给了一个变量。

2022-11-07 16:50:36 148

原创 netty之TCP客户端与服务端非阻塞IO代码记录

netty之TCP客户端与服务端非阻塞IO代码记录。

2022-10-18 15:51:15 364

原创 项目面试之自测知识点:2022-3-16

1、ArrayList和LinkedList(加Vector)的区别?这三者都是实现集合框架中的 List 接口,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供搜索、添加或者删除的操作,都提供迭代器以遍历其内容等功能。数据结构实现:ArrayList 和 Vector 是动态数组的数据结构实现,而 LinkedList 是双向循环链表的数据结构实现。随机访问效率:ArrayList 和 Vector 比 LinkedList 在根据索引随机访问的时候效率要高,因为 LinkedList 是

2022-03-17 00:04:07 2264

转载 项目面试经验

问题二:谈谈你的项目吧!1.分析:考官通过看你的简历或者你的介绍来了解你所做的项目,那么考官肯定想更详细的了解你的项目,看是不是与你的简历写的项目经验一致。也就是考核你是否具有真实的项目经验。一般来说,在你的简历至少有一个重点项目,放在简历项目经验栏的第一位。把项目的业务功能描述清楚。在这里你就是重点谈一个项目就可以了。 从下面几个方面来进行陈 述1. 用一句话简述项目2. 详细的列出项目实现的功能3. 说出项目实现的技术和架构,能说出项目的不寻常之处,比如采用了某项新技术,采用 了良好的架框等

2022-03-04 13:52:58 817

原创 LeetCode算法:1447.最简分数

力扣第1447题:最简分数给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 。分数可以以 任意 顺序返回。示例 1:输入:n = 2输出:["1/2"]解释:"1/2" 是唯一一个分母小于等于 2 的最简分数。示例 2:输入:n = 3输出:["1/2","1/3","2/3"]示例 3:输入:n = 4输出:["1/2","1/3","1/4","2/3","3/4"]解释:"2/4" 不是最

2022-02-14 23:04:14 212

原创 LeetCode算法:2.两数相加

力扣第2题:两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,

2022-02-14 23:01:30 73

原创 LeetCode算法:1.两数之和

力扣第1题:1. 两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6输出:[1,2]示例 3:输入:nums = [

2022-02-14 22:55:36 269

原创 MySQL死锁的产生和解决方法?

MySQL死锁的产生和解决方法?本文总结整理转载自:https://blog.csdn.net/qq_34107571/article/details/78001309、https://blog.csdn.net/qq_16681169/article/details/74784193、https://blog.csdn.net/qq_16681169/article/details/73359670什么时死锁?死锁是2+个线程在执行过程中, 因争夺资源而造成的相互等待的现象,若无外力作用,它们将无法

2022-02-14 21:49:28 15691

原创 MySQL的批量更新和批量新增优化

如果需要批量插入和批量更新操作就需要进行sql 的优化,否则近30万条数据的插入或更新就会耗费几分钟甚至更多的时间, 此文仅批量插入和批量更新的几种优化。(1)批量插入篇(使用多条`insert`语句、使用`union all `创建临时表、使用多个values);(2)批量更新篇(使用多条`update`语句、使用`union all `创建临时表创建临时表、使用`replace into`、使用`insert ... on duplicate key ... update...`)。

2021-06-20 20:27:13 7751 4

原创 ZipOutputStream:关于文件下载打包成zip的另一种做法

概述:在对老项目进行优化时,发现其数据下载时有很大问题的,如果excel标签名重名就会导致数据写入excel失败, 所以开始优化分类打包下载excel的压缩包文件。在优化的过程中一直在思考, 如何不通过磁盘IO向客户端直接输出压缩包文件,从而发现一种较为方便迅速的方式。对于批量打包下载的方式,查询了大量资料都是将对应的文件写入磁盘中,在对磁盘的文件进行压缩等流操作,再对压缩文件进行response相应输出,各种操作相对繁琐。在这里退出另一种内存级别的操作:快速,方便。相关的源码注释也写的很详细,如果大佬

2020-12-22 17:31:07 1242 1

转载 玩转Redis:8 种数据淘汰策略及近似LRU、LFU原理!

玩转Redis:8 种数据淘汰策略及近似LRU、LFU原理![石杉的架构笔记](javascript:void(0)????以下文章来源于zxiaofan ,作者zxiaofanzxiaofan学习,思考,沉淀,成长。大纲为什么Redis需要数据淘汰机制?Redis的8种数据淘汰策略Redis的近似LRU算法LRU算法原理近似LRU算法原理(approximated LRU algorithm)Redis的LFU算法LFU与LRU的区别LFU算法原理小

2020-12-04 09:34:37 560

原创 Kafka和RabbitMQ面试13问

(1)Kafka、RabbitMQ他们有类似的数据分片机制吗?他们是如何把一个逻辑上的数据集合概念(比如一个Topic)给在物理上拆分为多个数据分片的?然后拆分后的多个数据分片又是如何在物理的多台机器上分布式存储的?(2)为什么一定要让MQ实现数据分片的机制?如果不实现数据分片机制,让你来设计MQ中一个数据集合的分布式存储,你觉得好设计吗?(3)同步刷盘和异步刷盘两种策略,分别适用于什么不同的场景呢?(4)异步刷盘可以提供超高的写入吞吐量,但是有丢失数据的风险,这个适用于什么业务场景?在你所知道的业务

2020-11-20 15:57:50 728 1

转载 Redis学习笔记

Redis学习入门介绍入门概述1. redis是什么?Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候

2020-09-29 09:43:19 79

转载 SpringBoot 居然有 44 种应用启动器

SpringBoot 居然有 44 种应用启动器转自微信公众号: [搜云库技术团队](javascript:void(0)????啥是应用启动器?SpringBoot集成了spring的很多模块,比如tomcat、redis等等。你用SpringBoot搭建项目,只需要在pom.xml引入相关的依赖,和在配置文件中简单的配置就可以使用相应模块了。非常方便,spring boot集成了哪些启动器呢?SpringBoot应用启动器基本的一共有44种,具体如下:1)spring-boot-starter

2020-09-28 19:08:51 177

原创 Redis面试要点记录

一、Redis面试要点记录1.什么是rdb?rdb 称之为redis 的持久化方案之一,当满足3个默认条件时,会生成一个dump.rdb(以二进制的方式进行存储的),当需要恢复数据时,就去加载dump.rdb,进行数据的回复2.三个条件1 10000 // 1秒10000次存储300 10 // 300秒10次存储900 1 // 900秒1次存储3.redis持久化指令save :阻塞bgsave : 异步也会阻塞一会:fork进程 出来的这个过程会

2020-09-28 18:58:30 148

原创 Redis常用命令-笔记记录

一、Redis下载与安装1 、基于Center OS7安装Redis(1) 下载安装包wget http://download.redis.io/releases/redis-5.0.0.tar.gz(2) 安装环境yum install gcc-c++(3) 解压安装包tar –xvf redis-5.0.0.tar.gz(4) 编译(在解压的目录中执行)make(5) 安装(在解压的目录中执行)make install(6) 服务器启动命令redis-server

2020-09-28 09:33:50 113 1

原创 分页查询PageHelper中SQL语句使用HAVING报错Unknown column ‘xxx‘ in ‘having clause‘的原因分析及解决方法

概述当我们在做SQL语句做条件查询,在条件查询中使用having做条件筛选时,会出现Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'memberName' in 'having clause'; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:

2020-09-25 14:14:40 9884 6

原创 HashMap-1.8 之初始化容量与参数设置(源码分析)

阿里巴巴规范声明: 在使用HashMap是强制初始化容量, 其实就是为系统西能做优化,保证数据的安全性,但在实际初始化容量时,如何设定初始化容量值,最为合适呢?这里带你来分析···

2020-09-22 13:10:31 1183

原创 SSM整合之 XML + 注解(已整合)

SSM整合之 XML + 注解(已整合)概述: 本文的SSM项目搭建整合Spring、SpringMVC、MyBatis是完整模式, 后面有集体的步骤1. SSM整合项目环境开发环境: Jdk1.8_261, Windows10, Maven3.63, Idea2020.12. 整体目录结构1) 项目结构src.mainjava.com.xxxresourcecom.xxx.daouserDao.xmlapplicationContext.xmljdbc.proper

2020-08-31 16:46:44 255

空空如也

空空如也

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

TA关注的人

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