- 博客(109)
- 收藏
- 关注
原创 idea设置JVM运行参数调优 体验优化
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms256m -Xmx256m -Xss512k -XX:+UseConcMarkSweepGC添加完成后,点击apply ok就设置成功了,重启项目
2020-12-30 21:52:44 629
原创 SpringCloud与Dubbo的区别
1.SpringCloud与Dubbo的区别两者都是现在主流的微服务框架,但却存在不少差异:初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案;Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理生态环境不同:SpringCloud依托于Spring平台,具备更加完善的生态体系;而Dubbo一开始只是做RPC远程调用,生态相对匮乏,现在逐渐丰富起来。调用方式:SpringCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用
2020-10-21 23:09:41 75640 7
原创 MyBatis与Hibernate有何不同?
在Hibermate当中,开发者只需要定义好数据库的表字段和Java DO的映射关系和规则即可,Hiberate会开放出来接口自动去处理数据库表的CURD,并按照规定好的规则映射到DO对象中,这个过程中操作者是完全不需要感知Sal逻辑的。2.正是因为Mybatis需要自己编写Sal逻辑,这是一个包袱,因为开发者需要根据不同的DB,选择不同的SQL语句(DB移植性不高),而且正是因为要自己写SQL,项目初期的开发工作量要比Hibermate大一点。增加开发者的开发效率。
2024-12-02 10:31:41 153
原创 InnoDB的一次更新事务是怎么实现的?
Undo Log是用来保证事务原子性和一致性的一种机制,用于在发生事务回滚等情况时,将修改操作回滚到修改前的状态,以达到事务的原子性和一致性。:在提交过程后,InnoDB会将Buffer Pool中的脏页写入磁盘,以保证教据的持久性。但是这个写入过程并不是立即执行的,是有一个后台线程异步执行的,所以可能会延迟写入,总之就是MYSQL会选择合适的时。:InnoDB在Buffer Pool中记录修改操作的同时,InnoDB 会先将修改操作写入到 redolog buffer 中。机把数据写入磁盘做持久化。
2024-12-02 09:56:52 201
原创 什么是撞库、拖库和洗库?
(小偷想办法进入室内)(小偷盗走值钱的东西)由小偷想要入室盗窃的前提就是可以入室,那么,在互联网中,黑客一般都是利用网站自身存在的漏洞来入侵的。这里说的网站漏洞包括网站应用自身的漏洞、网站使用的WEB服务器的漏洞、网站使用的开源框架中的漏洞、网站使用的数据库漏洞等。黑客还有可能会利用系统漏洞,在特定的网站上进行挂马,如果网站管理员在维护系统的时候不小心访问到这些网站,就可能被植入木马,也会引发后续的拖库风险。“洗库”,属于黑客入侵的一种,就是黑客入侵网站,通过技术手段将有价值的用户数据归纳分析,售卖变现。
2024-11-29 17:17:43 469
原创 什么是中间人攻击?
中间人攻击(Man-in-the-middle attack,缩写:MITM)在密码学和计算机安全领域中是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。:通常,当您尝试连接或访问不安全的HTTP://站点时,您的浏览器会自己将您重定向到安全的HTTPS://处此时,攻击者则可以劫持该重定向的过程,将指向其自建服务器的链接植入其中,进而窃取您的敏感数据、以及输入的所有信任凭据。
2024-11-29 10:37:20 181
原创 String的设计,用到了哪些设计模式?
当创建一个新的字符串对象时,会先在字符串池中音找是否已经存在相同的字符串常量,如果存在,则直接返回该常量的引用;,即一旦创建了一个字符串对象,就不能再修改其内容。这是通过将String类中的字符数组定义为private final的方式实现的,即该字符数组一旦被初始化,就不能再修改其内容,保证了字符串对象的不可变性。这种共亭字符串常量的机制可以大大减少内存的使用,因为同一个字符串常量在内存中只会存在一份拷贝,而不同的字符串对象可以共享同一个字符串常量,避免重复创建相同的字符串对象。
2024-11-28 10:02:29 636
原创 请简述MVC模式的思想
这个模式的目的是将应用程序的表示(视图)与处理(控制器)分开,以及将应用程序的数据和业务逻辑(模型)与表示和处理分开。:表示应用程序的处理逻辑,用于控制视图和模型之间的交互。控制器通常包含一些事件处理和动作触发等操作,用于响应用户的输入或视图的变化,并对模型进行操作。控制器通过将用户的输入转化为对模型的操作,从而实现了视图和模型之间的解耦。模型通常包含一些教据结构和逻辑规则,用于处理数据的输入、输出、更新和存储等操作。模型并不关心教据的显示或用户的交互方式,它只关注数据本身以及对数据的操作。
2024-11-28 09:20:14 712
原创 什么是SLA?
根据具体业务需求和服务类型,还可以定义其他指标,如安全性、可扩展性、性能等SLA的指标需要根据业务需求、技术能力和市场标准等因素来进行制定,同时要具备可量化和可监控的特性,以确保双方都能够达成共识并得到有效执行。SLA通常会涉及到各种服务指标,例如服务可用性、服务等待时间、故障修复时间、数据保密性、客户支持等,气在确保供应商向客户提供高质量、高可靠性、高安全性的服务。:指系统在单位时间内能够处理的请求量,通常以每秒钟处理的请求量(OPS)或每分钟处理的请求量(RPM)为单位。
2024-11-26 16:52:17 195
原创 如何设计一个高性能的分布式系统
设计高性能的分布式系统需要考虑多个因素,包括架构设计、负载均衡、数据一致性、容错处理、消息队列,缓存、性能监控和安全性等。可以使用硬件负载均衡器或软件负载均衡器来实现。:保证数据一致性是设计分布式系统的一个重要方面,可以使用一致性哈希、副本复制、分片等技术来保证数据一致性。:分布式系统的安全性是至关重要的,可以使用身份验证、访问控制等技术来保证系统的安全性。:选择合适的分布式系统架构,例如微服务架构、SOA架构等,可以有效地提高系统性能。:使用性能监控工具可以监测系统的性能瓶颈,提高系统的性能和可用性。
2024-11-26 16:35:33 303
原创 什么是聚合,什么是聚合根?
在软件开发中,聚合是指将多个相关的对象或实体组合在一起形成一个单独的整体。这个整体可以是一个具有单标识符的对象,它代表了一组相关的子对象或属性,而这些子对象或属性在整个系统中具有特定的上下文和含义。聚合根是聚合中最重要的对象,它代表了聚合的根实体。聚台根是聚合中的唯一标识符,并且控制着聚合中其他对象的生命周期。聚合根是整个聚合的唯一入口点,所有的操作都是通过聚合根来进行的。例如,如果我们有一个订单聚合,那么订单就是聚合根,它包含了发件人信息、商品信息,发票信息等子对象。
2024-11-25 13:06:27 169
原创 Redis如何高效安全的遍历所有key
KEVS命令用于查找所有符合给定模式的键,例如KEVS*会返回所有键。它在小数据库中使用时非常快,但在包含大量键的数据库中使用可能会阻塞服务器,因为它一次性检索并返回所有匹配的键。SCAN命令不会一次性加载所有匹配的键,因此不会像KEVS命令那样阻塞服务器,更适合用于生产环境中遍历键集合。当遍历结束时,cursor 的值会变为 0,我们可以通过判断cursor 的值来终止选代。在Redis中遍历所有的key,有两种办法,分别使用KEVS命令和SCAN命令。
2024-11-25 09:32:31 320
原创 有了equals为啥需要hashCode方法?
为什么需要hashCode,主要是为了方便用在Hash结构的数据结构中,因为对于这种数据结构来说,想要把一个对象存进去,需要定位到他应该存放在哪个桶中,而这个桶的位置,就需要通过一个整数来获取,然后再对桶的长度取模(实际hashmap要比这复杂一些。那么,在一个对象中,定义了equals方法之后,同时还需要定义hashCode方法,因为这样在向hashMap,hashTable等中存放的时候,才能快速的定位到位置。那么,怎么能快速获取一个和这个对象有关的整数呢,那就是hashCode方法了。
2024-11-20 09:29:49 275
原创 如何对多线程进行编排
在Java 8中,新增加了一个新的类:CompletableFuture,它提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的方法。关于CompletableFuture的具体用法,大家可以参考:https://juejin.cn/post/7140244126679138312 这篇介绍的挺全的。借助CompletableFuture就能实现对多线程进行编排。
2024-11-15 09:25:52 243
原创 Docker 的常用命令有哪些?
使用 Dockerfile 构建镜像。:从镜像仓库拉取或更新指定的镜像。:查看最近30分钟的日志。:查看最新的50行日志。:列出正在运行的容器。:停止正在运行的容器。
2024-11-11 09:04:37 299
原创 有了Docker为啥还需要k8s?
K8s 由多个容器组成,并且能够自动检测、部署和扩缩容,它提供了资源管理、服务发现、多租户支持等功能,从而管理和调度大量容器,让整个编排更加高效、可靠、稳定。因此,K8s不仅仅是让Docker容器能够更好的运行,而且它可以用于管理任何容器化的部署。:Kubernetes提供了一个完整的系统来管理Docker容器,可以使DevOps开发更加高效。:Kubernetes可提供高可用性,可以设置Pod的副本数,保证服务的良好运行。:Kubernetes可以提供完善的安全性,包括限制访问,配置安全策略等。
2024-11-04 17:50:16 257
原创 为什么要使用Docker?
Docker 可以为应用程序提供一个可复用的容器,从而可以在同一操作系统中和不同操作系统中部署应用,实现跨平台应用开发。它可以简化应用程序的部署,提高性能,确保应用程序的完整性和可靠性,以及降低运行和管理环境的成本。:docker容器可以在任何地方重复利用,从而大大减少了管理时间和成本:7、可移植性:Docker容器可以在开发环境和生产环境之间更加容易的移植。:Docker可以更加简单的增加节点,并能够实现服务的弹性扩容和缩容;:Docker支持跨平台的部署,可以更灵活的部署应用程序和微服务;
2024-11-04 17:48:09 445
原创 MySQL 5.x和8.0有什么区别?
MySQL8大幅改进了对 JSON 的支持,添加了基于路径査询参数从 JSON 字段中抽取数据的JSON EXTRACT0) 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON ARRAYAGG0) 和JSON OBJECTAGG0 聚合函数。:InnoDB 现在支持表 DDL的原子性,也就是 InnoDB 表上的 DDL 也可以实现事务完整性,要么失败回滚,要么成功提交,不至于出现 DDL时部分成功的问题,此外还支持 crash-safe 特性,元数据存储在单个事务数据字典中。
2024-11-04 09:30:31 528
原创 什么是回表,怎么减少回表的次数?
在存储的数据方面,主键(聚簇)索引的B+树的叶子节点直接就是我们要查询的整行数据了。而非主键(非聚簇)索引的叶子节点是主键的值。所以,在InnoDB 中,使用主键查询的时候,是效率更高的,因为这个过程不需要回表。在 InnoDB 里,索引B+ Tree的叶子节点存储了整行数据的是主键索引,也被称之为。而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为。等技术,我们也可以通过优化索引结构以及SQL语句减少回表的次数。
2024-10-31 15:33:44 372
原创 MySQL 的 select * 会用到事务吗?
虽然查询语句也会在事务的上下文中执行,但是由于没有进行任何修改操作,因此事务不会持有任何锁,并且在查询结束后立即提交,这种隐式事务通常被称为自动提交事务(autocommit)因此,InnoDB的所有操作都可以说是在事务的上下文中执行的,包括读取操作和修改操作。*,即使没有明确的开启事务语句InnoDB存储引擎也会为查询自动开启一个隐式事务。我们都知道,在InnoDB存储引擎中,所有的修改操作都必须在事务中进行的,这种普通的读取操作其实也会在事务的上下文中执行。
2024-10-31 15:30:04 590
原创 synchronized 的锁能降级吗?
*因为有一种特殊情况的"降级”,那就是重量级锁的Monitor对象在不再被任何线程持有时,被清理和回收的过程。我们知道,synchronized 是有锁升级的过程的,会从偏向锁升级到轻量级锁和重量级锁,那么synchronized的锁有降级的过程吗?以上,说的是 HotSpot,并不是所有虚拟机都这样,有的虚拟机还真支持从重量级锁降级到轻量级锁,比如JRocket 这个虚拟机。因为锁一旦升级为重量级锁,它将保持在这个状态,直到锁被完全释放。下面是关于JRocket 的锁的降级的说明(
2024-10-30 10:03:10 325
原创 CAS一定有自旋吗?
因为,CAS 操作一般都是在多线程并发访问时使用,如果直接阻塞线程,会导致性能下降,而采用自旋的方式可以让 CPU 空转一段时间,等待锁被释放,从而避免线程切换和阻塞的开销。但是,如果自旋时间过长或者线程数过多,就会占用过多的 CPU 资源,导致系统性能下降,因此在使用 CAS 操作时,需要根据实际情况进行适当的调整。通常情况下,CAS 操作都会采用自旋的方式,当 CAS 失败时,会重新尝试执行 CAS 操作,直到操作成功或达到最大重试次数为止。不一定,但是通常为了提高CAS的成功率,会考虑做自旋。
2024-10-30 09:45:41 155
原创 为什么按位与运算要比取模运算高效?
而取模运算涉及除法操作,而除法操作比加法、减法和按位运算要复杂得多。因为在许多处理器架构中,除法运算通过迭代或流水线等复杂机制实现,导致其执行时间较长。虽然现代编译器对取模运算也进行了一定的优化,但由于其底层实现的复杂性,优化效果不如按位与运算明显,并且由于其简单性,编译器可以轻松地优化按位与运算,编译器在生成机器代码时,按位运算直接映射到单个机器指令。
2024-10-29 09:53:30 504
原创 GPU和CPU区别?为什么挖矿、大模型都用GPU?
大模型的训练可以分解成许多小任务,这些任务可以在GPU的多个核心上同时进行,从而显著加快训练速度。GPU最初是为图形渲染和图像处理而设计的,因此其架构包含大量的小核心,适合并行处理。这些核心可以同时处理多个相似的任务,使其在某些计算任务中表现得比CPU更高效.它的架构设计旨在适应多种任务,具有较少的核心,但每个核心非常强大且灵活。GPU就像是一群臭皮匠,虽然没那么聪明,但是优势在于人多,能干很多重复性的劳动。GPU由于其并行处理能力,能够在挖矿过程中执行多个计算任务,从而提高挖矿效率。
2024-10-28 17:43:44 357
原创 什么是时间片
使用这些操作系统的“用户”是可以“同时”干多件事的,这已经是日常习惯了,并没觉得有什么特别。这个电话亭可以允许哪个用户进入打电话是有不同的策略的,不同的电话亭规定不同,有的电话享采用排队机制(FCFS)、有的优先分配给打电话时间最短的人(SPN)等。这样,给用户的感觉是他在同时的进行听歌和打游戏,实际上,在操作系统中,CPU是在游戏进程和音乐播放器进程之间来回切换执行的。不同的操作系统,在选择“用户”分配时间片的调度算法是不一样的,常用的有FCFS、轮转、SPN、SRTHRRN、反馈等。
2024-10-28 17:40:59 221
原创 ARP 与 RARP 的区别是什么?
ARP协议是一种广播协议,当一台主机需要知道另一台主机的MAC地址时,会在本地局域网上广播一个ARP请求包,所有主机都能收到这个请求包,但只有目标主机会响应这个请求,将自己的MAC地址发送回来。RARP协议则是将MAC地址转换为IP地址,也就是在启动时,需要知道自己的IP地址时,可以向网络中发送RARP请求,获取自己的IP地址。ARP协议用于将IP地址转换为MAC地址,也就是在通信时需要知道目标机器的MAC地址时,ARP协议可以用来查询目标机器的MAC地址。
2024-10-28 14:14:46 280
原创 ping的原理是什么?
在A主机上就会发送“echorequest”(回显请求)控制消息,主机B正确接收后即发回“echo reply"(回显应答)控制消息,通过对方回复的数据包来确定两台网络机器是否连接相通,时延是多少。它使用的ICMP协议是一个网络层协议,也就是说,ping是一个应用层直接使用网络层协议的例子。像我们常见的HTTP协议是依赖的传输层协议TCP/UDP,而传输层的协议再依赖网络层的IP协议。ping是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。
2024-10-28 14:13:03 638
原创 路由器与交换机的区别是什么?
交换机转发所依据的对象是物理地址,也就是MAC地址,而路由器转发所依据的对象时网络地址,也就是IP地处。交换机主要用于组建局域网,而路由主要功能是将由交换机组好的局域网相互连接起来,或者接入互联网。在OSI七层模型中,交换机主要工作在数据链路层(第二层),路由器工作在网络层(第三层)。
2024-10-28 14:10:50 433
原创 Maven能解决什么问题?为什么要用?
如果没有maven,我们在开发一个应用的时候,需要自己先确定需要引入哪些第三方的jar包,并且要去找到这些jar包,把他们导入到项目中,而且最痛苦的时候各个jar包之间的兼容性和冲突的问题。jar包弄好了之后,我们想要把应用打包整一个war包又很麻烦,将一个应用做编译、测试和部署都特别麻烦。·提供了一套标准化的构建流程(编译,测试,打包,发布…·提供了一套依赖管理机制(jar包导入、冲突解决)而有了maven之后,这些问题都能迎刃而解了。
2024-10-28 10:20:35 217
原创 Redis的Key和Value的设计原则有哪些?
例如 ziplist 是一种特殊的数据结构,它可以将小型列表、哈希表和有序集合存储在一个连续的内存块中,从而节省了内存空间,但由于 ziplist 没有索引,因此在对 ziplist进行查找、插入或删除操作时,需要进行线性扫描,这可能会导致性能下降,在实际应用中,应该根据具体情况来决定是否使用 ziplist。在设计 Redis 的 Key 和 Value 时,需要考虑一些原则,以确保数据存储和检索的效率,以及满足特定用例的需求。:Key 应该保持简洁,避免过长的命名,以节省内存和提高性能。
2024-10-28 10:15:24 464
原创 Redis为什么这么快?
在Redis 6.0中,为了进一步提升I0的性能,引入了多线程的机制。:Redis 提供了多种高效的数据结构,如哈希表、有序集合、列表等,这些数据结构都被实现得非常高效,能够在 O(1)的时间复杂度内完成数据读写操作,这也是 Redis 能够快速处理数据请求的重要因素之一。:Redis 使用单线程模型,这意味着它的所有操作都是在一个线程内完成的,不需要进行线程切换和上下文切换。:Redis 是一种基于内存的数据库,数据存储在内存中,数据的读写速度非常快,因为内存访问速度比硬盘访问速度快得多。
2024-10-28 10:11:38 242
原创 Linux查看日志常用命令
线上出问题的时候,我们常用tail -n 或者 tail -f 或者grep 或者 vi cat等各种命令去查看异常信息,但是日志是在不停地刷屏,tail是动态的在变的,我们往往期望从日志最后一行往前一页一页的翻页查看,从而找到异常信息,而less命令我觉得是最实用和方便的。cat filename | grep -C 5 ‘关键字’ (显示日志里匹配字串那行以及前后5行)关键字 注:反向查找,按shift+n 键,把光标移动到下一个符合条件的。cat -n filename |grep “关键字”
2023-09-15 11:57:33 397 1
原创 mysql 获取json数组中某个字段根据下标
JSON(JavaScript Object Notation)是一种常用的轻量级数据交换格式,它以键值对的方式组织数据。MySQL从5.7版本开始引入了JSON数据类型,使得存储和处理JSON数据变得更加方便。对象(Object):类似于键值对,由大括号{}包围,每个键值对之间使用逗号分隔。数组(Array):类似于有序列表,由方括号[]包围,每个元素之间使用逗号分隔。字符串(String)数值(Number)布尔值(Boolean)NULL。
2023-08-24 11:04:30 1416
原创 java.io.IOException: Connection reset by peer
java.io.IOException: Connection reset by peer
2023-08-16 11:06:07 1387
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人