自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 k8s与docker相比的优缺点

综上所述,K8s 和 Docker 各有其优缺点,适用于不同的场景和需求。如果是简单的本地开发和测试环境,或者对容器的快速启动和简单操作有较高要求,Docker 可能是一个较好的选择;而对于大规模的企业级应用部署、管理和复杂的容器编排场景,K8s 则提供了更强大的功能和更好的可靠性,但需要投入更多的学习成本和运维资源。在实际应用中,通常会将 Docker 与 K8s 结合使用,利用 Docker 的快速构建和运行容器的能力,以及 K8s 的强大编排和管理功能,来构建高效、可靠的容器化应用平台。

2024-12-18 01:00:00 1081

原创 k8s的详细介绍与使用

总之,Kubernetes 为容器化应用的部署、管理和运维提供了强大而灵活的平台,通过合理的使用和遵循最佳实践,可以大大提高应用的开发效率、可靠性和可扩展性,帮助企业更好地应对数字化时代的挑战和机遇。

2024-12-18 00:30:00 927

原创 数据底座设计注意事项

业务需求理解:深入了解企业各业务部门的工作流程、数据需求以及未来的业务发展方向,确保数据底座能够满足当前和潜在的业务需求,避免过度设计或设计不足。与业务部门保持密切沟通,及时获取反馈,以便在设计过程中进行调整和优化。 数据集成复杂性:考虑到企业内外部数据源的多样性和复杂性,如不同的数据格式、编码方式、更新频率等,在设计数据采集和集成方案时,要充分评估各种数据集成工具和技术的适用性,确保能够高效、准确地将各类数据汇聚到数据底座中,同时要处理好数据一致性和完整性问题,避免数据冲突和重复。 数据质量保障:从设

2024-12-17 01:00:00 873

原创 数据底座技术设计方案

技术选型原则先进性:采用行业内领先且成熟的技术架构和工具,确保数据底座具备前瞻性和竞争力,能够适应未来业务发展和技术变革的需求,例如选用最新的大数据处理框架和分布式存储技术。 可靠性:优先选择具有高稳定性和可靠性的技术产品,通过冗余设计、故障自动切换、数据备份恢复等手段,保证数据底座在各种复杂环境下能够持续稳定运行,最大限度减少系统故障对业务的影响,如采用高可用的数据库集群和分布式文件系统。 安全性:遵循严格的安全标准和最佳实践,运用加密技术、访问控制、安全审计等多种安全措施,全方位保护数据的

2024-12-17 00:30:00 1484

原创 大数据治理实战

一、数据质量提升最佳实践数据质量规则自动化执行数据质量问题根因分析与持续改进建立数据质量记分卡二、数据安全与隐私保护最佳实践零信任架构的应用隐私影响评估(PIA)流程数据安全和隐私文化建设三、打破数据孤岛最佳实践数据中台建设主数据管理系统(MDM)的有效应用数据共享协议与数据目录建设四、成本优化最佳实践开源工具与商业工具的合理搭配云计算与大数据治理融合数据治理流程自动化和优化

2024-12-16 10:10:09 987

原创 大数据治理的挑战及解决方案

大数据治理的挑战(一)数据质量问题数据不一致性 数据可能来自多个不同的数据源,如企业内部的不同业务系统、外部合作伙伴提供的数据等。这些数据源可能使用不同的标准、格式和编码规则,导致相同数据在不同系统中呈现不一致的状态。例如,客户的联系方式在销售系统和客服系统中可能存在差异,这会影响客户服务质量和精准营销的效果。 数据不完整性 由于数据采集过程中的遗漏、系统故障或人为因素,数据可能存在缺失值。在数据分析场景中,不完整的数据可能导致分析结果的偏差。例如,在市场调研数据中,如果部分消费者的

2024-12-16 10:07:02 941

原创 项目管理需具备的技能与知识

一、综合项目管理知识体系传统项目管理知识 五大过程组:精通项目启动、规划、执行、监控和收尾过程。在启动阶段,能够准确地定义项目的目标、范围和可行性;在规划阶段,细致地制定项目的进度计划、成本预算、质量计划等;执行阶段有效地组织资源完成项目任务;监控阶段密切关注项目的进度、成本、质量等关键指标,及时发现并解决问题;收尾阶段确保项目的顺利交付和经验总结。 十大知识领域:深入理解范围管理(如工作分解结构 WBS 的创建和维护)、时间管理(关键路径法 CPM、进度压缩技巧)、成本管理(成本估算方法、

2024-12-13 00:00:00 721

原创 项目经理在项目各阶段的价值体现

一、方案设计阶段需求理解与转化 软件项目经理在这个阶段起着关键的桥梁作用。他们需要深入理解客户或业务部门的需求,将模糊的业务需求转化为具体的软件功能和技术要求。例如,当客户提出想要一个提高销售团队效率的软件时,项目经理要进一步挖掘细节,如是否需要客户关系管理功能、销售数据分析功能、销售流程自动化等具体功能。 通过与不同利益相关者的沟通,包括用户代表、业务分析师、技术专家等,整合各方意见,确保方案能够满足多方面的期望。这有助于避免在项目后期出现需求变更频繁的问题,为项目的顺利开展奠定坚实基础。

2024-12-12 10:10:29 587

原创 敏捷项目管理:必备技能全解析

在当今快速变化的商业环境中,敏捷项目管理已成为众多组织追求高效项目交付的首选方法。它强调灵活性、协作和快速响应变化,与传统项目管理有着显著的区别。而在敏捷项目管理众多框架中,Scrum 框架应用广泛且极具代表性。Scrum 是一个轻量级的敏捷项目管理框架,它将项目开发周期划分为多个短周期的迭代,称为 “冲刺(Sprint)”。每个冲刺都有明确的目标,从产品待办事项列表中挑选出一组高优先级的用户故事进行开发,最终产生一个可潜在交付的产品增量。

2024-12-12 09:54:52 591

原创 DevOps 相关知识点总结

通过代码,可以版本控制基础设施的定义,轻松回滚到之前的状态,快速复制相同的环境,减少人为错误,并且能够与持续集成和部署流程紧密结合,实现自动化的基础设施部署和更新。- 可以通过以下指标衡量:部署频率的提高、部署失败率的降低、平均恢复时间(MTTR)的缩短、客户满意度的提升、代码质量的改善(如缺陷率降低)、开发周期的缩短、团队效率的提高(如开发人员和运维人员的协作效果)等。- 持续部署(CD)则是在持续集成的基础上,自动将经过验证的代码部署到生产环境或其他目标环境中,实现快速、可靠的软件交付。

2024-08-01 09:32:27 1249

原创 并发编程-线程篇

线程池可以指定好工作线程的个数,别超过限制,超过了,甩你拒绝策略。实现Callable,需要FutureTask做封装,在启动线程时,依然是执行的FutureTask实现Runnable时重写的run方法,在run方法内部,执行的Callable的call方法。1、使用Executors自带的方式构建(不推荐),线程池参数很多,这种自带的,只提供了修改部分参数的功能,无法完整的掌握线程池的细节。因为线程池不区分核心和非核心,里面只判断个数,如果有一个工作线程凉了,那还是3个工作线程,满足参数的哟求。

2024-08-01 07:00:00 897

原创 并发编程-集合篇

TreeNode中不但包含了红黑树的parent,left,right,red之外,还有维护的prev,以及继承自父类的next。而且在ConcurrentHashMap的有参构造中,虽然可以穿度一个负载因子的参数,但是无法修改他,在有参构造的逻辑里,仅仅是拿着传入的loadFactor计算初始数组的长度。在协助扩容前,有几个判断,主要是判断扩容是否结束,以及协助扩容的线程是否已经达到最大值的这两个判断,这两个判断没有将扩容标识戳做左移操作,就直接与sizeCtl做判断了,这种判断是没有任何意义的。

2024-07-31 14:06:40 1073

原创 并发编程-锁篇

先说清楚和JUC的关系以及说和JUC下其他类的关系,然后说内部的核心结构。你可以往你会的地方拐。AQS本质就是JUC包下的一个抽象类,JUC包下的一些并发工具,并发集合,线程池,锁都是基于AQS作为基础类去实现的。AQS里面有一个核心属性和两个核心的结构:* volatile修改是,并且基于CAS修改的state属性。* 由Node组成的一个双向链表,或者说叫同步队列。* 由Node组成的一个单向链表,这个是用于实现类似synchronized的wait和notify的结构。

2024-07-31 14:02:39 665

原创 Mybatis核心问题总结

线程安全:SqlSession是线程不安全的 --》 单纯的MyBatis的应用。一级缓存是 MyBatis 默认开启的,它存在于 SqlSession 级别,对同一个 SqlSession 内的查询结果进行缓存。二级缓存是基于 namespace 级别的缓存,可以在多个 SqlSession 之间共享。一级和二级缓存的执行的先后顺序:先查二级缓存。日志模块使用到了适配器模式,对于MyBatis中的数据库的相关操作通过代理模式实现了日志的监控。作用域:一级缓存的作用域是session级别的,命中率很低。

2024-07-10 10:06:20 1088

原创 Resid核心问题总结(三)

缓存击穿是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个完好无损的桶上凿开了一个洞。缓存击穿的话,设置热点数据永远不过期。或者加上互斥锁就能搞定了。是指查询一个根本不存在的数据,缓存层和存储层都不会命中,于是这个请求就可以随意访问数据库,这个就是缓存穿透,缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。

2024-07-09 11:48:59 975

原创 Redis核心问题总结(二)

HyperLogLog基于概率论中伯努利试验并结合了极大似然估算方法,并做了分桶优化。实际上目前还没有发现更好的在大数据场景中准确计算基数的高效算法,因此在不追求绝对准确的情况下,使用概率算法算是一个不错的解决方案。概率算法不直接存储数据集合本身,通过一定的概率统计方法预估值,这种方法可以大大节省内存,同时保证误差控制在一定范围内。目前用于基数计数的概率算法包括:举个例子来理解HyperLogLog算法,有一天李瑾老师和马老师玩打赌的游戏。

2024-07-08 21:54:31 1137

原创 Redis核心问题总结(一)

Redis 中的事务是一组命令的集合,是 Redis 的最小执行单位。它可以保证一次执行多个命令,每个事务是一个单独的隔离操作,事务中的所有命令都会序列化、按顺序地执行。服务端在执行事务的过程中,不会被其他客户端发送来的命令请求打断。它的原理是先将属于一个事务的命令发送给 Redis,然后依次执行这些命令。

2024-07-08 11:16:08 675

原创 JVM相关知识点汇总

`官网`: [https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc.html#garbage_first_garbage_collection](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc.html#garbage_first_garbage_collection)**那一个线程执行的状态如何维护?

2024-07-07 12:36:53 1137

原创 并发编程相关知识点总结

单例模式中的懒汉机制中,就存在一个这样的问题。懒汉为了保证线程安全,一般会采用DCL的方式。但是单单用DCL,依然会有几率出现问题。线程可能会拿到初始化一半的对象去操作,极有可能出现NullPointException。(初始化对象三部,开辟空间,初始化内部属性,指针指向引用)**在Java编译.java为.class时,会基于JIT做优化,将指令的顺序做调整,从而提升执行效率。****在CPU层面,也会对一些执行进行重新排序,从而提升执行效率。**

2024-07-07 12:14:46 958

原创 JAVA基础知识(下)

序列化是把对象改成可以存到磁盘或通过网络发送到其他运行中的Java 虚拟机的二进制格式的过程,并可以通过反序列化恢复对象状态. Java 序列化API给开发人员提供了一个标准机制,通过java.io.Serializable 和 java.io.Externalizable 接口,ObjectInputStream及ObjectOutputStream 处理对象序列化.Java 程序员可自由选择基于类结构的标准序列化或是他们自定义的二进制格式,通常认为后者才是最佳实践,

2024-07-06 10:04:31 1198

原创 JAVA基础知识(上)

这个是从时间和空间的角度综合得出的。- 如果是1.0 当数组的值全部填充了才会发生扩容,此时Hash冲突是避免不了的。链表的操作或者红黑树的操作会牺牲时间来保证空间的利用率- 如果是0.5 当数组中一半的数据利用了之后就会开始扩容。这时填充的数据少。hash冲突也会减少,底层的链表和红黑树的高度也会降低。查询效率增加。但是这时还有太多的空间没有利用。空间资源浪费了。- 所以0.75是综合考虑得出的- 首先根据 key 的值计算 hash 值,找到该元素在数组中存储的下标;

2024-07-06 09:50:08 888

原创 mysql的锁机制(深度好文)

​ **锁是计算机协调多个进程或线程并发访问某一资源的机制。**在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。​ 相对其他数据库而言,MySQL的锁机制比较简单,其最 显著的特点是不同的**存储引擎**支持不同的锁机制。

2024-07-05 21:03:43 898

原创 MySql架构(深度好文)

然后你会发现,如果需要用这个binlog来恢复临时库的话,由于这个语句的binlog丢失,这 个临时库就会少了这一次更新,恢复出来的这一行c的值就是0,与原库的值不同。所以,在之后用binlog来恢复的时候就多了一个事务出来,恢复出来的这一行c的值 就是1,与原库的值不同。然后进行数据的修改。▪ 当执行查询语句的时候,会先去查询缓存中查看结果,之前执行 过的sql语句及其结果可能以key-value的形式存储在缓存中,如 果能找到则直接返回,如果找不到,就继续执行后续的阶段。

2024-07-05 20:45:37 859

原创 JVM专题之JVM工具

你了解类加载嘛装载 链接 初始化类加载器 双亲委派 三大特性 以及打破双亲委派 SPI。

2024-07-05 20:24:24 953

原创 JVM专题之性能优化

对象逃逸的本质是对象指针的逃逸。在计算机语言编译器优化原理中,逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他方法或者线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。通俗点讲,如果一个对象的指针被多个方法或者线程引用时,那么我们就称这个对象的指针(或对象)的逃逸(Escape)。逃逸分析,是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。

2024-07-05 20:08:49 934

原创 JVM专题之常用命令及执行引擎

(1)**首先是方法调用计数器**。* 在 **Client** 模式下, 公式为 方法调用计数器阈值(CompileThreshold)X **OSR 比率**(OnStackReplacePercentage)/ **100**。其中 onStackReplacePercentage 默认值为 **140**,InterpreterProfilePercentage 默认值为 **33**,如果都取默认值,那么 Server 模式虚拟机回边计数器阈值为 **10700**。

2024-07-05 10:50:44 925

原创 JVM专题之ZGC原理深入解析

**阻塞内存分配请求触发** :当垃圾来不及回收,垃圾将堆占满时,会导致部分线程阻塞。我们应当避免出现这种触发方式。日志中关键字是“Allocation Stall”。基于分配速率的自适应算法最主要的GC触发方式,其算法原理可简单描述为”ZGC根据近期的对象分配速率以及GC时间,计算出当内存占用达到什么阈值时触发下一次GC”。自适应算法的详细理论可参考彭成寒《新一代垃圾回收器ZGC设计与实现》一书中的内容。

2024-07-05 10:37:09 1100

原创 JVM专题之G1垃圾收集器下

因此无论是年轻代收集,还是混合收集,工作的机制都是一致的。在[ 整堆5%, 整堆60% ]的基础上,G1会计算下现在Eden区回收大概要多久时间,如果回收时间远远小于参数-XX:MaxGCPauseMills设定的值(默认200ms),那么增加年轻代的region,继续给新对象存放,不会马上做YoungGC。* PLAB分配失败后的逻辑与TLAB类似,先申请一个新的PLAB,在旧PLAB中填充dummy对象,在新PLAB中分配,如果还是失败,则在新生代Region中直接分配。

2024-07-04 10:56:45 1114

原创 JVM专题之G1垃圾收集器上

翻译:G1垃圾收集器的设计目的是避免完全回收,但是当并发收集不能足够快地回收内存时,就会发生完全回收GC.G1的完整GC的当前实现使用单线程mark-sweep compact算法。3.CMS可中止的预处理会导致极限5S停顿4.并发失败进入 foregroud还会导致进入Full GC,全局MSC整理5.CMS吞吐的设计并不是很优秀。GarbageFirst,也就是垃圾优先原则,也就是空间方面的关注点。1.CMS单线程或者双线程情况下效率很低。更短的停顿时间要多短就多短。某种程度上去解决空间碎片。

2024-07-04 10:47:26 424

原创 JVM专题之CMS垃圾收集器深入解析

*原始快照**就是当灰色对象要**删除指向**白色对象的引用关系时, 就将这个要删除的引用记录下来, 在并发扫描结束之后, 再将这些记录过的引用关系中的灰色对象为根, 重新扫描一次,这样就能扫描到白色的对象,将白色对象直接标记为黑色(目的就是让这种对象在本轮gc清理中能存活下来,待下一轮gc的时候重新扫描,这个对象也有可能是浮动垃圾)但是如果这样的话我们维护成本就很好,打个比方,假如所有的老年代对象都有指针指向了新生代,那么我们需要维护整个老年代大小的记忆集,毫无疑问这种方法是不可取的。

2024-07-04 10:21:12 991

原创 JVM专题之垃圾收集器

非标准参数,也就是在JDK各个版本中可能会变动```-Xint 解释执行-Xcomp 第一次使用就编译成本地代码-Xmixed 混合模式,JVM自己来决定> 使用得最多的参数类型> 非标准化参数,相对不稳定,主要用于JVM调优和Debug```a.Boolean类型格式:-XX:[+-] +或-表示启用或者禁用name属性比如:-XX:+UseConcMarkSweepGC 表示启用CMS类型的垃圾回收器。

2024-07-04 10:13:39 1006

原创 AI:开发者的助力还是终结者?

其独特的空间错觉和富有哲理的故事叙述,是人类开发者凭借对艺术、哲学和人类认知的深刻理解创造出来的。这大大缩短了开发者查找和修复错误的时间,提高了软件的质量和稳定性。而且,软件开发往往需要与各种利益相关者进行有效的沟通和协调,理解他们的需求和期望,并将其转化为可行的技术方案。作为科技工作者,我们期待看到这种协同合作带来的无限可能,也相信人类的智慧和创造力在科技发展的浪潮中始终占据着不可替代的核心地位。在未来的科技世界中,人类开发者与 AI 的协作将成为常态,共同创造出更加智能、高效和富有创意的软件产品。

2024-07-03 15:56:37 367

原创 JVM专题之垃圾收集算法

所有现代的标记-整理理回收器器均使⽤用滑动整理理,它不不会改变对象的相对顺序,也 就不不会影响赋值器器的空间局部性。复制式回收器器甚⾄至可以通过改变对象布局的⽅方 式,将对象与其⽗父节点或者兄弟节点排列列的更更近以提⾼高赋值器器的空间局部性。

2024-07-03 12:12:38 1211

原创 JVM专题之Java对象内存模型

``新生代中的可用内存:复制算法用来担保的内存为9:1可用内存中Eden:S1区为8:1即新生代中Eden:S1:S2 = 8:1:1现代的商业虚拟机都采用这种收集算法来回收新生代,IBM公司的专门研究表明,新生代中的对象大概98%是“朝生夕死”的```

2024-07-03 11:51:44 1104

原创 JVM专题之内存模型以及如何判定对象已死问题

体验与验证。

2024-07-03 11:38:19 863

原创 JVM专题之深入运行时数据区

这样的关系怎么维护呢?首先“aaaa”会被认为字面量,先在字符串常量池中查找(.equals()),如果没有找到,在堆中创建“aaaa”字符串对象,并且将“aaaa”的引用维护到字符串常量池中(实际是一个hashTable结构,存放key-value结构数据),再返回该引用;**(1)虚拟机栈是一个线程执行的区域,保存着一个线程中方法的调用状态。说白了就是类文件被类装载器装载进来之后,类中的内容(比如变量,常量,方法,对象等这些数据得要有个去处,也就是要存储起来,存储的位置肯定是在JVM中有对应的空间)

2024-07-02 23:13:53 1179

原创 JVM专题之走进类加载

TIOBE语言热度排行榜:https://www.tiobe.com/tiobe-index/ 世界上没有最好的编程语言,如果有,我相信一定是JAVA。

2024-07-02 22:59:13 828

原创 高效利用iCloud指南

在 iOS 系统中,打开“文件”App,找到要共享的文件或文件夹,长按并选择“共享”,然后按照提示进行操作,如选择共享选项、添加用户、选择发送链接的方式等。另外,共享文件夹时,只有参与者可以查看共享文件夹中的文件。要邀请更多人共享文件,必须更改共享文件夹的设置。但无法向共享文件夹中的单个文件添加参与者。同时,无法更改共享文件夹中单个文件的共享设置,必须更改文件夹的设置。如果文件夹或文件已共享且访问权限设为“仅受邀用户”,可以将其共享给更多人。如果是共享的文件或文件夹的所有者,可停止共享。

2024-07-02 11:44:07 1241

原创 微软Edge浏览器全解析的理解

总之,微软 Edge 浏览器在多个方面都表现出色,无论是普通用户的日常使用,还是前端开发者的工作需求,都能提供有力的支持和良好的体验。随着不断的发展和改进,它将继续在浏览器领域占据重要的一席之地。

2024-07-01 16:05:53 400

原创 深入浅出:npm常用命令详解与实践

它是一个包管理系统,用于安装、管理和分享 JavaScript 代码模块。npm 提供了丰富的命令行工具,使开发者能够高效地进行项目开发和管理。本文将深入探讨 npm 常用命令的详解与实践,帮助读者更好地理解和运用这些命令。本文深入探讨了 npm 常用命令的详解与实践,包括初始化项目、安装依赖模块、卸载依赖模块、更新依赖模块、列出已安装的模块、执行脚本命令、执行测试用例、启动开发服务器和发布项目等。通过本文的学习,读者可以更好地理解和运用 npm 命令,提高项目开发和管理的效率。

2024-07-01 15:58:04 721

空空如也

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

TA关注的人

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