轻量级

Web轻量级框架Gin-中间件使用

纵饮孤独 提交于 2019-12-06 06:18:24
Gin的中间件是Gin框架中一个极其重要的内容,而且Gin中间件也是使用Gin框架开发一个完整Web程序时不可或缺的部分,所以有必要好了解一下。 什么是Gin中间件 Gin中间件是什么?Gin中间件的作用是什么?要怎么样使用中间件呢? 1. Gin中间件的作用 好吧,简单来说,Gin中间件的作用有两个: Web请求到到达我们定义的HTTP请求处理方法之前,拦截请求并进行相应处理(比如:权限验证,数据过滤等),这个可以类比为 前置拦截器或前置过滤器 在我们处理完成请求并响应客户端时,拦截响应并进行相应的处理(比如:添加统一响应部头或数据格式等),这可以类型为 后置拦截器或后置过滤器 2. Gin中间件的定义 在Gin框架中,中间件的类型定义如下代码所示,可以看出,中间件实际上就是一个以gin.Context为形参的函数而已,与我们定义处理HTTP请求的Handler本质上是一样的,并没有什么神秘可言。 type HandlerFunc func(*Context) 3. Gin内置中间件 在使用Gin框架开发Web应用时,常常需要自定义中间件,不过,Gin也内置一些中间件,我们可以直接使用,下面是内置中间件列表: func BasicAuth(accounts Accounts) HandlerFunc func BasicAuthForRealm(accounts Accounts

.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy

我们两清 提交于 2019-12-05 07:04:50
一、Nancy简介   什么是Nancy呢?如果你学习过Ruby的话,就会知道Ruby中有个框架叫做Sinatra,Nancy就是Sinatra的.Net版本。如果你感觉微软的MVC过于笨重、过于繁琐,那么Nancy可能就是你苦苦寻找的东西。 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互。 Nancy 设计用于处理 DELETE , GET , HEAD , OPTIONS , POST , PUT 和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应。 Nancy和Asp.net MVC原理相似,但有自己的一套路由机制,在使用上更加易用,可以用Nancy快速开发一些网站。 Nancy并不依赖任何现有的框架,所以他可以运行在任何平台上面。 二、创建第一个Nancy项目   下面我们来写一个Nancy的Hello,world项目,来学习一下Nancy的简单使用,打开Visual Studio,新建空Web项目: 点击create,选择空的,然后再点击Create,如图: 创建成功是上图这样的。 接下来我们开始通过Nuget安装Nancy,一共需要安装下面三个包

轻量级监控平台之慢日志监控

我的未来我决定 提交于 2019-12-05 06:49:10
轻量级监控平台之慢日志监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报机器内rcp,web服务的慢接口数据 . /etc/profile . ~/.bash_profile pushurl="https://lightmonitorapi.test.cn/push/serviceslow" proNum=$(jps | grep -v Jps | cut -d' ' -f1) cd /opt/web/ webDir=$( ls ) msg="" for pid in $proNum do serviceName=$(serivce list | grep "$pid" | cut -d' ' -f1) if [ -n "$serviceName" ];then logdir=$(find "/opt/serivce/log/"$serviceName -name "serivce_trace.log" -mmin -360) if [ -n "$logdir" ];then ctime=$(date " %m-%d %H:%M") slowinfo=$( grep "$ctime" "$logdir" | grep ExecuteTimeFilter | grep -E ",time:[2-9]{2,}|,time:[0-9]{4,}" | awk -F','

【并发编程】synchronized的使用场景和原理简介

丶灬走出姿态 提交于 2019-12-05 04:38:58
1. synchronized使用 1.1 synchronized介绍 在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了。 synchronized可以修饰普通方法,静态方法和代码块。 当synchronized修饰一个方法或者一个代码块的时候,它能够保证在同一时刻最多只有一个线程执行该段代码。 对于普通同步方法,锁是当前实例对象(不同实例对象之间的锁互不影响)。 对于静态同步方法,锁是当前类的Class对象。 对于同步方法块,锁是Synchonized括号里配置的对象。 当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。 1.2 使用场景 synchronized最常用的使用场景就是多线程并发编程时线程的同步。这边还是举一个最常用的列子:多线程情况下银行账户存钱和取钱的列子。 public class SynchronizedDemo { public static void main(String[] args) { BankAccount myAccount = new BankAccount("accountOfMG",10000.00); for(int i=0;i<100;i++){ new

轻量级监控平台之内存监控

烈酒焚心 提交于 2019-12-05 02:43:29
轻量级监控平台之内存监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报当前服务的内存数据 . /etc/profile . ~/.bash_profile cd ~ pushurl="https://lightmonitorapi.test.cn/push/servermem" #获取内存总大小 mem_total=`free -m | awk 'NR==2{print $2}'` #echo "总内存大小=$mem_total" #获取内存使用大小 mem_use=`free -m | awk 'NR==2{print $3}'` #echo "已使用大小=$mem_use" #echo "内存使用率=$mem_use_rate%" mem_left=`free -m | awk 'NR==2{print $4}'` #echo "剩余内存=$mem_left m" buffers=`free -m | awk 'NR==2{print $6}'` caches=`free -m | awk 'NR==2{print $7}'` ip=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d '/') msg=$mem_total"m-"$mem_use"m-"$mem

从无到有搭建SpringBoot项目

让人想犯罪 __ 提交于 2019-12-05 02:23:17
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。 来源: https://www.cnblogs.com/bgyb/p/11897506.html

线程和偏向锁、轻量级锁、重量级锁的知识整理

天大地大妈咪最大 提交于 2019-12-04 13:02:13
线程和偏向锁、轻量级锁、重量级锁的知识整理 https://www.cnblogs.com/xlecho/p/11342971.html xl_echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!! 参考文章列表: Java并发编程:Synchronized底层优化(偏向锁、轻量级锁) 轻量级锁、偏向锁、重量级锁详情 偏向锁、轻量级锁、重量级锁、自旋锁原理讲解(推荐看一下) 参考视频:咕泡学院Mic老师的多线程基本原理 主要的内容如下 多线程同时执行的安全问题思考 Synchronized的基本认识 思考锁的存储 Synchronized锁的升级原理 wait/notify实现线程通信 多线程同时执行的安全问题思考 如果业务代码逻辑当中,有一个操作需要改变一个常量的值,比如int i = 0, 业务代码当中i需要i++。单线程的情况下,不会出现问题,如果是多线程并发操作i的值,这个时候,i的结果最终是什么?会出现线程的安全问题。这种情况应该怎么解决? 线程的安全性有三种 原子性 提供了互斥访问,同一时刻只能有一个线程对它进行操作 实现锁的两种方式: 1)synchronized:在作用对象的作用范围内,依赖JVM实现操作的原子性。 2)Lock

【step by step构建轻量级web框架】轻量级框架jbeer预览

自作多情 提交于 2019-12-04 07:27:07
本系列博文,将会一步一步介绍如何构建一个轻量级的web框架jbeer git地址:http://git.oschina.net/bieber/jbeer 经过本人差不多半年的纠结,今天终于把JBeer的0.1版本完成了。Jbeer具备MVC,IOC,AOP,ORM,IN18,PropertiesContext,简单声明式事务以及自带Datasource功能。开发Jbeer的目的是为了总结J2EE框架原理,从而在一些细节上加入一些自己的想法,最终目的是个人的一个总结。当初第一次看到JFinal源码的时候,知道了MVC框架内部的原理原来是那样的,第一次参与了Smart4j(原来smart),了解了轻量级的框架是那样子的。于是便萌发了自己也做一个这样的东西来总结一下。JBeer并不是站在代替JFinal,smart4j或者ssh框架去实现的,而是一次总结的过程。之前只是站在框架的外围看它,当你站到框架内部去看它的时候,你会发现你才真正的理解了它。废话不多说,先出一个JBEER的“一寸免冠照片”来给大家瞅瞅 看了 JBeer 的仪容之后,那么下面大概介绍一下各个功能吧。 在介绍各个功能之前,还是先废话一下。 JBEER 是追求极少的配置文件,这是借鉴了 JFinal 的风格。需要使用 JBEER ,只需要将项目依赖 jbeer 的 jar 包,然后在 web.xml 中配置如下信息即可

轻量级线程池的实现

血红的双手。 提交于 2019-12-04 01:46:39
写在前面 最近因为项目需要,自己写了个单生产者-多消费者的消息队列模型。多线程真的不是等闲之辈能玩儿的,我花了两个小时进行设计与编码,却花了两天的时间调试与运行。在这里,我把我遇到的坑与大家分享。 需求的由来 一开始我需要实现一个记录用户操作日志的功能,目的是给商家用户提供客户行为分析的能力。要记录的信息包括客户的访问时间、IP、在网站上所做的操作等。其中,客户的地域信息是个重要的分析项,所以必须要把IP转化成省市县。那么究竟何时完成这个转化的动作呢?有两种方案: 1. 在用户进行数据分析 时 完成转化 2. 在用户进行数据分析 前 完成转化 第一种方案显然不靠谱,因为需要转化的IP数量很大,而且转化采用第三方接口,因此整个转化过程将持续很长很长很长……的时间。 而在分析前就把转化过程完成掉,这样当用户需要分析的时候就可以减少这部分时间的开销,提高了响应速度。因此第二种方案显然比较合理。 那么随之而来的问题是:究竟在数据分析前的哪个时机进行转化? 这个问题又有两种方案: 1. 在记录日志的时候就立即完成IP向省市县的转换; 2. 每天半夜服务器统一把当天的IP转化成省市县; 这两种方案应该来说各有千秋。 第一种方案比较消耗服务器资源,因为IP向省市县转化需要向第三方接口发送GET请求,因此需要消耗一定的出口带宽和内存资源,在服务器资源一定的前提下,分给用户访问的资源就会被减少

【论文学习】轻量级网络——MobileNetV3终于来了(含开源代码)

我们两清 提交于 2019-12-04 01:03:19
论文名称:《Searching for MobileNetV3》 感谢github上大佬们开源,开源代码整理如下: (1)PyTorch实现1: https://github.com/xiaolai-sqlai/mobilenetv3 (2)PyTorch实现2: https://github.com/kuan-wang/pytorch-mobilenet-v3 (3)PyTorch实现3: https://github.com/leaderj1001/MobileNetV3-Pytorch (4)Caffe实现: https://github.com/jixing0415/caffe-mobilenet-v3 (5)TensorFLow实现: https://github.com/Bisonai/mobilenetv3-tensorflow 轻量化网络 从 SqueezeNet 开始模型的参数量就不断下降,为了进一步减少模型的实际操作数(MAdds), MobileNetV1 利用了深度可分离卷积提高了计算效率,而 MobileNetV2 则加入了线性bottlenecks和反转残差模块构成了高效的基本模块。随后的 ShuffleNet 充分利用了组卷积和通道shuffle进一步提高模型效率。 CondenseNet 则学习保留有效的dense连接在保持精度的同时降低,