技术分享 -- 147




概述上一篇日志中,我们介绍了 http 协议的基本内容HTTP 协议简介事实上,HTTP 协议并不仅仅包含这些内容,例如我们本文中将会介绍的 multipart/form-data 就是常见的一种 http 请求 multipart/form-data 请求在 1995 年出台的 rfc1867 协议中,HTTP 协议的 Content-Type 扩充了 multipart/form-data 类型用以支持向服务器发送二进制数据,以便可以在 POST 请求中实现文件上传等功能在 html 中,如果 <form> 表单标签中增加 enctryp="multipart/form-data" 属性,那么这个表单就会将提交请求中的 Content-Type 设置为 multipart/form-data<form method="post" action="http://test.techlog.cn/upload.do" e
#技术帖    #file    #技术分享    #上传   
概述在实际的项目中,我们的 HTTP 接口通常需要返回某个预先定义的特定模式的 json 字符串,而不是通常用户所看到的 HTML@RestController 就成为了一个非常实用的注解,只需要将 Controller 中相应的函数返回值设置成我们所定义的 json 对应的对象,Spring 会自动将其转换为 Json但是,有时我们并不想要让他返回值为 null 的字段,这要怎么做呢? xml 设置如果我们使用 xml 配置,那么一定会加入 <mvc:annotation-driven/> 来启用 SpringMVC 供能,那么只需要在该节点中加入 <mvc:message-converters> 节点即可进行一些自定义配置:<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessag
#技术帖    #controller    #技术分享    #java   

200x200


概述innodb 作为最主流使用的 mysql 存储引擎,尤其在新版本的 mysql 中 MyISAM 存储引擎被废除,更加提升了

#技术帖    #配置    #mysql    #sql   

200x200


概述在此前的日志中,我们介绍了 java1.8 版本以前的 hashmap 源码及工作原理:java HashMap 源码解析java8 对 

#技术帖    #技术分享    #源码    #java   

200x200


概述在我们的项目中,通常需要对各个方法实现 log 打印、上报监控数据、上报调用状态等等,这些通用的过程如果我们在每一个方法中都手动去添加是一个非常枯燥和容易出错的任务针对这样的场

#技术帖    #技术分享    #log    #java   

200x200


概述redis 是目前最常用的开源缓存系统之一,它具有丰富的缓存数据结构、支持事务、院子操作等等特性,在实际的生产环境中有着非常丰富的用途java 有 jedis&nbs

#技术帖    #技术分享    #redis    #连接池   
事件还原项目在线上一直运行良好,CPU、内存都有较多剩余,CPU load 长期在 0.3 左右,接到通知周内公司业务促销,可能使 QPS 上升到日常值的三倍以上,认为完全可以承受,毫无压力活动当天午高峰业务无任何异常,到晚高峰时,突然一个接口返回时间大幅上升,从原来的 100 到 200 毫秒左右上升到 2 到 3 秒,其他接口均没问题 问题定位出现这个问题,首先是采用临时加机器的方法来解决,有所好转情况十分诡异,因为虽然接口返回时间达到了 2 到 3 秒,但返回数据是无误的接口做了什么呢?逻辑十分简单,调用了一个远程接口,然后组装成一个新的对象返回查看监控,我的接口调用的接口的 99.9% 的耗时在 450 毫秒左右,而我调用该远程接口的超时时间设置为 500 毫秒,如果超时,那么是无法返回任何数据的,而实际情况是数据返回无误,也就是说依赖的这个远程接口调用成功并在 500 毫秒以内返回了数据,而本地的创建并初始化对象占用了剩余的 1.5 到 2.5 秒的时间,这显然是不合
#技术帖    #技术分享    #线程池    #pool   
概述rabbitmq 是目前使用最为普及的消息队列组件,基于 AMQP 的 rabbitmq 在各方面设计都比较完善,同时,它具有非常丰富的功能与特性,可以支持各种实际的适用场景但是 rabbitmq 并不直接支持延时队列的功能,本文我们就来介绍一下,如何使用 rabbitmq 实现一个延时队列 延时队列的简易实现延时队列就是只有当消息在队列中存放达到指定的时间后,才可以被消费,他的应用场景通常并不多,但在此前我们介绍的秒杀系统中非常常用订单抢购系统详细设计方案当用户提交订单指定时间后没有支付,那么用户的订单应该被取消以便其他用户可以继续抢购,这样的情况下,延时队列就非常有必要了 上一篇博客中,我们使用 redis 集群来实现了这个功能,redis 中存储了下单时间,以分钟为粒度扫描相应的 key,即可扫出所有下单时间超过指定时间间隔的数据rabbitmq 也可以依照上述理论,定时取出所有消息,时间间隔不足的则放回队列这样的方法优势在于实现简单,但是显然性能较低,虽然 rabbitmq 不支持延时队列的功能,但是我们依然可以借用 rabbitmq 的消息过期机制与失效消息转发机制来实现
#技术帖    #技术分享    #rabbitmq    #消息队列   

200x200


概述此前的日志中,我们介绍了订单系统秒杀与抢购的设计原则、挑战及常用方案订单系统秒杀与抢购的设计本篇日志中,介绍一个现实可行且实际工作的秒杀流程详细设计,以及面临的各种问题与应对方案 流程图

#技术帖    #web    #技术分享    #redis   

200x200


概述java 线程状态通常包括以下几种:创建(new)就绪(runnable)运行(running)阻塞(blocked)time waitingwaiting消亡(dead)当需

#技术帖    #技术分享    #线程    #sleep   



京ICP备15018585号