stopwatch

最简 Spring IOC 容器源码分析

旧时模样 提交于 2020-12-11 01:56:49
<!-- TOC --> 前言 BeanDefinition BeanFactory 简介 Web 容器启动过程 bean 的加载 FactoryBean 循环依赖 bean 生命周期 公众号 <!-- /TOC --> 前言 许多文章都是分析的 xml 配置,但是现在 Spring Boot 开发多基于注解。本文从 注解 的角度分析 Spring IOC 容器源码。 版本: Spring Boot:2.1.6.RELEASE Spring FrameWork:5.1.8.RELEASE Java 8 文章部分内容参考自: https://www.javadoop.com/post/spring-ioc BeanDefinition BeanDefinition 接口定义了一个包含属性、构造器参数、其他具体信息的 bean 实例。 public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement { // ConfigurableBeanFactory 中只有 2 种:singleton 和 prototype。 // request, session 等是基于 Web 的扩展 String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE

.NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响

非 Y 不嫁゛ 提交于 2020-12-05 03:00:46
介绍 <p>最近一直在使用<a href="https://github.com/CollaboratingPlatypus/PetaPoco">Petapoco</a>+Entity Framework Core结合开发一套系统。</p> <p>使用EFCore进行Code First编码,使用<a href="https://mp.weixin.qq.com/s?__biz=MzI2MDQ3NDkxMA==&mid=2247483979&idx=1&sn=94f23048f2be219cbfcabdc07da6e951&chksm=ea68533add1fda2c0d0f300188e7b5a3f424d30b5608191e64d0f605c2f1306c7802188a17e8&token=569544938&lang=zh_CN#rd">PMC命令</a>生成数据库表的信息。</p> <p>使用Petapoco进行数据库的常规操作。并且结合<a href="https://github.com/asherber/PetaPoco.SqlKata">PetaPoco.SqlKata</a>的使用,减少了编写SQL语句的工作量,对提升开发效率有很大的帮助。Petapoco对数据库的支持非常的全,包括常规的一下数据库:SQL Server,SQL Server CE,MS

令牌桶算法限流

此生再无相见时 提交于 2020-11-27 05:22:41
限流 限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。常用的限流算法有令牌桶和和漏桶,而Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存:缓存的目的是提升系统访问速度和增大系统处理容量 降级:降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行 限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理 我们经常在调别人的接口的时候会发现有限制,比如微信公众平台接口、百度API Store、聚合API等等这样的,对方会限制每天最多调多少次或者每分钟最多调多少次 我们自己在开发系统的时候也需要考虑到这些,比如我们公司在上传商品的时候就做了限流,因为用户每一次上传商品,我们需要将商品数据同到到美团、饿了么、京东、百度、自营等第三方平台,这个工作量是巨大,频繁操作会拖慢系统,故做限流。 以上都是题外话,接下来我们重点看一下令牌桶算法 令牌桶算法 下面是从网上找的两张图来描述令牌桶算法: RateLimiter https://github.com/google

C# 泛型

半城伤御伤魂 提交于 2020-11-21 02:36:02
这篇文章主要讲解C#中的泛型,泛型在C#中有很重要的地位,尤其是在搭建项目框架的时候。 一、什么是泛型 泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能 我们在编写程序时,会经常遇到功能非常相似的模块,只是他们的处理数据不一样,但我们没有办法,只能分别写多个方法来做处理不同的数据类型。那么问题来了,有没有一种方法,用同一个方法处理传入不同种类型参数的方法呢?有人就会想到传入Object可以去处理,但是我们都知道Object有装箱拆箱的操作,那么在C#2.0泛型的出现就是专门来解决这个问题的。 二、为什么使用泛型 先来看下以前做法的例子: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyGeneric { public class CommonMethod { /// <summary> /// 打印个int值 /// 因为方法声明的时候,写死了参数类型 /// 已婚的男人 Eleven San /// </summary> /// <param name="iParameter"></param> public static void ShowInt(

为什么MySQL不推荐使用uuid或者雪花id作为主键?

给你一囗甜甜゛ 提交于 2020-11-15 19:19:46
程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 5.6 分钟。 作者:Yrion cnblogs.com/wyq178/p/12548864.html 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处? 本篇博客我们就来分析这个问题,探讨一下内部的原因。 本篇博客的目录 mysql程序实例 使用uuid和自增id的索引结构对比 总结 一、mysql和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变. 根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机key其实是指用雪花算法算出来的前后不连续不重复无规律的id:一串18位长度的long值 id自动生成表: 用户uuid表 随机主键表: 1.2.光有理论不行,直接上程序,使用spring的jdbcTemplate来实现增查测试: 技术框架

为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?

蹲街弑〆低调 提交于 2020-11-02 07:37:16
点击这段文字获取: 5个可以写到简历的项目实战视频教程(含源码) 在日常开发中,我们经常需要给对象进行赋值,通常会调用其set/get方法,有些时候,如果我们要转换的两个对象之间属性大致相同,会考虑使用属性拷贝工具进行。 如我们经常在代码中会对一个数据结构封装成DO、SDO、DTO、VO等,而这些Bean中的大部分属性都是一样的,所以使用属性拷贝类工具可以帮助我们节省大量的set和get操作。 市面上有很多类似的工具类,比较常用的有 1、Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer 那么,我们到底应该选择哪种工具类更加合适呢?为什么阿里巴巴Java开发手册中提到禁止使用Apache BeanUtils呢?  由于篇幅优先,关于这几种工具类的用法及区别,还有到底是什么是浅拷贝和深拷贝不在本文的讨论范围内。 本文主要聚焦于对比这几个类库的性能问题。 性能对比 No Data No BB,我们就来写代码来对比下这几种框架的性能情况。 代码示例如下: 首先定义一个PersonDO类: public class PersonDO { private Integer id; private String name; private Integer age;

基本工具--Basic

拥有回忆 提交于 2020-10-21 20:51:25
一、Stopwatch StopWath是com.google.common.base.Stopwatch包下的一个任务执行时间监视器。 主要API: Stopwatch stopWatch = Stopwatch.createStarted(); start(); //开始计时 stop(); //停止计时 elapsed();//返回在这个秒表上显示的当前运行时间 reset(); isRunning(); 来源: oschina 链接: https://my.oschina.net/u/3727895/blog/4444171

StopWatch任务执行时间监视器

拟墨画扇 提交于 2020-10-15 01:26:25
//循环次数 private static int LOOP_COUNT = 10000000; //线程数量 //元素数量 private static int ITEM_COUNT1 = 10; private static Map<String, Long> normaluse() throws InterruptedException { ConcurrentHashMap<String, Long> freqs = new ConcurrentHashMap<>(ITEM_COUNT1); ForkJoinPool forkJoinPool = new ForkJoinPool(THREAD_COUNT); forkJoinPool.execute(() -> IntStream.rangeClosed(1, LOOP_COUNT).parallel().forEach(i -> { //获得一个随机的Key String key = "item" + ThreadLocalRandom.current().nextInt(ITEM_COUNT1); synchronized (freqs) { if (freqs.containsKey(key)) { //Key存在则+1 freqs.put(key, freqs.get(key) + 1); } else { /

.net core webapi通过中间件获取请求和响应内容

血红的双手。 提交于 2020-10-10 07:04:23
本文主要根据中间件来实现对.net core webapi中产生的请求和响应数据进行获取并存入日志文件中; 这里不详细介绍日志文件的使用。你可以自己接入NLog,log4net,Exceptionless等 创建接口记录的中间件 using Microliu.Core.Loggers; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Internal; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ptibro.Partner.API.Extensions { public class RequestResponseLoggingMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger;

[C#] 走进异步编程的世界

夙愿已清 提交于 2020-10-02 09:03:02
走进异步编程的世界 - 开始接触 async/await 序   这是学习异步编程的入门篇。   涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $"" 来拼接字符串,相当于string.Format() 方法。 目录 What's 异步? async/await 结构 What’s 异步方法? 一、What's 异步? 启动程序时,系统会在内存中创建一个新的进程。 进程 是构成运行程序资源的集合。 在进程内部,有称为 线程 的内核对象,它代表的是 真正的执行程序 。系统会在 Main 方法的第一行语句就开始线程的执行。 线程 : ①默认情况,一个进程只包含一个线程,从程序的开始到执行结束; ②线程可以派生自其它线程,所以一个进程可以包含不同状态的多个线程,来执行程序的不同部分; ③一个进程中的多个线程,将共享该进程的资源; ④系统为处理器执行所规划的单元 是线程,而非进程 。 一般来说我们写的控制台程序都只使用了一个线程,从第一条语句按顺序执行到最后一条。但在很多的情况下,这种简单的模型会在性能或用户体验上不好。 例如:服务器要同时处理来自多个客户端程序的请求,又要等待数据库和其它设备的响应,这将严重影响性能。程序不应该将时间浪费在响应上,而要在等待的同时执行其它任务! 现在我们开始进入异步编程。在异步程序中