轻量级

【step by step构建轻量级web框架】-何为轻量级web框架

谁都会走 提交于 2019-11-30 09:44:18
本系列博文,将会一步一步介绍如何构建一个轻量级的web框架jbeer git地址:http://git.oschina.net/bieber/jbeer 在 SSH/SSI 充实着我们每个项目的开发过程中,我们所做的事情就是将他们一次组合在一起,然后让它们能够很好的工作。有时,你会觉得自己陷入了它们的陷阱,它们提供了很丰富的功能,但是我们在项目开发过程中,能够用到的可能是它们的冰山一角。我们为了能够使用它们,能够确保它们很好的运行,可能需要依赖一大堆的第三方 jar 包,导致可能一个普通的 CMS 项目,都会有几十兆,想想,如果我们只是通过 Servlet+jdbc+jsp ,这样一个项目可能不到 10 兆就可以解决。于是,就导致出,一个能够维持 J2EE 开发的基本功能,而又保持整个项目轻巧并且让人感觉很清爽。这就衍生出了轻量级 web 框架的诞生。 轻量级框架可以说麻雀虽小,但五脏俱全。它保持了常规开发中需要的便捷功能,又保持了它的轻巧,同时也不失对整个框架的扩展性。一般轻量级框架都具备一下几个特点: 1、具备开发的核心功能 2、保持微内核以及高扩展 3、支持插件式开发 4、提供便捷的开发模式 5、让开发有更多的时间做更有意义的事情 上面说了轻量级的框架具备的一些特点,那么作为轻量级 web 框架具备哪些应有的功能呢? 一、 支持 restful 以及参数自动绑定的 MVC

Java轻量级锁原理详解(Lightweight Locking)

烂漫一生 提交于 2019-11-29 20:37:40
大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意。 原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖操作系统互斥(mutex)来实现的。 互斥是一种会导致线程挂起,并在较短的时间内又需要重新调度回原线程的,较为消耗资源的操作。 为了优化Java的Lock机制,从Java6开始引入了轻量级锁的概念。 轻量级锁(Lightweight Locking)本意是为了减少多线程进入互斥的几率,并不是要替代互斥。 它利用了CPU原语Compare-And-Swap(CAS,汇编指令CMPXCHG),尝试在进入互斥前,进行补救。 本文将详细介绍JVM如何利用CAS,实现轻量级锁。 原理详解 Java Object Model中定义,Object Header是一个2字(1 word = 4 byte)长度的存储区域。 第一个字长度的区域用来标记同步,GC以及hash code等,官方称之为 mark word 。第二个字长度的区域是指向到对象的Class。 在2个word中,mark word是轻量级锁实现的关键。它的结构见下表 从表中可以看到,state为lightweight locked的那行即为轻量级锁标记。bitfieds名为指向lock record的指针,这里的 lock

C 轻量级 信号与槽

半城伤御伤魂 提交于 2019-11-29 19:14:28
#ifndef _SIMPLE_SIGNAL_SOLTS_H_ #define _SIMPLE_SIGNAL_SOLTS_H_ #include "string.h" typedef void (*SIMPLE_SIGNAL)(void *signal, void *pArg); typedef void (*SIMPLE_SOLTS) (void *pArg); #define SIMPLE_SOLTS_T(FuncName) void(FuncName)(void *pArg) #define SIMPLE_EMIT(signal, arg) if (signal != NULL)signal(&signal, arg) #define SIMPLE_SIGNAL_SOLTS_MAX_SOLTS 10 //一个信号最多连接槽的数量 #define SIMPLE_SIGNAL_SOLTS_MAX_SIGNAL 10 //信号最多数量 ErrorStatus SimpleSignalSolts_Connect(SIMPLE_SIGNAL *signal, SIMPLE_SOLTS solts); #endif 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /*****************************************

第十二章 Java内存模型与线程

▼魔方 西西 提交于 2019-11-29 19:11:47
概述 并发应用场景:①充分利用计算机处理器的能力;②一个服务端同时为多个客户端提供服务。 衡量一个服务性能的高低好坏,每秒事务处理数是最重要的指标之一。 硬件的效率与一致性 Java内存模型 主内存和工作内存 ①Java内存模型的主要目标是定义程序中各个变量的访问规则 – 虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量(Variables)包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然就不会存在竞争问题。 ②Java内存模型并没有限制执行引擎使用处理器的特定寄存器或缓存来和主内存进行交互,也没有限制即时编译器进行调整代码执行顺序这类优化措施。 ③Java内存模型规定了所有的变量都存储在主内存(Main Memory,类比物理内存)。每条线程还有自己的工作内存(Working Memory,类比处理器高速缓存),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝。线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成,线程、主内存、工作内存三者的交互关系如图所示。 内存间相互操作 一个变量如何从主内存拷贝到工作内存、如何从工作内存同步回主内存之类的实现细节

Jqprint 轻量级页面打印插件

房东的猫 提交于 2019-11-29 17:32:50
最近项目中需要在页面上添加一个打印的按钮,上网搜索了一下就发现了这个好用的超轻量插件,使用起来很方便 1.首先需要引入必须的js文件 <script language="javascript" src="jquery-1.4.4.min.js"></script> <script language="javascript" src="jquery.jqprint-0.3.js"></script> 2.之后只要找到需要打印的页面区域$().jqprint()即可 比如: <body> <button>打印</button> <div id="print"> <p>这里是要打印的内容</p> <p>打印内容包括:我的打印内容,可以是图片,按钮,表格等任何元素</p> </div> </body> <script> $("#print").jqprint(); </script> 就会调用浏览器的打印功能来打印id为print中的内容 3. jqprint() 中可以写入参数,一般有以下几种: jqprint({ debug: false, //如果是true则可以显示iframe查看效果(iframe默认高和宽都很小,可以再源码中调大),默认是false importCSS: true, //true表示引进原来的页面的css,默认是true。(如果是true,先会找$("link

Jqprint 轻量级页面打印插件

纵饮孤独 提交于 2019-11-29 17:32:06
最近公司项目用到了页面打印功能,不能不承认,JQ的这个打印插件很小巧功能很强大 1.首先需要引入必须的js文件 <script language="javascript" src="jquery-1.4.4.min.js"></script> <script language="javascript" src="jquery.jqprint-0.3.js"></script> 2.之后只要找到需要打印的页面区域$().jqprint()即可 <body> <button>打印</button> <div id="print"> <p>这里是要打印的内容</p> <p>打印内容包括:我的打印内容,可以是图片,按钮,表格等任何元素</p> </div> </body> <script> $("#print").jqprint(); </script> 3.jqprint()中可以写入参数,一般有以下几种: jqprint({ debug: false, //如果是true则可以显示iframe查看效果(iframe默认高和宽都很小,可以再源码中调大),默认是false importCSS: true, //true表示引进原来的页面的css,默认是true。(如果是true,先会找$("link[media=print]"),若没有会去找$("link")中的css文件)

Java EE—最轻量级的企业框架?

﹥>﹥吖頭↗ 提交于 2019-11-29 12:22:26
确保高效发展进程的建议 很久以前,J2EE,特别是应用程序服务器被认为过于臃肿和“重量级”。对于开发人员来说,使用此技术开发应用程序会非常繁琐且令人沮丧。但是,由于 J2EE 框架的名称已更改为Java EE,因此该假设不再适用。 Java EE 与其他企业框架相比区别在哪以及框架 轻量级 的标准是什么? 在选择技术时,需要考虑的最重要方面之一是开发人员在开发过程中的生产力。工程师应该花费尽可能多的时间来实现用例和创收功能,因为这将使公司朝着目标前进。 所选择的技术和方法应该最大限度地缩短开发人员的时间。具体哪些时间呢:等待构建,测试和部署; 配置应用; 实施与业务用例无关的管道; 并配置构建环境和外部依赖项。 但是大多数可用技术都没有这样做。 1.为什么标准? 与其他框架相比,Java EE 的最大优势之一是使用的API的标准化。标准听起来可能很无聊而且不够创新 - 从本质上讲,这是真的,因为Java规范请求(JSR)已经成为行业内过去已经过充分证明的结果。 但使用这些标准有几个优点。 2.整合规范 Java EE中的特定API - 例如上下文和依赖注入(CDI),JAX-RS,JSON 处理(JSR 353)和 Bean验证 - 可以很好地协同工作,并且可以无缝地相互组合。 最重要的是,CDI 被用作应用程序组件之间的“粘合剂”。 该规范包含诸如 “如果容器支持规范 A 和 B

轻量级git服务|gogs部署

匆匆过客 提交于 2019-11-28 17:48:12
环境搭建步骤 安装docker yum -y install docker 启动docker服务 service docker start 从docker镜像库拉取gogs docker pull gogs/gogs 创建相应的文件夹 mkdir -p /var/gogs 创建docker容器gogs docker run --name=gogs -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs 安装 访问地址:自己服务器ip+:10080 如下图域名记得填写本机ip【不要填写127.0.0.1或localhost】端口号10080(本文最下面有提到相关问题问题) 添加管理员账户 最后我们就可以访问了:自己服务器ip+:10080 相关命令 docker start gogs 在容器中启动Gogs docker ps 列出容器 Gogs——clone仓库地址为本地localhost的问题 在自己服务器上搭建过Gogs之后我发现一个问题,我无法正确的获取到clone的地址,地址栏上显示的是localhost并不是服务器的ip地址,而且端口号还不对 不是10080 详见下图 解决方案 进入docker docker exec -it gogs /bin/bash #前提是docker start gogs 修改配置文件 cd

轻量级博客|Typecho部署

给你一囗甜甜゛ 提交于 2019-11-28 17:46:59
官方文档以及教程 官方安装教程 参考安装教程 参考安装教程 安装web服务器 yum -y install httpd # 安装主程序 systemctl start httpd.service # 启动服务 systemctl status httpd.service # 查看服务运行状态 nginx 端口和 httpd冲突 Job for httpd.service failed because the control process exited with error code. See "systemctl 修改httpd端口即可 vim /etc/httpd/conf/httpd.conf 找到Listen ,修改端口重新启动 查看状态显示运行即为启动成功 安装php和相关插件 Typecho官方要求PHP5.1,但是据说PHP7的性能是PHP5的两倍,所以我们直接安装PHP7好了。由于Centos内置源的版本比较老,所以我们要先更换一下PHP的源,输入如下指令: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum -y

并发下常用关键字的原理

风流意气都作罢 提交于 2019-11-28 17:25:20
对Synchronized的理解 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。 另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高,这也是为什么早期的 synchronized 效率低的原因。在 Java 6 之后 Java 官方对从 JVM 层面对synchronized 较大优化,所以现在的 synchronized 锁效率也优化得很不错了。JDK1.6对锁的实现引入了大量的优化,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少锁操作的开销。 synchronized关键字最主要的三种使用方式: 修饰实例方法: 作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁 修饰静态方法: :也就是给当前类加锁,会作用于类的所有对象实例,因为静态成员不属于任何一个实例对象,是类成员( static