- 浏览: 243091 次
- 性别:
- 来自: 北京
最新评论
-
saiyaren:
你对hiphop的深入程度到了什么程度了?想和你进行探讨一下
facebook hiphop php vm 实现概述 -
eric_weitm:
lj3362569 写道可以再讲具体点么?还有现有的hipho ...
facebook hiphop php vm 实现概述 -
lj3362569:
可以再讲具体点么?还有现有的hiphop不支持哪些功能?
facebook hiphop php vm 实现概述
文章列表
java spi机制
- 博客分类:
- java
在spring出现之前,需要使用IOC的机制来动态提供实现类,这时jdk自身提供了一种轻量级的实现。具体方式:
1、需要方定义接口,并且用 java.util.ServiceLoader加载具体的实现(通过无参数构造函数实现对象创建)
2、提供者在jar包的META-INF/services/目录里创建前面接口的全名文件
3、在文本文件里写上具体实现类的全名
4、具体的例子,数据库驱动spi META-INF/services/java.sql.Driver ,实现者 /mysql-connector-java/5.1.29/mysql-connector-java-5.1.29.ja ...
mysql事物隔离与死锁
- 博客分类:
- java
一、事物
0、事物的ACID:原子性、一致性、隔离性(不受干扰)、持久性(提交后不可回滚)
1、对数据库的所有操作,内部全部封装成事物(transaction)来运行。事物要满足ACID特性,数据库的恢复和管理全部基于事物。
2、数据库内的数据是所有人共享的,为了保证事物的ACID特性,必须在事物之间进行同步
3、最安全的同步策略是事物之间串行执行,但是效率最低、并发度最低,所以都会使用并发的方式
4、并发调度执行时,导致数据不一致。类型包括:
1》 丢失修改(Lost Update)2》 读“脏”数据(Dirty Read):事物结束前,别的事物回滚了所读的数据
3》 不可重 ...
lts 基本逻辑:
lts 代表light-task-scheduler,https://github.com/ltsopensource/light-task-scheduler
一、是什么
分布式动态调度的框架
二、为什么
1、周期性、定时性的任务可以使用调度器scheduler(每个任务一个线程,对于周期性任务非常浪费资源)
2、如果有非常多调度性任务需要处理,可以每台机器分别布置一套调度器,并且不同机器调度不同的任务。
3、2中每个机器进行调度很浪费(比如每1ms检查一次条件),不同的任务不能跨机器共享硬件,而且无法看到所有调度任务的整体的情况。
另一种方案是, ...
关于java log框架
- 博客分类:
- java
log4j:最传统的log框架,核心概念 Logger appender layout
commons-log:避免库实现者限制使用者的log实现,实现动态log绑定
slf4j:动态绑定有时会失败,或者不可控,slf4j使用静态绑定
logback:增强版的log4j,提供 配置扫描更新、占位符、运行时过滤器、处理IO异常……等功能
目前最佳搭配:slf4j logback
slf4j实现方式:org.slf4j.impl.StaticLoggerBinder由集成方实现
某个配置例子logback.xml
<?xml version=" ...
一、应用分类:
数据库交易类、数据处理(大数据、机器学习、搜索、分布式存储)、IM、OA
二、演化过程
1、业务数字化(MIS)->数据库增删改查->数据分析
2、ETL、数据仓库->大数据、大规模分布式数据处理->大规模机器学习->实时数据处理
三、各个技术之间的演化对应关系
mysql VS redis
ETL VS storm
数据仓库 VS hive
数据挖掘 VS 机器学习
OA VS 工作流
IPC VS RPC
内存 VS redis
查找 VS 搜索(solr)
文件系统 VS 分布式存储
map/reduce VS ...
1、筛选数据
complaints[['Complaint Type', 'Borough']][:10]
is_noise = complaints['Complaint Type'] == "Noise - Street/Sidewalk"
in_brooklyn = complaints['Borough'] == "BROOKLYN"
complaints[is_noise & in_brooklyn][:5]
2、计数
complaint_counts = complaints['Complaint Type'].va ...
区块链技术概览
一、区块链主要组织
1、R3区块链联盟(全球顶级金融机构)
用以太坊和微软Azure技术,将11家银行连接至分布式私人账本Corda
源代码 https://github.com/corda/corda
实现语言 Kotlin(JVM)
2、超级账本hyperledger (代表技 ...
c++以太坊编译
https://github.com/ethereum/cpp-ethereum
git clone --recursive https://github.com/ethereum/cpp-ethereum.git
yum install leveldb-devel libmicrohttpd-devel
mkdir build; cd build
cmake ..
cmake --build .
编译结果在每个子目录中
git clone https://github.com/ethereum/solidity.git
cd solidity
mkdir build
cd build
# gcc
yum install centos-release-scl-rh centos-release-scl
yum check-update
yum install devtoolset-3-gcc devtoolset-3-gcc-c++
source /opt/rh/devtoolset-3/enable
scl enable devtoolset-2 bash
# cmake
...
java并发二 api 抽象
- 博客分类:
- java
一、cpu cache 层面volatile
二、灵活的同步机制 对应互斥和同步
volatile--> atomicXXX
syncronized-->Lock
wait/notify-->Condition/LockSupport
三、数据结构
1、ConcurrentHashMap 分段加锁(二级的map结构)
hashmap的实现:table数组里放了多个桶(bucket),一个桶对应一个hashcode,有冲突的时候用链表链接,jdk8中如果一个桶内的节点太多,会使用红黑树。
concurrencyLevel 分段的个数2^n
initialC ...
java并发 一 概念和原理
- 博客分类:
- java
一、概念
1、所有的并发只有2种:互斥(某种锁) +同步(某种条件)
2、互斥:只允许一个线程访问,jvm在调度时间片时使用
3、同步:应用间的协调,是应用为了实现某种逻辑而写的,一般基于互斥实现
4、POSIX中定义的工 ...
java invokedynamic和GC
- 博客分类:
- java
invokedynamic:java是静态类型语言,每一个函数调用一定是确定的映射到某个方法区,之后用解释器来执行;invokedynamic允许程序员指定,某个函数调用具体映射到哪个方法区(Callsite),可以实现根据数据类型的不同调用不同的指令(无类型的语言)。相应的Class文件的常量区里也设定了对应的字段。
jit:即时编译,有一个编译的过程,本身花费时间,同时表以后的体积膨胀很厉害,所以不是jit一定优于AOT
gc:针对堆和方法区
一、算法
1、标记-清除:大量碎片,效率低
2、复制:内存使用率低(只有50%)
3、标记-压缩:清除的同时,进行压缩
4、分代收集: ...
自己动手写Java虚拟机 笔记
- 博客分类:
- java
1、java = jvm + 库
2、jvm = 数据类型+内存管理和GC+指令解析+函数调用+多线程+JIT
3、数据类型= 原子类型 + 引用 + 数组
4、动态运行:栈 = PC + 线程栈
每一帧 = 一个调用深度= 局部变量表+操作数栈
5、一个指令执行的例子:
public ...
redis 配置和使用
一、安装:
cd /usr/src
tar xzf redis-3.0.7.tar.gz
cd redis-3.0.7
make
cd src
make install PREFIX=/usr/local/redis
mkdir /usr/local/redis/etc/
mv redis.conf /usr/local/redis/etc/
启动:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
/usr/local/redis/bin/redis-cli ...
-- lua脚本要求所有的功能,不依赖内部或外部的状态
-- cd /root/workspace/java
-- /usr/local/redis/bin/redis-cli -p 6379 --ldb --eval api.lua r , PRE
-- /usr/local/redis/bin/redis-server 6379.conf
-- /usr/local/redis/bin/redis-cli shutdown
local keys = KEYS
local args = ARGV
local Wtm = {} -- Wtm library
...