- 博客(162)
- 资源 (37)
- 论坛 (4)
- 收藏
- 关注
原创 函数式编程是如何提升代码的扩展性
软件的发展大致经历三个阶段 第一阶段(20世纪40年代中期到50年代中期),主要是科学与工程计算,处理对象为数值数据,以个体方式使用机器(或汇编)语言编制程序 第二阶段(20世纪50年代中期到60年代后期),从高级程序设计语言出现到软件工程提出以前。这个阶段研究对象增加了并发程序,并着重研究高级程序设计语言、编译程序、操作系统以及各种支撑软件和应用软件 第三阶段(20世纪60年代后期软件工程提出以来),由于大型软件的开发耗时耗力,任务重,需要采用合作的方式才能完成,所以引入软.
2020-08-31 23:22:15
89
原创 深入剖析优惠券核心架构设计
很多网站都有优惠券业务,但是剖析优惠券架构的技术文章却很少,优惠券看似简单,但内部涉及用户、商品、平台、店铺等综合维度下各种营销玩法,复杂度一下会提高很多。所以写了这篇文章来看看优惠券是如何技术架构的。IT 界有句名言,”talk is cheap, show me the code“。废话不都说,开始进入正题我们先简单了解下优惠券都包含哪些重要信息,做了个优惠券信息的思维导图优惠券创建完成后,接下来就是透出、使用。透出涉及的位置很多,比如活动会场、开机屏,但流量最大...
2020-08-02 10:49:58
1257
原创 淘宝订单自动确认收货的N种实现,秒杀面试官
在这个电子商务流行年代,24小时随时随地网购已经成为我们习以为常的生活习惯。看到不错的商品,我们会立即下单,完全不受时间、空间的限制,剁手,然后在家坐等收快递,那种感觉。。。。细心的你是否发现,我们好像很少去主动点击‘’确认收货”,毕竟拿到了货,我总要先体验几天,谁知道它会不会坏,但时间一拖就忘了操作确认收货。而担保交易,如果买家不确认收货,交易订单无法完结,那商家是收不到货款的。有什么解决办法?上面示图是淘宝APP的订单详情页,左上方的自动确认时间起到了关键作...
2020-08-02 10:40:21
1925
原创 单台 MySQL 支撑不了这么多的并发请求,我们该怎么办?
关系型数据库的事务特性可以帮我们解决很多难题,比如数据的一致性问题,所以常规业务持久化存储都会mysql 来兜底。但mysql 的性能是有限的。当业务规模发展到上百万用户,访问量达到上万QPS时,单台mysql实例很难应付。有哪些解决方案?1、首先我们会想到给数据库找一个搭档,也就是缓存目前市面上经典组合是mysql+redis。Redis 作为 MySQL 的前置缓存,可以替 MySQL 挡住绝大部分查询请求,很大程度上缓解了 MySQL 并发请求的压力。Redis 是一...
2020-07-30 23:33:04
365
原创 如何打造一个高效的研发团队
互联网公司的成功很大一部分归结为人才储备,如何打造有活力、持续创新的研发团队,相信很多管理者都比较关心。下面我们从业务支撑、技术架构、团队建设这几个方面做简单剖析业务支撑快速发展已经成为互联网公司的一种常态,那么在这么快的节奏下,如何快速支撑业务?尤其是在资源紧缺的情况下,既要做业务,也要做系统优化升级。确实很难做取舍。我的观点是看公司的规模,如果是创业早期,活下来才是第一要素,我们会将业务分为日常项目和重点项目。所谓重点项目就是能影响市场抢占度,甚至影响公司生死的项...
2020-07-30 23:29:47
177
原创 如何第一时间发现线上故障
现在的研发工作越来越难做了,996、007,有事没事就要来公司加个班已经成为家常便饭,好像非工作时间不来公司露个脸现个身,就显得不求上进。身体累,心更累,就怕哪一天,一不小心倒在工作岗位,这还不算够惨,哪天运气不佳,再来个客户投诉,给万恶的资本家找到由头,给你年终考核定个不及格,没有年终奖,卧槽,真是一年白干,欲哭无泪。有没有什么策略,可以规避这种问题。线上问题大部分都是客户投诉上来的,根据问题的严重程度,影响着投诉面大小。如果有套监控系统(数据核对平台)就好了,可以第一时间发现问...
2020-07-30 23:28:02
109
原创 如何设计一个高并发网关
前言Gateway 是一个服务器,也可以说是进入系统的唯一节点。这跟面向对象设计模式中的 Facade 模式很像。Gateway 封装内部系统的架构,并且提供 API 给各个客户端。主要模块:授权、监控、负载均衡、缓存、熔断、降级、限流、请求分片和管理、静态响应处理,等等。核心设计 请求路由 对于调用端来说,也是一件非常方便的事情。因为调用端不需要知道自己需要用到的其它服务的地址,全部统一地交给 Gateway 来处理。 服务注册 为了能够代理后面的服务,并...
2020-07-30 23:22:25
183
原创 电商交易系统核心技术
前言电商诞生已经有20多个年头了,从早期很多人的质疑、骗子、不接受、甚至肄业排斥、打压,到现在彻底融入我们生活的方方面面,并号称中国的“新四大发明”,“认知教育”使命已经完成。人们足不出户,网上下个单,就可以在家坐等收包裹,确实是一种享受。今天就跟大家聊聊电商技术里面最重要的交易部分核心模块 购物车 下单 付款 库...
2020-02-16 10:06:56
1105
原创 Dubbo框架常见问题
在分布式架构时代,dubbo 作为RPC框架,以其高性能、易扩展、配置简单、易上手被越来越多的公司所青睐,在国内互联网公司中口碑一直很好。因为其高频使用,很多面试官会考察dubbo相关知识,框架原理很多人都能说出个一二来,但实用性不强。本文就日常工作中dubbo常见的错误及解决方案做了梳理。感兴趣的同学可以加收藏。????1、服务注册不上怎么办?•检查暴露服务的 Spring 配置有没...
2020-01-26 11:39:33
357
原创 如何解决分布式事务
事务有四个特性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID随着分布式架构理念提出,软件系统架构开始迈入一个新时代。一个臃肿的应用会拆分出若干个微服务中心,按业务域维度划分系统边界,大家各司其职,在自己负责的领域深耕细作,可谓好处多多。但同时也增加了系统复杂度,每个子业务系统都涉及数据库操作,如何解决分布式事务是一个绕不开的话题。什么是分布式事务,一句话概括:分布式事务...
2020-01-23 15:06:36
493
原创 阿里主流开源框架大汇总
Fastjsonfastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器。快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson);强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum);零依赖(没有依赖其它任何类库除了JDK)。地址:https://github.com/alibab...
2020-01-18 22:02:21
1526
原创 APNS开源包的内存泄露问题
APNS(全称:Apple Push Notification Service),主要是用于往苹果设备推送push消息通知!基本流程:今天要聊的问题集中在第4个环节,我们自己的服务器往苹果的消息中心推送通知。现状:历史原因,push的代码散落在各个应用中,随着新消息通道不断接入,开发、维护成本较高,开始考虑构建push中心,封装dubbo接口对外提供服务,对外屏蔽各种差异,将所有的push业务逐步
2015-09-29 21:35:39
2529
2
原创 MAT使用教程
MAT 全称 Eclipse Memory Analysis Tools 是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,从而定位内存泄漏的原因。什么时候会用到MAT?a) OutOfMemoryError的时候,触发full gc,但空间却回收不了,引发内存泄露b)java服务器系统异常,比如load飙高,io异
2015-09-27 00:36:16
16909
5
原创 jvm调优
jvm性能调优的目地:1)控制jvm的堆栈大小。比如当你的程序年轻代对象在某个时间段产生的比较多的时候,就需要控制年轻代的堆大小。同时还要控制总的JVM大小避免内存溢出2)控制GC的行为。GC是一个后台处理,但是它也是会消耗系统性能的,因此要根据运行程序的特点来更改GC行为。3)控制jvm线程的内存分配。如果是多线程程序,产生线程和线程运行所消耗的内存也是可以控制的。堆大小设置-Xms 初始堆
2014-05-24 17:04:50
1434
原创 Tomcat性能优化
压力测试web压力测试的实现原理都是通过发送大量的重复的页面请求来模拟多用户对被测系统的并发访问,以此达到产生压力的目地。产生压力的手段都是通过录制或编写压力脚本,这些脚本以多进程或多线程的方式在客户端运行,这样通过人为制造各种类型的压力,我们可以观察被测系统在各种压力情况下的反映,从而定位系统瓶颈,作为系统调优的基础。目前已经市场上的性能测试工具不下一百种,从单一的开放源码的免费小工具如 Apa
2014-05-22 23:25:30
1273
原创 大型系统架构演化
互联网系统一般会有几个特色标签:用户基数大、高并发高访问量、海量数据存储、业务更新频繁。看似复杂的系统也不是一蹴而就,任何事情都会经历一个由小到大的发展过程。今天我们就来看看一个系统是如何随着业务的扩张而不断演化的。1. 早期的系统由于业务简单,应用服务器和数据库都是在一台服务器。
2014-04-25 23:22:58
1586
原创 装饰者模式&代理模式
一、装饰者模式装饰者模式,在保持原有功能不变的情况下将一个类重新装饰,使其具有更强大的功能,用一句成语形容“锦上添花”。类结构:Component:抽象组件,定义了一组抽象的接口,指定了被装饰的组件都有哪些功能。ComponentImpl:抽象组件实现类,完成了基本的功能实现Decorator:装饰器角色,持有Component的实例引用,有点递归的感觉。伪代码:Component c=new C
2014-04-01 09:17:38
1201
原创 适配器模式&观察者模式
一、适配器模式适配器模式就是一个类的接口不能被客户端接受,需要转换为另一种接口,从而使两个不匹配的接口能在一起工作。类结构:Adaptee:源接口,需要适配的接口Target:目标接口,暴露出去的接口Adapter:适配器,将源接口适配成目标接口举个现实例子:Adaptee就是相机中的内存卡片,Target就是电脑,而Adapter则是USB读卡器。适用场景:比如查物流信息,由于物流公司的系统都是
2014-04-01 09:17:30
1249
原创 系统性能优化常用手段
1. 尽量减少 HTTP 请求常用方法:a)将多个js(多个css)文件合成一个b)将多个图片合成一张,利用css的偏移来控制显示2. 减少文件大小精简js和css的文件大小,比如去除空格、换行符、注释,将长变量名、函数名用短字符替换等等。提高网络带宽利用率。推荐两个在线精简工具js:http://shrinksafe.dojotoolkit.org/css:http://www.cssdrive
2014-03-26 09:04:22
1879
翻译 Netty小结
Netty 是一个异步的、事件驱动的网络编程框架,可以快速开发出可维护的、高性能、高扩展能力的协议服务及其客户端应用。Netty 是一个基于NIO的客户端、服务器端编程框架,使用Netty可以确保你快速简单的开发出一个网络应用。例如实现了某种协议的客户端、服务端应用。Netty简化了网络应用的编程开发过程,例如:TCP和UDP的socket服务开发。“快速”和“简单”并不意味着会让你的最终应用产生
2014-03-19 09:05:20
1742
原创 Redis缓存
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。redis支持各种不同方式的排序。与memca
2014-03-13 22:03:57
2218
原创 手机请求监控
一、背景之前大家都是做pc上的业务,通过浏览器上的url地址及webx框架映射规则,很容易判断当前的功能是访问后台的哪个类。但现在转到无线后,手机上看不到这个url地址,同时中间又夹了一层mtop,貌似手机上的功能和服务端的hsf接口直观串联起来更加困难。。。有没有什么方法可以解决这个问题??答案是肯定的二、解决方案fiddle,这个工具相信大家不会陌生,它不但能截获各种浏览器发出的HTTP请求,
2014-03-10 21:34:25
2162
原创 责任链模式
软件设计模式大致可以分为三类,共23种。创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式、访问者模式。其实模式这东西也有点虚,写代码并不一定要生搬硬套上面的模式。如何能满
2014-03-08 20:17:21
1337
原创 CyclicBarrier介绍
CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一
2014-03-04 19:20:59
1187
原创 策略模式&模板模式
一、策略模式策略模式通常是指完成某个操作可能会有多种方法,适用于多种场合。我们需要把每个操作方法当做一个实现策略,调用者可根据需要(特定的规则)选择合适的策略结构类图:Context:使用不同的策略环境,根据自身的条件选择不同的策略实现类来完成所需要的操作。他持有一个策略实例的引用Strategy:抽象策略,定义每个策略都要实现的方法Realize1,Realize2:负责实现抽象策略中定义的策略
2014-02-28 13:06:57
1526
1
原创 浅谈spring——Spring资源加载(十二)
Spring将各种形式的资源封装成一个统一的Resource接口。通过这个Resource接口,你可以取得URL、InputStream和File对象。当然,Resource对象所代表的资源可能不存在,此时InputStream就取不到。如果Resource不是代表文件系统中的一个文件,那么File对象也是取不到的。Spring通过“注入”的方式来设置资源。假如你有一个Java类:public c
2014-01-19 22:13:18
2147
原创 webx—Session框架详解
这个session框架是依赖于我们的通用service框架的。由于service框架是Webx框架的基础,所以Webx自然可以方便地使用这个session框架。对于webx之外的WEB应用 —— 例如:独立运行的JSP、由其它应用框架如webwork制作的应用 —— 我们提供了一个filter。这样所有的应用都可以使用我们的session框架,从而支持cookie-based session、be
2014-01-11 22:34:08
4367
原创 webx—CommandDispatcher分发服务
一、简介Command pattern是一套基于Spring Framework ,以Use Case为中心的框架。它糅合了几种经典的JavaEE设计模式,使应用开发者在实现Use Case时,能够更专注于商业逻辑本身。结构图:1
2014-01-09 20:36:50
2031
1
原创 Servlet、Filter、Listener的简介
一、 ServletServlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。 它担当Web浏览器或其他HTTP客户程序发出请求,与HTTP服务器上的数据库或应用程序之间的中间层。javax.servlet.http.HttpServlet实现了专门用于响应HTTP请求的Servlet。自定义的servlet只需继承HttpServlet,并覆盖以下方法其中之
2014-01-08 15:45:18
1251
原创 Log4J 使用详解
Log4j是Apache的一个开源项目,它允许开发者以任意间隔输出日志信息.。主要分为两部分:一是appender,是输出日志的方式;二是logger,是具体日志输出器1. Appender 其中,Log4j提供的appender有以下几种: org.apache.log4j.ConsoleAppender(输出到控制台) org.apache.log4j.FileAppender(输出
2014-01-06 12:03:32
2405
原创 j2ee中常用的五种远程调用协议
一、综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能。RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础。但它只能用于JAVA程序之间的通讯。Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语
2013-09-23 22:19:40
5281
3
原创 Velocity源码分析
velocity模板渲染的步骤:1) 首先初始化启动Velocity引擎,可以通过Velocity.init()或者新建VelocityEngine类,并调用其中的init()方法;2) 创建一个VelocityContext对象,将变量名与值关联起来,与HashMap对象相类似。可以直接将值传递给页面进行引用;3) 获取一个模板,利用Velocity.getTemplate()获取一个渲染模板,
2013-08-31 00:42:30
3062
原创 浅谈spring——spring MVC(十一)
springMVC框架主要是围绕DispatcherServlet这个核心展开,它负责拦截请求并将其分派给相应的的处理器处理,然后将结果响应给用户。包括注解驱动控制器、请求及响应信息处理、视图解析、本地化解析、上传文件解析、异常处理、表单绑定等springMVC是基于Model2来实现的,利用处理器分离模型、视图和控制,达到不同技术层级间松散层耦合的效果,提高系统灵活性、复用性和可维护性。而Model1则是将展现逻辑和业务逻辑集中在一起,耦合性高,不容易扩展。
2013-08-24 15:46:11
1804
原创 Hbase安装与简介
(一)简介:HBase是一个分布式的、面向列的开源数据库。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。 表结构:HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family)。 Row Keycolum
2013-08-15 08:56:55
2359
2
原创 浅谈spring——DAO管理(十)
目前市场上的持久化技术框架有:Hibernate、ibatis、JDO、JPA、TOPLink等。由于框架繁杂,spring需要提供模板类简化各种持久化技术的使用(设计模式方面使用:模板模式、适配器模式),体现了“开-闭原则”JDBC数据访问操作流程:1. 获取数据库连接2. 开启事务3.获得prepareStatement执行功能,预加载sql语句,设置参数,执行,对Re
2013-08-10 22:13:25
2076
原创 浅谈spring——注解配置(九)
spring定义一个切面是件麻烦的事情,需要实现专门的接口,还要进行一些较为复杂的配置,有没有较为简单的方法???@AspectJ注解可以很容易定义一个切面,且不需要实现任何的接口。缺点是对JDK的版本有限制,要求是5.0以上当然对于不足5.0的版本,可以通过Schema的配置定义切面,方便程度和@AspectJ相差无几。无论是基于XML配置的AOP还是基于@AspectJ注解
2013-08-06 23:34:10
1349
nginx(windows版本)
2012-08-09
webxsample
2012-06-14
如何编写高质量的代码_编码规范
2010-01-10
项目数据库实施手册(最新版)
2009-09-13
基于struts2.0的进销存管理系统
2009-05-06
Tom哥的小屋的留言板
发表于 2020-01-02 最后回复 2020-01-02
杭州有哪些好的IT公司
发表于 2012-04-16 最后回复 2013-04-26
求web信息过滤的样本数据
发表于 2009-12-08 最后回复 2012-04-16
如何快速学习web开发
发表于 2011-08-24 最后回复 2011-08-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝