
java
文章平均质量分 57
浪子城
芸芸众生,不过尔尔
展开
-
HashMap源码剖析-put流程
本文仅讲解put方法主要的处理流程,加深对hashmap的理解。hashMap无参构造器,只初始化负载因子,不初始化大小。源码来源:JDK1.8。原创 2024-07-09 16:00:40 · 211 阅读 · 0 评论 -
docker发布dubbo服务 外部程序访问不到问题处理
程序通过docker向zookeeper注册服务时,会将容器地址(内网地址)作为服务的通信地址。当我们的程序都在容器内相互通信时,可以凭借容器地址相互通信。在创建容器时,给容器增加dubbo相关的特殊配置。特别是我们开发时需要连接一些测试环境的服务时,遇到这种问题总不能把服务在本地都启动一遍吧。31882宿主机端口与程序内配置的dubbo端口别忘记映射,好多人容易忽略。添加完之后,重新构建一个容器,观察dubbo服务提供者的通信地址 就变成。至此本地与容器内的dubbo服务就可以正常通信了。原创 2024-02-27 17:41:18 · 926 阅读 · 1 评论 -
JAVA并发编程入门之-闭锁、信号量、栅栏
闭锁的作用相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当到达结束状态时,这扇门会打开并允许所有线程通过;Future表示的计算是通过Callable来实现,相当于一种可生成结果的Runnable,并且可处于以下三种状态:等待运行,正在运行(Running)和运行完成(Completed);线程调用await()方法的时候,这个线程就会被阻塞,当调用await()的线程数量到达屏障数的时候,主线程就会取消所有被阻塞线程的状态。闭锁用于等待事件,而栅栏用于等待其它线程;原创 2024-01-04 17:54:54 · 1655 阅读 · 0 评论 -
分布式与微服务的区别--之不是一个玩意篇
分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。分布式系统(distributed system)是建立在网络之上的软件系统。分布式诞生所要解决的是:存储、计算两个问题,且分布式一定是集群架构。分布式存储:当系统需要存储的文件过大,超出了单机硬盘的存储能力,就需要将文件拆分成若干个有序的小文件,分别存储到不同的机器上。并记录这些小文件的存储的元数据信息,比如:顺序、大小、存储位置等。原创 2023-07-10 16:07:27 · 284 阅读 · 0 评论 -
浅谈恶意请求造成缓存穿透和布隆过滤器
Bloom Filter(布隆过滤器)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。优点:空间效率和查询时间都远远超过一般的算法。原创 2023-01-08 21:11:56 · 310 阅读 · 1 评论 -
组织结构树处理-告别递归
怎样效率又高又不会出现栈溢出的情况呢,我的思路是利用Map。言归正传,我们开始遍历组织列表的list,每次拿到值之后,我们就当他是最底层的节点,要做的就是从Map中寻找他的parentId。对,就是在Map中通过不断的引用来形成我们需要的树。一直以来,我们对于组织结构树的处理,第一印象就是递归,因为谁也不知道到底有多少层。但是当组织结构的叶子变得越来越大,还有比较恶心的场景非要返回整棵树怎么办,还是感觉能跑就行?哈哈)这样场景,递归的时间复杂度为O(2^n),指数型增长,效率指数型下降,滋滋~。原创 2022-12-09 22:16:33 · 317 阅读 · 0 评论 -
分布式锁-这一篇全了解(Redis实现分布式锁完美方案)
前言 在某些场景中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的。 随着技术快速发展,数据规模增大,分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),在有些场景中,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,即保证某一方法同一时刻只能被一个线程执行。在单机环境中,应用是在同一进程下的,只需要保证单进程多线程环境中的线程安全性,通过 JAVA 提供的 vol...转载 2021-07-18 21:16:16 · 944 阅读 · 0 评论 -
FileChannel无法设置非阻塞原因
个人观点:阻塞与非阻塞发生在进程与进程之间的通信,一般文件的读写操作只会发生在进程内部,不存在外部进程的传输,即使存在进程间的传输,文件依旧需要通过网络通信,把内容转成数据流传输,这点的传输和Socket通信是相同的,所以没必要再造一个API出来。...原创 2021-07-07 11:40:29 · 504 阅读 · 1 评论 -
The consumer group[] has been created before, specify another name please。RocketMQ异常
异常信息:org.apache.rocketmq.client.exception.MQClientException: The consumer group[] has been created before, specify another name please.See http://rocketmq.apache.org/docs/faq/ for further details. at org.apache.rocketmq.client.impl.consumer.DefaultMQPus原创 2021-06-10 15:06:52 · 10020 阅读 · 6 评论 -
线程组和线程池的区别
线程组:线程组存在的意义,首要原因是安全。java默认创建的线程都是属于系统线程组,而同一个线程组的线程是可以相互修改对方的数据的。但如果在不同的线程组中,那么就不能“跨线程组”修改数据,可以从一定程度上保证数据安全。线程池:线程池存在的意义,首要作用是效率。线程的创建和结束都需要耗费一定的系统时间(特别是创建),不停创建和删除线程会浪费大量的时间。所以,在创建出一条线程并使其在执行完任务后不结束,而是使其进入休眠状态,在需要用时再唤醒,那么就可以节省一定的时间。如果这样的线程比较多,那么就可以..转载 2020-09-29 14:55:42 · 411 阅读 · 0 评论 -
购物车存储在什么位置比较合适?Session?Cookie?数据库?
目前我们使用购物车的存储方式主要有:Session方式,Cookie方式,数据库存储,我们来一一分析优缺点。1.Session(Memcached)方式优点:购物车信息保存在服务端,可以保存1M 信息。缺点:对于大型网站会占有过多的服务器内存资源,造成服务器压力过大。Session保存的信息会在用户退出登录后丢失。用户下次登录,购物车中商品信息丢失,用户只能从新选择。2.Cookie方...转载 2019-12-12 23:27:02 · 1612 阅读 · 0 评论