轻量级

(原理篇)基于SQLite3轻量级封装,一行代码实现增删改查

给你一囗甜甜゛ 提交于 2020-01-09 14:27:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近写的项目中有用到数据库,写了不少蛋疼的sql语句,每次都是好几行代码,而且每次都是重复的没有一点技术含量的代码,虽然也有不少基于sqlite的封装,不过用起来还是感觉不够面向对象! 为了不再写重复的代码,花了几天时间,基于SQLite3简单封装了下,实现了一行代码解决增删改查等常用的功能!并没有太过高深的知识,主要用了runtime和KVC: 首先我们创建个大家都熟悉的Person类,并声明两个属性,下面将以类此展开分析 1 2 3 4 @interface Person : NSObject @property ( nonatomic , copy ) NSString *name; @property ( nonatomic , assign ) NSInteger age; @end 创建表格 相信下面这句创表语句大家都熟悉吧,就不做介绍了 create table if not exists Person (id integer primary key autoincrement,name text,age integer) 然而开发中我们都是基于模型开发的,基本上都是一个模型对应数据库的一张表,那么每个模型的属性都不一样,那么我们又该如何生成类似上面的语句呢? 我想到了runtime

轻量级标记语言Markdown

只愿长相守 提交于 2020-01-09 05:30:36
飞熊在天 | 知之者不如好之者,好之者不如乐之者 | 第 7 页 轻量级标记语言Markdown 发表于 2012 年 3 月 4 日 由 raphaelzhang 回复 Markdown是一种轻量级标记语言(lightweight markup language),用来写作简单的技术性文档非常便利。它是由 John Gruber 发明的,现在在 Stack Overflow 、 BitBucket 与 Github 等网站上都得到了使用。Markdown是文本格式的, 语法 非常简洁明了。 对于技术人员来说,使用Markdown编写技术文档很方便。我以前使用过Word写文档,使用过HTML写文档,当然也使用过无格式的文本文件写文档,还用UML图做过文档,但是现在我觉得,使用Markdown来写技术文档比它们都合适。 原因在于: Markdown是文本格式的,非常适合保存在版本控制软件中,进行版本比较很方便。写文档也非常简单,不用专门的软件,任何一个文本编辑器都行 Markdown是有格式的,比无格式的文本文件结构性强太多 Markdown不需要非常繁琐的类似HTML的标签来控制格式,这些标签在书写的时候非常麻烦,在阅读的时候也非常干扰视线,让人无法流畅地阅读与写作 当你使用BitBucket或者GitHub来托管你的代码时,一般都可以在根目录下加入一个README

python的库有多少个?python有多少个模块?

守給你的承諾、 提交于 2020-01-08 13:42:17
这里列举了大概500个左右的库: ! Chardet字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable主要用于在终端或浏览器端构建格式化的输出。 difflib,[Python]标准库,计算文本差异 Levenshtein,快速计算字符串相似度。 fuzzywuzzy,字符串模糊匹配。 esmre,正则表达式的加速器。 shortuuid,一组简洁URL/UUID函数库。 ftfy,Unicode文本工具7 unidecode,ascii和Unicode文本转换函数。 xpinyin,将汉字转换为拼音的函数库 pangu.py,调整对中日韩文字当中的字母、数字间距。 pyfiglet,Python写的figlet程序,使用字符组成ASCII艺术图片 uniout,提取字符串中可读写的字符 awesome slugify,一个Python slugify库,用于处理Unicode。 python-slugify,转换Unicode为ASCII内码的slugify函数库。 unicode-slugify,生成unicode内码,Django的依赖包。 ply,Python版的lex和yacc的解析工具 phonenumbers,解析电话号码,格式,存储和验证的国际电话号码。 python

蚂蚁金服轻量级类隔离框架概述 | SOFAArk 源码解析

痞子三分冷 提交于 2020-01-08 10:44:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本篇开始将正式启动 SOFAArk:Lab/ 源码共建系列,在此对长期以来对 SOFAStack 关注的朋友表示感谢。 本文为《剖析 | SOFAArk 实现原理》第一篇,本篇作者卫恒,SOFAArk 开源负责人。《剖析 | SOFAArk 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:ArkLab/ ,文末附共建列表,欢迎领取共建~ 在大型软件开发过程中,通常会推荐底层功能插件化、业务功能模块化的开发模式,以期达到低耦合、高内聚、功能复用的优点。对于模块化,从语言层面,原计划在 Java7 就有的模块化特性,终于在 Java9 里面提供了。在 Java语言级对模块化提供支持之前,业界内最知名的 Java 模块化规范当属 OSGi 了,直至到今天,OSGi 在众多企业、厂商中被广泛使用,比如我们常用的 Web 应用服务器、Eclipse 等均采用了 OSGi 规范。 蚂蚁金服内部,CE 作为使用了 10 年的"元老级"容器组件,见证了和支撑了每年的大促、新春红包等流量场景。作为中间件的常青树,CE 以足够的稳定性为业务保驾护航。CE 容器也是基于 OSGi 实现了模块化,但是由于 CE 背负了太多包袱,使得其自身变得太重,在云原生及商业化输出上逐渐失去了优势。 从 2016 年底开始

JVM中锁优化,偏向锁、自旋锁、锁消除、锁膨胀

雨燕双飞 提交于 2020-01-08 10:25:16
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt364 本文将简单介绍HotSpot虚拟机中用到的锁优化技术。 自旋锁 互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力。而在很多应用上,共享数据的锁定状态只会持续很短的一段时间。若实体机上有多个处理器,能让两个以上的线程同时并行执行,我们就可以让后面请求锁的那个线程原地自旋(不放弃CPU时间),看看持有锁的线程是否很快就会释放锁。为了让线程等待,我们只须让线程执行一个忙循环(自旋),这项技术就是自旋锁。 如果锁长时间被占用,则浪费处理器资源,因此自旋等待的时间必须要有一定的限度,如果自旋超过了限定的次数仍然没有成功获得锁,就应当使用传统的方式去挂起线程了(默认10次)。 JDK1.6引入自适应的自旋锁:自旋时间不再固定,由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。如果在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机就会认为这次自旋也很有可能再次成功,进而它将允许自旋等待持续相对更长的时间。 锁削除 锁削除是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行削除

偏向锁,轻量级锁,自旋锁,重量级锁的详细介绍

守給你的承諾、 提交于 2020-01-04 05:15:49
何为同步?JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter和monitorexit指令实现,而方法同步是使用另外一种方式实现的,细节在JVM规范里并没有详细说明,但是方法的同步同样可以使用这两个指令来实现。monitorenter指令是在编译后插入到同步代码块的 开始位置 ,而monitorexit是插入到 方法结束处和异常处 , JVM要保证每个monitorenter必须有对应的monitorexit与之配对。 任何对象 都有一个 monitor 与之关联,当且一个monitor 被持有后,它将处于锁定状态。 线程执行到 monitorenter 指令时,将会尝试获取对象所对应的 monitor 的所有权,即尝试获得对象的锁。 Java对象头 锁存在Java对象头里。如果对象是数组类型,则虚拟机用3个Word(字宽)存储对象头,如果对象是非数组类型,则用2字宽存储对象头。在32位虚拟机中, 一字宽等于四字节,即32bit。 长度 内容 说明 32/64bit Mark Word 存储对象的hashCode或锁信息等 32/64bit Class Metadata Address 存储到对象类型数据的指针 32/64bit Array length 数组的长度(如果当前对象是数组)

妖精的绣舞 提交于 2019-12-30 10:33:35
2. 轻量级锁   倘若偏向锁失败, 虚拟机并不会立即升级为重量级锁 ,它还会尝试使用一种称为轻量级锁的优化手段(1.6之后加入的)。轻量级锁不是为了代替重量级锁,它的本意是 在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统互斥量产生的性能消耗,因为使用轻量级锁时,不需要申请互斥量   轻量级锁能够提升程序同步性能的依据是“对于绝大部分锁,在整个同步周期内都是不存在竞争的”,这是一个经验数据。如果没有竞争,轻量级锁使用 CAS 操作避免了使用互斥操作的开销。 但如果存在锁竞争,除了互斥量开销外,还会额外发生CAS操作,因此在有锁竞争的情况下,轻量级锁比传统的重量级锁更慢! 如果锁竞争激烈,那么轻量级将很快膨胀为重量级锁! 当有另外一个线程竞争锁时,由于该锁处于 偏向锁 状态 发现对象头Mark Word中的线程ID不是自己的线程ID,该线程就会执行CAS操作获取锁 如果获取 成功 ,直接替换Mark Word中的线程ID为自己的线程ID,该锁会***保持偏向锁状态*** 如果获取 失败 ,说明当前锁有一定的竞争,将偏向锁 升级 为轻量级锁 线程获取轻量级锁的步骤: 在加锁前,虚拟机需要在当前线程的栈帧中建立 锁记录 (Lock Record)的空间。Lock Record 中包含一个 _displaced_header 属性,用于存储锁对象的 Mark Word 的拷贝。

c++常用库

故事扮演 提交于 2019-12-29 10:32:16
c++常用库 C++ 资源大全 关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++标准库,包括了STL容器,算法和函数等。 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。 Standard Template Library:标准模板库 C POSIX library : POSIX系统的C标准库规范 ISO C++ Standards Committee :C++标准委员会 框架 C++通用框架和库 Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本组件的集合 ASL :Adobe源代码库提供了同行的评审和可移植的C++源代码库。 Boost :大量通用C++库的集合。 BDE :来自于彭博资讯实验室的开发环境。 Cinder:提供专业品质创造性编码的开源开发社区。 Cxxomfort:轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。 Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。 EASTL :EA-STL公共部分 ffead-cpp :企业应用程序开发框架 Folly:由Facebook开发和使用的开源C++库

TLogger一个D7可用的轻量级日志

♀尐吖头ヾ 提交于 2019-12-29 05:24:18
今天调程序,要用到日志。XE7有Qlog,D7用什么 从网上找到了Logger,下载的原文是不支持D7的,不过也只是很少的地方不同,自己修改了下就可以用了 感谢原作者和红鱼的分享 unit Logger; // ======================================================================= // 鏃ュ織绫伙紙TLogger锛?ver.1.0 // 绾㈤奔鍎?http://blog.sina.com.cn/hblyuhong // 2014/06/24 // 鍩轰簬1.0淇敼 // PFeng (http://www.pfeng.org / xxmc01#gmail.com) // 2012/11/08 // 鏃ュ織绾у埆绾﹀畾锛? // 0 - Information // 1 - Notice // 2 - Warning // 3 - Error // ======================================================================= interface uses Windows, Classes, SysUtils, StdCtrls, ComCtrls, ComObj, Messages; const WRITE_LOG_DIR = 'log\';

一文看懂轻量级框架——Flask

妖精的绣舞 提交于 2019-12-27 20:11:05
Flask 一、flask入门 WEB工作原理 C/S 客户端/服务器端 B/S 浏览器/服务器端 Flask有俩大核心 werkzeug 实现路由、调试和web服务的网关接口 jinjia2 实现了模板 简介: flask 是一个python微型框架 只提供了一个强健的核心 其它功能都需要通过第三方扩展库来实现 安装 pip install flask 完整启动的代码 from flask import Flask app = Flask ( __name__ ) # 路由 别人访问你的地址 http://www.baidu.com/a/b @app . route ( '/' ) def index ( ) : print ( '访问到我了' ) # 响应 return '访问到我了' # 判断只能在主文件中文件flask项目 if __name__ == '__main__' : # 运行flask app . run ( ) 启动地址 http://127.0.0.1:5000 http://127.0.0.1:5000 / run启动参数 参数 说明 debug 是否开启调试模式 默认为false 开启会自动加载代码 和显示错误信息 threaded 是否开启多线程 默认是不开启的 port 端口号 默认5000 host 主机 默认127.0.0.1 完整的启动 app