int和Integer有什么区别?-《Java核心技术》

自动装箱、拆箱 Integer是int对应的包装类,有一个int类型的字段存储数据,并且提供了基本操作,比如数字运算、int和字符串之间的转换等。java5后引入了自动装箱和拆箱功能。 java5中新增的valueOf可以在调用时使用缓存机制,默认是-128~127,可以通过-XX:AutoBoxCacheMax=N调整缓存机制也存在与Boolean、Short(-128~127)、Byte(全部缓存)、Character( ...

服务化架构的演进

第一阶段:服务拆分与聚合 底层业务进行RPC拆分; 上层聚合业务进行REST拆分; 优点 API接口和rpc业务服务分层 业务按高内聚低耦合的方式拆分 基本实现了业务的服务化 部分业务服务下沉支撑多产品线公用 不足 流量调度能力欠缺 无实际意义耦合,抗风险能力欠缺 监控和治理能力欠缺 业务拆分依然存在不合理耦合 第二阶段:服务划分、网关接入 按业务类型进行更精细服务划分; 适度的聚合业务REST服务拆分引入接入网关; ...

java一些优化点

减少临时对象; 减少list的拷贝,如果要添加到末尾,不要新增一个临时对象; 在初始化map和list的时候,在一开始设置初始化容量,减少扩容引起的数据拷贝; if else如果是string,用switch替换; 删除缓存可能会引起性能提升; 可以按照index寻址的,不要用map。 其实思路跟C++差不多。 ...

C++性能优化的一些tips

存储数据从unordered_map换成vector,vector是连续内存存储,前者获取数据需要大概300ns,后者100ns。怎么解决key的问题:在一个配置文件中填写unordered_map中的key的顺序,按照顺序把数据插入vector; vector使用emplace_back不用pull_back,前者是原地构造。 std::future多线程; 如果每次请求都需要很多同样类型的数据A(比如预估方法中,每次请求都需要抽取一堆feature),那么可以在程序启动的时候提前申请很多(比如一万个) ...

《数据密集型应用系统设计》整理10

第十一章 流处理系统 为了解决批处理需要一定时间后才能处理的问题,流式处理在每秒钟结束时(甚至持续不断)处理每秒的数据,完全放弃固定的时间片,有事件就处理。 “流”是指随着时间的推移而持续可用的数据。 发送事件流 在流处理的上下文中,记录通常被称为事件,但本质上跟批处理是一回事:一个小的、独立的、不可变的对象。 数据产出后的流转阶段,批处理选择通过文件或数据库连接生产者和消费者:生产者将其生产的每个事件写入数据存储, ...

Linux性能优化:磁盘I/O优化思路

应用程序优化 追加写代替随机写 借助缓存I/O 在应用程序内部构建缓存,或者外部比如redis C标准提供的fopen、fread等函数,都会利用标准库的缓存,减少磁盘的操作。系统的open、read等系统调用,则只能利用操作系统提供的页缓存和缓冲区等,没有库函数的缓存可以用。 需要频繁读写同一块磁盘是,用mmap代替read/write,减少内存的拷贝次数 需要同步写的场景,尽量将写合并: ...

C++反射的一种实现——可变参数模板

C++反射的实现需要解决的核心问题是怎么保持一个存储了类名到构造函数的方法。在上一篇我使用了宏定义在服务启动的时候注册,但是使用宏的方法避免不了每次创建类的时候都需要写一段宏去注册,那有没有什么办法可以绕过它呢?本篇文章使用可变参数模板,结合static变量在程序开始运行时创建而在程序结束时销毁,并且不依赖于对象的存在的特性。 创建一个单例工厂类,维护一个map。针对一个Class,定义一个注册类RegClass(可以使用可变参数模板来把所有类的注册类归为一个,这样一种类型的类只需要一个工厂),在注册类的构造函数中注册此类。定义一个类的时候,继承动态注册类,并传入子类作为参数模板:class **MyClass* ...

C++反射的一种实现方式——使用宏定义

C++中没有java和C#等各种语言中支持的反射,但是我们可以使用各种方式来实现一个伪的反射,中心思想是持有一个全局的注册map(类名->构造函数)。创建对象的时候,传入类名,然后在其中找到构造函数,然后创建对象。 本篇文章使用宏定义来解决注册的问题。 一、注册辅助类 ClassRegistry:模板函数,用于data、module、contextdata的注册, ...

Redis vs Memcached?

指标 Redis Memcached 网络IO模型 单线程的IO复用的网络模型 多线程的非阻塞IO复用的网络模型 支持的数据结构 key-value数据类型,还支持list、set、zset、hash等 key-value形式存储和访问数据 内存管理机制 现场申请内存 预分配的内存池 数据存储及持久化 in-memory、支持持久化:快照、 ...

nvidia-k8s-device-plugin源码解析

Kubernetes 提供了Device Plugin 的机制,用于异构设备的管理场景。原理是会为每个特殊节点上启动一个针对某个设备的DevicePlugin pod, 这个pod需要启动grpc服务, 给kubelet提供一系列接口。DevicePlugin 注册一个 socket 文件到 /var/lib/kubelet/device-plugins/ 目录下,kubelet 通过这个目录下的socket文件向对应的 ...

缓存架构的实现

缓存架构的实现需要解决的最主要的问题就是如何更新缓存,具体有由业务方更新和由后台线程更新两种方式: 业务方更新:业务方请求不到缓存数据之后,去存储系统中获取并生成缓存数据。这里需要解决的一个问题是如果多个业务方同时遇到缓存失效的问题,那么所有业务方都会请求存储系统并更新缓存,这样会对业务系统和缓存都造成很大的压力。这时候需要有个分布式锁,保证只有一个线程能进行缓存更新,未获取锁的线程要不就等锁释放后重新读取缓存,要不就返回空值。 后台线程更新:缓存时效设置为永久,由后台线程去更新缓存。这里需要解决的问题是有一些key会被踢出缓存系统的情况。这里可以有两种处理方式,第一种是后台线程频繁的读取缓存,把被踢出的key再加入缓存;一种是业务方获取不到key之后, ...

faiss索引调研(五)—— faiss优化 & 总结

IndexFalt(暴力搜索) 当N(搜索最近邻个数)< 20 且向量的维度是4的倍数,循环遍历一遍向量空间,使用SSE指令集计算向量的相似度。 否则使用OpenMP多线程并行计算 IndexIVF(相似搜索) 针对暴搜基础上: 向量空间聚类: 相似搜索:对于输入的向量x,先从K个聚类中心中寻找nprob个最相似的中心点,从而将搜索空间从全量缩小到nprob个类别的子空间。 假设这里k = 1000, ...

faiss索引调研(四)—— faiss源码分析

https://zhuanlan.zhihu.com/c_159623040 1. faiss最大堆实现 和普通最大堆没什么区别。 pop:堆顶元素出列(放到最后一个位置,最后一个位置后面会置为无效),然后循环把子节点往上提(提上来大的那个子节点(左vs右))。 push:先放到最后一个位置,然后循环往上找到应该插入的位置,每次往上一步就把被对比的堆里面的原元素往下踢一个位。 ...

faiss索引调研(三)—— faiss分析

一、简介 faiss是FaceBook 2017年开源的一个用于高效相似性搜索和密集向量聚类的库,能对海量数据进行高效的相似问搜索和密集向量聚类。 http://houjie13.com/articles/2018/06/21/1529587425820.html http://houjie13.com/articles/2018/06/ ...

faiss索引调研(一)—— 基础知识

零、Delaunay 三角网 【定义】三角剖分:假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段, E为e的集合。那么该点集V的一个三角剖分T=(V,E)是一个平面图G,该平面图满足条件: 1.除了端点,平面图中的边不包含点集中的任何点。 2.没有相交边。 3.平面图中所有的面都是三角面, ...

Kubernetes1.13.2 使用GPU

首先安装nvidia驱动,nvidia-smi有输出即安装成功 安装docker,版本最新就行,当前装的是1.13.1 安装nvidia-docker,https://github.com/NVIDIA/nvidia-docker Centos7使用的是nvidia-container-runtime-hook hook和nvidia-docker的区别:https://xigang.github.io/2018/ ...

python访问hdfs的几种方式

零、搭建 快速搭建单节点的方法:https://blog.csdn.net/yu616568/article/details/42780383 一、python库 hdfs库 pip install hdfs 只可以使用hdfs的http端口(通常是50070),不支持rpc端口( ...

kubernetes相关——network的ip耗尽

问题描述:客户的机器经常断电重启,到某一次之后就显示所有pod都Completed状态,describe的时候信息是:”Failed to setup network for pod \”xxxxxx\” using network plugins \”cni\”: no IP addresses available in ...