随笔分类 - 面面俱到
摘要:get和post请求的区别 get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);post请求一般是去提交数据 get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;post请求是
阅读全文
摘要:什么是Socket? 我们要了解什么是TCP编程与UDP编程,首先我们需要先了解什么是Socket。 Socket是一个抽象的概念,一个应用程序通过Socket建立一个远程连接,而Socket内部通过TCP/IP协议把数据传送至网络。 Socket就是套接字,由IP地址和端口号(范围是0~65535
阅读全文
摘要:下面主要使用的是 FileOutputStream / FileInputStream 把 IO 流绑定到 File 对象上,然后将这两个字节流通过OutputStreamReader / InputStreamReader 转换为字符流,并设置字符编码,最后再用 PrintWriter / Buf
阅读全文
摘要:有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。 实例变量和类变量都是状态变量 无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例 变量的对象.不能保存数据,是
阅读全文
摘要:在分布式系统调用场景中存在这样一个通用问题,即在执行一个核心业务逻辑的同时,还需要调用多个下游做业务处理,而且要求多个下游业务和当前核心业务必须同时成功或者同时失败,进而避免部分成功和失败的不一致情况出现。简单来说,消息队列中的“事务”,主要解决的是消息生产者和消费者的数据一致性问题。本篇文章通过拆
阅读全文
摘要:Spring Boot 是 Java 领域最优秀的微服务架构落地技术: Spring Boot 使编码更简单:提供了丰富的解决方案,快速集成各种解决方案提升开发效率。 Spring Boot 配置变简单:提供了丰富的 Starters,集成主流开源产品往往只需要简单的配置即可。 Spring Boo
阅读全文
摘要:BitMap(2.2 版新增) Bitmap,即位图,是一串连续的二进制数组(0和1),可以通过偏移量(offset)定位元素。BitMap通过最小的单位bit来进行0|1的设置,表示某个元素的值或者状态,时间复杂度为O(1)。 由于 bit 是计算机中最小的单位,使用它进行储存将非常节省空间,特别
阅读全文
摘要:分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。 本文就介绍Redis实现分布式锁的正确方式。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会
阅读全文
摘要:JDK自带DelayQueue 是一个支持延时获取元素的阻塞队列, 内部采用优先队列 PriorityQueue 存储元素。 元素必须实现 Delayed 接口;在创建元素时可以指定多久才可以从队列中获取当前元素,只有在延迟期满时才能从队列中提取元素。 DelayQueue属于排序队列,它的特殊之处
阅读全文
摘要:我们都知道 Redis 提供了丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。 随着 Redis 版本的更新,后面又支持了四种数据类型:BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3
阅读全文
摘要:延迟队列的应用 根据用户行为在特定的时间点向用户推送相应的提醒消息,比如以下业务场景: 在用户点击充值项后,半小时内未充值,向用户推送充值未完成提醒。 在用户最近一次阅读行为2小时后,向用户推送继续阅读提醒。 在用户新注册或退出应用N分钟后,向用户推送合适的推荐消息。 … 上述场景的共同特征就是在某
阅读全文
摘要:InnoDB行锁是通过给索引上的索引项加锁来实现的。所以,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。其他注意事项: 在不通过索引条件查询的时候,InnoDB使用的是表锁,而不是行锁。 由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以即使是访问不同
阅读全文
摘要:并发读:脏读、不可重复读、幻读 如果不对事务进行隔离性的保障,则在多个事务并发进行时,可能出现:脏读、不可重复读、幻读。 脏读 一个事务处理过程中,读取了另一个事务还未提交的数据。 举例: money = 0. 事务A、B开启。 事务A将money修改为100,但还未提交。 事务B执行money =
阅读全文
摘要:最后一个结点指针指向不同 在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是像双向链表那样置为NULL。此种情况还用于在最后一个结点后插入一个新的结点。 判断链域值不同 在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非像单链表那样判
阅读全文
摘要:什么是栈帧 栈帧是栈中的一个栈元素,是一种用于帮助虚拟机执行方法调用与方法执行的数据结构,当前线程中,每执行一个方法就会往栈中插入一个栈帧,当一个方法调用结束时,其对应的栈帧也会被丢弃。 栈帧本身是一种数据结构,封装了方法的局部变量表、动态链接信息、方法返回地址(即返回到方法的调用者)以及操作数栈。
阅读全文
摘要:能解决,但不能完全解决。 在RR和RC级别下,数据库的读分为快照读和当前读: 快照读:单纯的select操作。读取的是快照(ReadView)中的数据,可能是历史数据 当前读:select … for update/in share mode、update、insert、delete。读取的总是当前
阅读全文
摘要:Redis中缓存的数据是有过期时间的,当缓存数据失效时,redis会删除过期数据以节省内存,那redis是怎样删除过期数据的?删除过期数据的策略是什么? Redis为什么这么快,原因之一就是Redis操作都是基于内存的,既然是基于内存的,而内存的大小是有限的,当内存不足或占用过高时,怎么办?这就是我
阅读全文
摘要:什么是对象终止机制? Java语言提供了对象终止( finalization )机制来允许开发人员提供对象被销毁之前的自定义处理逻辑处理。 当垃圾回收器发现没有任何引用指向某个对象时,那么就会在垃圾回收中清除这个对象,在垃圾回收器回收此对象之前,会先调用这个对象的 finalize() 方法。 我们
阅读全文
摘要:SmartInitializingSingleton SmartInitializingSingleton中只有一个接口afterSingletonsInstantiated(),其作用是在spring容器管理的所有单例对象(非懒加载对象)初始化完成之后调用的回调接口。 InitializingBe
阅读全文
摘要:Nginx是什么 Nginx("engine x")是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强。 Nginx官网:http://nginx.org/ Nginx安装 Nginx官网下载地址:http://nginx.org/en/download.html 其中nginx-
阅读全文