<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[java_weekly的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/java_weekly</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; java_weekly]]></copyright><item><title><![CDATA[服务幂等设计与实践]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/107787920</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/107787920</guid><author>java_weekly</author><pubDate>Tue, 04 Aug 2020 16:10:27 +0800</pubDate><description><![CDATA[幂等定义
请求层面
  保证请求重复执行和执行一次结果相同

业务层面
  1 同一个用户不重复下单
  2 商品不超卖
  3 MQ消费端去重
	
	
	
幂等范围
读/写请求层面
  请求对数据造成改变
    读 X
    写 √

架构层层面
  哪些层会对数据造成改变
    反向代理层  X
    网关层  X
    业务逻辑层 X
    数据访问层 √
	
	
	
数据访问层(CRUD)
1 Create/Insert
  如果插入记录拥有业务主键，或者唯一索引，则是幂等的

2...]]></description><category></category></item><item><title><![CDATA[服务负载均衡设计与实践]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/107761501</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/107761501</guid><author>java_weekly</author><pubDate>Mon, 03 Aug 2020 14:19:44 +0800</pubDate><description><![CDATA[服务无状态化定义
1 冗余部署多个模块(进程)完全对等
2 请求提交到冗余部署的任一模块，处理结果一样
3 模块不存储业务的上下文信息
4 仅根据每次请求携带数据进行相应的业务处理
	
	
	
狭义负载均衡
硬件
1 F5
2 A10
3 Radware

软件
1 LVS 4层
2 Nginx 7层
3 HAProxy 4层或7层

反向代理 VS 正向代理  从用户角度，无感知的是反向代理，比如Nginx，正向代理比如VPN
	
	
	
广义负载均衡

完整的故障处理恢复机制          ...]]></description><category></category></item><item><title><![CDATA[互联网高并发设计手段]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/107664984</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/107664984</guid><author>java_weekly</author><pubDate>Wed, 29 Jul 2020 16:50:45 +0800</pubDate><description><![CDATA[高并发设计主要关注的是系统性能，包括两个部分，1是吞吐量，2是响应延迟。

性能优化目标：

缩短响应延迟
	提高并发数(吞吐量)
	让系统处于合理状态
并发数、QPS、平均响应时间三者之间关系





从上图可以看出，


一开始，随着并发数的增加，资源利用率，吞吐量都是线性增长，逐渐达到一个峰值，响应时间变化不大
随着并发数继续增加，资源逐渐耗尽，没有资源可以再分配，服务器响应时间开始增加，甚至没有响应，吞吐量开始下降

优化手段


1 系统时间是瓶颈 ，利用空间换时间
比如，缓存复用计算结果，..]]></description><category></category></item><item><title><![CDATA[java基础一点也不基础]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/107066845</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/107066845</guid><author>java_weekly</author><pubDate>Thu, 02 Jul 2020 11:05:48 +0800</pubDate><description><![CDATA[1 创建对象的有哪几种方式
2 String类为什么是final
3 Class.forName和classloader的区别
4 java反射原理]]></description><category></category></item><item><title><![CDATA[HashMap暴露了你的java基础功底]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/107059091</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/107059091</guid><author>java_weekly</author><pubDate>Wed, 01 Jul 2020 15:00:38 +0800</pubDate><description><![CDATA[（新建的群1039047324，欢迎对技术感兴趣的朋友加入，群内只聊技术，分享工作中容易踩的坑，以及如何避免踩坑，分享最新架构视频)

1.HashMap的底层数据结构是什么？
底层数据结构是哈希表结构（链表散列：数组+单向链表），结合了数组和链表的优点，当链表长度超过8时，链表会转为红黑树。数组中的每一个元素都是链表。总结来说就是HashMap在JDK1.8之前底层是由数组+链表实现的，从JDK1.8开始底层是由数组+链表或者数组+红黑树实现的。

追问：为什么在1.8中增加红黑树？
当需要查找某个元素的]]></description><category></category></item><item><title><![CDATA[消息队列面试总结]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/106997322</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/106997322</guid><author>java_weekly</author><pubDate>Sun, 28 Jun 2020 15:14:19 +0800</pubDate><description><![CDATA[消息队列是分布式应用间交换信息的重要组件，消息队列可驻留在内存或磁盘上, 队列可以存储消息直到它们被应用程序读走。
通过消息队列，应用程序可以在不知道彼此位置的情况下独立处理消息，或者在处理消息前不需要等待接收此消息。
所以消息队列可以解决应用解耦、异步消息、流量削锋等问题，是实现高性能、高可用、可伸缩和最终一致性架构中不可以或缺的一环。
现在比较常见的消息队列产品主要有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、RocketMQ等。

本文重点以RabbitMQ为例。

1.为什么要使用]]></description><category></category></item><item><title><![CDATA[多线程面试梳理]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/106852149</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/106852149</guid><author>java_weekly</author><pubDate>Fri, 19 Jun 2020 16:18:58 +0800</pubDate><description><![CDATA[(刚新建的群1039047324，欢迎对技术感兴趣的朋友加入，群内只聊技术，分享工作中容易踩的坑，以及如何避免踩坑)

对于新手来说，掌握的多线程知识可能仅限于多线程的几种实现方式，线程的几种状态，以及wait，notify的简单用法。这如果面试的话必死无疑。

接下来整理一下多线程面试题，以及最重要的细节。

1、并发编程三要素，有点像数据库事务的ACID。1）原子性
原子性指的是一个或者多个操作，要么全部执行并且在执行的过程中不被其他操作打断，要么就全部都不执行。

Java内存模型只保证了基本读取和赋]]></description><category></category></item><item><title><![CDATA[Redis面试内容梳理]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/106801617</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/106801617</guid><author>java_weekly</author><pubDate>Wed, 17 Jun 2020 13:05:45 +0800</pubDate><description><![CDATA[(刚新建的群1039047324，欢迎对技术感兴趣的朋友加入，群内只聊技术，分享工作中容易踩的坑，以及如何避免踩坑)

考点

面试的时候问你缓存，主要是考察缓存特性的理解，对 MC（Memcache）、Redis 的特点和使用方式的掌握。

要知道缓存的使用场景，不同类型缓存的使用方式，例如：
	对 DB 热点数据进行缓存减少 DB 压力；对依赖的服务进行缓存，提高并发性能；
	
	
	单纯 K-V 缓存的场景可以使用 MC，而需要缓存 list、set 等特殊数据格式，可以使用 Redis；
		需要缓]]></description><category></category></item><item><title><![CDATA[程序员应该如何去请教别人问题]]></title><link>https://blog.youkuaiyun.com/java_weekly/article/details/72822232</link><guid>https://blog.youkuaiyun.com/java_weekly/article/details/72822232</guid><author>java_weekly</author><pubDate>Wed, 31 May 2017 17:34:28 +0800</pubDate><description><![CDATA[程序员应该如何提问]]></description><category></category></item></channel></rss>