- 博客(43)
- 收藏
- 关注
原创 玩蛋了,用户的重要文件全没了。
摘要:在分布式系统中,使用本地锁(ReentrantReadWriteLock)处理文件操作时存在缺陷。当两个线程同时通过文件B存在性检查后,线程1删除A并重命名B为A,线程2再次删除A时,由于B已被重命名导致重命名失败,最终导致A、B文件均丢失。问题根源在于本地锁无法保证分布式环境下的互斥访问,且代码未处理重命名失败的情况。建议改用分布式锁或确保每次操作生成唯一的B文件。
2026-01-18 11:59:55
54
原创 面试官问:系统架构需要考虑什么?狭义的系统架构,广义的系统架构。
系统架构设计需综合考虑业务需求、技术选型和非功能需求三大维度。业务层面需明确场景类型、规模及合规要求;技术选型要匹配业务特点,合理选择开发语言、中间件和数据库;非功能设计包括高可用、高性能、可扩展性、安全性等核心要素。同时要关注团队管理、开发流程等支撑架构落地的治理手段,避免过度设计,平衡性能与成本。架构设计是动态演进过程,需建立评审机制和技术债务清理流程,确保架构长期健康发展。
2026-01-18 10:32:11
378
原创 开发人员初读项目管理有感
用户多为非专业群体,需配备“全能型需求对接人才”——既要深度理解业务逻辑、擅长高效沟通,又能通晓技术边界,精准转化用户诉求为可落地的项目目标,避免需求偏差。项目计划是项目成功的基石,不能仅局限于技术架构设计层面。真正高质量的项目计划,需要具备高瞻远瞩能力的架构师统筹全局,搭建适配业务、兼具扩展性与稳定性的整体框架,这也凸显了架构师在项目中的核心价值。同时,项目经理需具备“全栈认知”,覆盖业务、技术、沟通等多个领域,既能与客户顺畅对接需求,也能与团队高效同步目标,成为连接各方的核心枢纽。
2025-12-11 22:51:16
275
原创 2025-10-27 Java AI学习路线
一、转型核心优势(精准匹配 AI 岗位需求)千亿级数据分析经验:AI 项目(尤其是大模型应用)核心需求之一就是海量数据预处理、高效查询,你的 StarRocks + 数据引擎优化经验直接复用。高并发 / 分布式架构能力:AI 服务(如大模型 API、推理部署)需要高可用、高并发支撑,你的 Docker 容器化、Kafka/Redis 中间件、负载均衡经验是核心加分项。已有 AI 技术积累:langchain4j、Agent 开发框架、大模型提示工程、机器学习基础,已经跨过转型的 “入门门槛”。
2025-10-27 20:08:24
1062
原创 更新docker 容器时,提前换后端jar 包,为什么会存在异常
我们现场更新时,通常都是提前将后端jar 包替换了,然后到了更新的时间,只需要更新相关的前端文件和修改各种配置,就行了。但是最近一次更新操作中,忽然发现,提前更新后端包,会存在依赖丢失问题????
2025-03-26 21:39:07
1171
原创 尴尬了,9个服务,1个服务出问题了,怎么用户都受影响了
由于之前的系统比较稳定,又有脚本做检测重启,所以未做服务心跳监测,直到一天我们挂ds 的脚本时间过期了,然后稳定的一个服务,挂了一个,然后我们的服务在批量查某个字段时又被轮询使用,所以导致了一个服务异常,大量用户感知的尴尬情况。我们的架构中,可以添加心跳监测的就两个地方,一个是nginx ,一个是 haproxy。nginx 方案,也是有的,我查到了,但我们这边不是使用的这个,所以我并不确定下面的方案是否可行Nginx 心跳监测Nginx 可以通过多种方式实现心跳监测(健康检查)功能,具体可分为。
2025-03-26 19:11:19
908
原创 自控力太差了,让DeepSeek 帮我写一份跳槽前的学习规划,大家看看它分析的怎么样
三年之期已到,虽然工作,同事氛围,公司福利都还是不错的,奈何终究钱不够,满打满算应该就实际到手算上公积金估计35个左右,其中很大一部分还是补贴,年终奖,实际base就16。个人估计在杭州基本也就中下水准。若我家境富裕,现在继续保持也还行,奈何我只是从云南十万大山中幸运来到杭州的穷小子,在杭州根本没有任何积累。虽然父母不是拖累,但为人子,总是希望能让父母过的更好,未来的我能给他们提供更多的底气,还有杭州高额的房价,结婚,生子,一个个世俗念头欲望使我不能安心的待在舒适区里面,只能继续向前,才能得一份安宁。
2025-03-02 18:20:38
1016
原创 提高自控力,避免自己废掉
如何提高自控力,避免自己废掉。人总是习惯于安逸,我也是这样的,但很不巧,我们所在的行业,是不允许人安逸的,技术在奔跑,我们也不能停滞不前。哈哈,对了,还有几千万大学生,研究生在后面追赶,前面又有ai浪潮随时准备对我们行业革命,前狼后虎,所以我重新提笔,写下这篇文章,督促自己,不要贪图奶头乐。
2025-02-19 20:37:03
637
原创 cassandra权威指南
1.基于特性或功能的分片2.基于键的分片3.查找表cassandra 数据库没有主从架构,所有节点是一样的cassandra 会基于键值,将数据分片到多个节点canssandra 分布式的去中心化的cassandra 分布式 使用p2p协议,并使用gossip维护存活节点列表水平扩展 简单来说就是增加更多服务器 需要同步机制垂直扩展 增加机器能力Cassandra是通过更新时,将数据传播给所有副本。Casandra保证总是可写,将冲突留给读操作。
2022-09-13 17:21:23
1272
原创 Java字符串与集合练习
String.split()拆分字符串lang包String类的split()方法public String[] split(String regex)public String[] split(String regex,int limit)//limit 参数控制模式应用的次数,因此影响所得数组的长度拆分示例:public class SplitDemo { public static void main(String[] args) { String Str="Ha
2022-09-05 15:55:38
319
原创 hash 碰撞冲突
Hash碰撞冲突我们知道,对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。如下将介绍如何处理冲突,当然其前提是一致性hash。1.开放地址法开放地执法有一个公式:Hi=(H(key)+di) MOD m i=1,2,…,k(k<=m-1)其中,m为哈希表的表长。di 是产生冲突的时候的增量序列。如果di值可能为1,2,3,…m-1,称线性探测再散列。如果di取1
2022-09-02 21:06:38
314
原创 Java基础易错问题
// 第一题: 基本类型和包装类型int a = 100;Integer b = 100;System.out.println(a == b);// 第二题: 两个包装类型Integer c = 100;Integer d = 100;System.out.println(c == d);// 第三题c = 200;d = 200;System.out.println(c == d);//第四题Integer e = new Integer(10);Integer f = n
2021-03-09 10:31:20
235
原创 字符流与字节流
IO流(字节流,字符流,缓冲流)一:IO流的分类(组织架构)根据处理数据类型的不同分为:字节流和字符流根据数据流向不同分为:输入流和输出流这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图:二:字符字节,输入输出流的概念 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多
2021-03-04 11:30:27
603
1
原创 HashTable和HashMap的区别
HashTable和HashMap的区别● 与HashMap一样,底层也是哈希表, 但是HashTable是线程安全的● HashMap默认初始化容量: 16, HashTable默认初始化容量:11● 加载因子: 0.75, 当键,值对的数量大于加载因子*哈希桶容量时, 要扩容● HashMap默认按2倍大小扩容, HashTable默认按 2倍 + 1 大小扩容● HashMap可以指定初始化容量, 系统会自动调整为2的幂次方, HashTable也能指定初始化容量, 系统不会自动
2021-03-04 11:09:54
236
1
原创 hashmap 底层实现原理
Java HashMap底层实现原理HashMap底层是哈希表(散列表),哈希就是一个数组,数组的每个元素是一个单向链表。● 在第一次执行put方法时,给哈希表的数组(哈希桶)默认初始化,容量: 16● hashMap加载因子是0.75● 当hashMap中<键,值>对的数量 > 哈希桶容量 * 加载因子时, 哈希桶(数组)要扩容 , 按2倍大小扩容● HashMap可以指定初始化容量, 系统会自动调整为2的幂次方, 可以快速的计算数组的下标● 如果单向链表中结点的个
2021-03-04 11:07:47
861
1
原创 comparator
常见的接口与类 – Comparator目录接口概述接口方法详解接口方法实践操作正文接口Comparator 1.1 前面我们讲过Java提供了一个用于比较的接口Comparable,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法。实际上Java中除了比较一个接口外,还提供了一个接口,该接口也是具有比较的功能,但该接口注重的却是比较容器,然后对其排序,这就是Comparator,下面我们就来具体认识一下;回到顶部接口概述 Comparator并不想Compa
2021-03-04 11:02:27
735
1
原创 hashmap详解
HashMap 作为最常用的集合类之一,有必要深入浅出地了解一下。这篇文章会深入到 HashMap 源码,刨析它的存储结构以及工作机制。HashMap 的存储结构HashMap 的数据存储结构是一个 Node<K,V> 数组,在(Java 7 中是 Entry<K,V> 数组,但结构相同)存储结构主要是数组加链表,像下面的图。HashMap 的 put()在 Java 8 中 HashMap 的 put 方法如下,我已经详细注释了重要代码。举个例子,如果 put
2021-03-04 10:43:28
341
1
原创 arrylist vector区别
arrayList和vector的区别首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入
2021-03-04 10:29:18
223
1
原创 java多线程编程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言进程与线程setPriority()interrupt()setDaemon()线程生命周期java线程模型java原子性 可见性Java有序性保证内存访问的顺序性volatile关键字, synchronized关键字总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下
2021-03-03 21:16:12
579
1
原创 java基础复习
文章目录前言jdk jre jvm关系访问控制数据类型jvm的内部结构递归与循环static继承多态类型转换开闭原则super和this总结前言动力节点java基础复习笔记jdk jre jvm关系访问控制|修饰符| 本类 | 本包子类 | 本包 | 外包子类 | 外包 ||---------------------|--------||public | y | y | y | y | y ||protect | y
2021-03-03 19:48:22
434
1
原创 2020-9-19
字符串转数字java中,String字符bai串转化为数字的方法有:1、转化为整型du数字(zhi1)Integer.parseInt(String s) ,代码示例如下:public class Test {public static void main(String args[]){String s = “123”;int num = Integer.parseInt(str);int sum = num + 100;System.out.println("Result is: "+s
2020-09-19 22:06:57
380
原创 2020-9-17
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。忘记考虑 “” “a”两种情况class Solution { public int lengthOfLastWord(String s) { int n = s.length(); int end = n-1
2020-09-17 23:00:00
165
原创 2020.9.16二分法
二分法给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。class Solution { public int searchInsert(int[] nums, int target) { int n = nums.length; int left = 0, right = n-1; while(left <= right){
2020-09-16 22:46:31
156
原创 idea使用,快捷键,设置
快捷键快速生成main方法psmv快速输出soutpackage com.dongli.data;/*idea 快捷键 */public class data2 { private String a ; private String b ; public data2() { } public String getA() { return a; } public data2(String a, String b) {
2020-09-15 23:02:30
410
原创 2020-9-15
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob
2020-09-15 22:20:28
146
原创 2020-09-14
有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。package com.dongli.data;import jav
2020-09-15 22:04:45
158
原创 2020.9.13
2020.9.13length和length()的区别length用于数组的计算长度,length()计算String的长度简单转置class Solution { public int[][] transpose(int[][] A) { int r = A.length; int c = A[0].length; int[][] ans = new int[c][r]; for (int i=0; i<r ; i++)
2020-09-13 23:21:45
119
原创 最大公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-co
2020-06-22 13:43:03
505
原创 python机器学习
scikit-learn 包括一些标准数据集,不需要从外部下载,可直接导入使用,比如与分类问题相关的Iris数据集和digits手写图像数据集,与回归问题相关的波士顿房价数据集。以下列举一些简单的数据集,括号内表示对应的问题是分类还是回归:#加载并返回波士顿房价数据集(回归)load_boston([return_X_y])#加载并返回iris数据集(分类)load_iris([return_X_y])#加载并返回糖尿病数据集(回归)load_diabetes([return_X_y])#加
2020-06-21 11:39:46
705
原创 java高级特性 集合框架 educoder
JAVA中的集合:是一个工具类,就像是容器,存储任意数量具有共同属性的集合。例如:购物车是商品的集合,军队是军人的集合。为什么使用集合我们已经知道集合就是能存储大量数据的一个容器,但是咱们在Java入门的时候学过数组,数组也是一个能存储大量数据的容器,好像也可以满足日常开发的需求,那我们为什么要使用集合呢?如果说之前学习的数组是一根打狗棒的话,那我们将要学习的集合就可以看做是一根如意金箍棒了。集合和数组有如下区别:数组的长度固定,集合的长度可变;数组只能通过下标访问元素,类型固定,而有的集合
2020-06-20 10:39:16
2373
原创 罗马数字转换
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况
2020-06-19 22:31:30
2079
原创 网站开发学习—表单元素
一般在网站上填写个人信息的时候,会输入姓名、昵称等信息,这里用到的就是<input>标签。你可以使用<input>标签来创建一个输入框,使用type属性来指定input元素的类型,使用name属性来规定input元素的名称,它可以对提交到服务器后的表单数据进行标识。例子如下:姓名:<input type="text" name="userName"/>效果如下:姓名:这里type="text",表示普通文本的输入。注意:<input ty
2020-06-18 22:46:53
587
原创 java 输入输出流
什么是字节字节是指一小组相邻的二进制数码。通常是8位作为一个字节。它是构成信息的一个小单位,并作为一个整体来参加操作,比字小,是构成字的单位。字节(Byte) 是一种计量单位,表示数据量的多少,它是计算机信息技术用于计量存储容量的一种计量单位.什么是字符我们想象一下,给你一串二进制码,要你来分辨它是什么含义,是代表数字还是字母还是汉字,你能有效的分辨吗?显然不能,一般来说,我们是比较难以理解一串二进制码代表的含义的,而且一串二进制码是代表什么含义也无法很直观的表示出来。我们比较好识别
2020-06-18 21:57:53
4270
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅