说说你们的分布式ID设计方案 我们采用Snowflake算法,生成一个64bit的数字,64bit被划分成多个段,分别表示时间戳.机器编码.序号. 41位的时间序列(精确到毫秒,41位的长度可以使用69年). 10位的机器标识(10位的长度最多支持部署1024个节点). 12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号). 优点: 时间戳在高位,自增序列在低位,整个ID是趋势递增的,按照时间有序. 性能高,每秒可生成几百万ID. 可以根据自身业务需求灵活调整bit位…
<Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 CSS3 技术应用,推荐优秀的 网页设计 案例,共享精美的设计素材和优秀的 Web 开发工具,希望这些精心整理的前端技术文章能够帮助到您. HTML5 & CSS3 惊艳!9个不可思议的 HTML5 Canvas 应用试验 你应该知道的10个奇特的 HTML5 单页网站 帮助你实现漂亮界面的14套免费…
你们的项目怎么使用kafka? 我们采用kafka进行日志采集,准确点说是ELK方案,即elasticsearch + logstash + kibana + kafka.通过Spring AOP的方式收集日志,通过kafaka发送出去. kafa存在丢消息的情况吗,怎么解决? producer把消息发送给broker,因为网络抖动,消息没有到达broker,且开发人员无感知. 解决方案:producer设置acks参数,消息同步到master之后返回ack信号,否则抛异常使应用程序感知到并在业…
先贴个本帖的地址,免得其它网站被爬去了struts2入门系列二之Hello World  即 http://www.cnblogs.com/linghaoxinpian/p/6898779.html 你可以在我的百度网盘上下载样例项目 https://pan.baidu.com/s/1pL7DgwF 在struts2 web Application中,当用户点击一个连接或是提交一个表单时,他的请求将会被发送到你指定的java类中,而不是其它服务器页面(不理解也没关系,写完你就明白了).那个指定的…
学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系列三--实体 学习ASP.NET Core Blazor编程系列五--列表页面 学习ASP.NET Core Blazor编程系列七--新增图书 学习ASP.NET Core Blazor编程系列八--数据校验 学习ASP.NET Cor…
你们的项目Redis做了集群部署吗? 我们有大量数据需要缓存,而单实例的容量毕竟是有限的,于是做了Redis集群部署. 采取的方案是什么,Codis还是Redis Cluster,为什么要选择这个方案? 我们采用的官方Redis Cluster方案.Codis是一整套缓存解决方案,采取的代理模式实现了高可用.数据分片.监控.动态扩态等功能,但是部署太复杂了.Cluster要简单很多,而且也基本满足目前的需要. Redis Cluster有什么缺点吗,或者说不适合什么场景? 这种模式将存储和元数据…
你们的项目为什么要用RabbitMQ? 消息队列的作用是系统解耦.同步改异步.请求消峰,举个下订单的例子: 前端获取用户订单信息,请求后端的订单创建接口.这个接口并不直接请求订单服务,而是首先生成唯一订单编号,再组装一个订单消息并发送给RabbitMQ,然后返回唯一订单编号给前端.前端会根据唯一订单编号轮询订单状态接口,如果订单创建成功,则拉起支付界面引导用户付款.作为消费者,订单服务收到订单消息后,开始检查参数.检查库存.生成订单等等核心业务流程. 解耦体现在订单创建接口并没有直接访问订单服务…
StringBuffer与StringBuild的区别 频繁修改字符串时,建议使用StringBuffer和StringBuilder类.StringBuilder相较于StringBuffer有速度优势,要求线程安全的情况下,必须使用StringBuffer类. 为什么拼接String不推荐用加号 String的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低下,而且消耗大量内存空间. 为什么String是不可变的 String类内部所有的字段都是final修饰的…
TCP的滑动窗口协议是什么 滑动窗口协议,用于网络数据传输时的流量控制,以避免拥塞的发生.该协议允许发送方在停止并等待确认前发送多个数据分组.由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量.它本质上是描述接收方的TCO数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据.这个窗口大小为0时,发送方将停止发送数据.启动定时器,等待这个窗口变成非0.   滑动窗口协议必须保证数据包的按序传输,发送窗口中的序列号代表已发送但尚未收到确认的数…
说说Atomiclnteger的使用场景 AtomicInteger提供原子操作来进行Integer的使用,适合并发情况下的使用,比如两个线程对同一个整数累加. 为什么Atomiclnteger是线程安全的,原理是什么 AtomicInteger是对int类型的一个封装,提供原子性的访问和更新操作,其原子性操作的实现是基于CAS(compare-and-swap)技术.CAS表现为一组指令,当利用CAS执行试图进行一些更新操作时,会首先比较当前数值,如果数值未变,代表没有其它线程进行并发修改,则…