自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(323)
  • 资源 (6)
  • 收藏
  • 关注

原创 Java 异步更新数据

1. 背景字典或者模型加载经常会用到双buffer这样读多写少的数据结构。在C++的时候会经常用到brpc里面的双buffer实现。具体可以参考:https://blog.csdn.net/Al_xin/article/details/104030457在这里采用Java的api实现。在Java当中volatile语义可以实现在多个线程的内存可见。可以保证串行访问,从而避免各种加锁的实现。2. 实现例子 public static int i = 0; public static vo

2021-06-15 21:07:29 2194 2

原创 Java CompletableFuture 异步并发

Java CompletableFuture 异步并发1. CompletableFuture 异步编程1.1 使用工厂方法supplyAsync创建CompletableFuture1.2 实施串行关系1.2 多任务组合执行1.3 异常处理1. CompletableFuture 异步编程1.1 使用工厂方法supplyAsync创建CompletableFuture CompletableFuture<String> aFuture = CompletableFuture

2021-06-15 20:31:12 1606 1

原创 内存检测工具:sanitizer

1. 背景内存泄漏是一个比较常见的问题,之前使用的是valgrind来实现内存检查的情况比较多,这里介绍一种更加便利的内存检测工具, 那就是gcc自带的sanitizer。2. sanitizer 的用法2.1 sanitizer的基本简介Sanitizers 是谷歌发起的开源工具集,包括AddressSanitizer,MemorySanitizer, ThreadSanitizer, LeakSanitizer, Sanitizers项目本身是llvm项目的一部分,gcc自带的工具, gcc从

2020-08-25 12:07:39 7762

原创 分布式锁

1. 分布式锁原理分布式锁场景有些业务场景是不适合使用多线程并发的模式的(多线程容易导致数据不一致的问题出现),只能使用单线程进行执行。但是这样又会引发单点故障的问题,因此需要引入如分布式锁来解决单点故障的问题。分布式锁和单机锁什么是锁,主要是可以实现达到对资源的互斥访问, 可以实现排他性的状态。也就是:锁 = 资源 + 并发控制 + 所有权展示常见的单机锁主要是以原子操作为基础,保障一个进程只能实现一次有效操作。spinlock = BOOL + CAS (乐观锁)Mutex =

2020-07-17 00:23:17 267

原创 244 链表排序

1. 题目要求:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5使用归并排序是比较快捷的方式,归并的思想就是分而治之的方法。通过递归的方式,将链表拆成两半,然后合并。如何拆分链表呢? 这里需要用到快慢指针,然后对中间的数据进行二分。具体

2020-07-07 23:40:25 268

原创 gerrit 常用小技巧

文章目录背景基础设置操作提交代码操作背景工作使用的gerrit,记录一些平时经常会用到的git命令,方便备忘。基础设置操作设置用户名和邮箱git config --global user.name xxxgit config --global user.email xxx设置用户自动记住密码git config --global credential.helper store设置配色git config --global color.ui true设置vim(在ub

2020-06-11 17:23:24 1104

原创 MySQL 索引基本常识

本文摘自微信公众号。什么是索引?索引为什么查询快,索引的数据结构是什么?聚簇索引/非聚簇索引区别?什么是覆盖索引?唯一索引/普通索引?单列索引/联合索引区别?Full-index全文索引?什么是下推索引?什么是最左匹配,查询回表?哪些字段适合建索引?为什么一般主键索引最好是自增长的, 尽量短的数值类型?为什么有些SQL不走索引?索引的最佳实践?1. 索引为什么快索引...

2020-03-28 00:31:19 235

原创 TarsCpp 的pb2tarscpp支持协程

1. 背景讲真的,开源出来的tars代码质量真的很一般。虽然原生的tars协议(jce协议),支持的比较好, 但是其他协议支持就很一般了,比如pb协议的支持,里面有几个bug, 包括命名空间的支持、rpc调用多个函数指针错乱,以及对协程不支持。anyway,内部版本的taf应该没有这么些问题,可能是负责开源的同学把它阉割过度了。只能说,tars开源的项目真的一点都不真诚。再来讲讲,tars的异...

2020-02-17 08:40:21 769 1

原创 double buffer 实现

1. 背景字典或者模型加载经常会用到双buffer这样读多写少的数据结构。这里介绍一个从百度的brpc拿出来的一个双buffer实现。2. 痛点经常会遇到的是一个读远多于写的数据结构:大部分时候,所有线程从一个不变的server列表中选取一台server。如果server列表真是“不变的”,那么选取server的过程就不用加锁,我们可以写更复杂的分流算法。一个方法是用读写锁,但当读临界区不是...

2020-01-18 15:31:16 2038

原创 基于DAG简单的任务调度

1. 背景DAG:是一个无回路的有向图。一个经典的应用是用于任务的调度,用来定义任务的依赖关系和流向, 根据整个DAG的定义,可以从中获取哪个任务该先执行,哪个任务后执行。哪些步骤是可以并行执行的。2. DAG的定义这里阐述一个简单的应用例子。推荐系统的通常需要进行多队列召回,然后进行粗排、精排、混排。可以将这些操作抽象成不同类型的rpc调用,在数据召回之后,还可以抽象出来两种动作,包括一种...

2020-01-11 01:16:56 3526

原创 无锁内存队列

#include <chrono>#include <iostream>#include <thread>#include <vector>#include "lockfree_queue.h"using namespace wwsearch;using namespace std;class LockFreeQueueTest {...

2019-12-23 01:01:05 504

原创 tensorflow C++ api

1. 背景TensorFlow是一个从离线到在线一条龙实现的机器学习库。 一般来说,离线算法一般采用Python进行开发,并进行训练,以及得到模型结果, 而在线部分,采用的则是C++来实现,主要考虑到在线预测要一定的性能要求。这里可以采用TensorFlow serving来实现。但是一般来说,为了更好地和内部rpc框架融合,需要将TensorFlow的库,植入到内部的rpc的框架里面。本文主...

2019-11-19 23:47:13 1156

原创 java jni 入门

1. 安装java环境yum install java-devel -yyum install java -y2. 编译流程下面将介绍编写 JNI 入门教程HelloNative程序的编写, 主要的步骤为:编写 HelloNative.java 程序;编译并得到 HelloNative.h 头文件;编写 HelloNative.c 程序;编译动态链接库libHel...

2019-09-18 14:53:24 219

原创 搜索排序之线性模型

1. 背景搜索排序最简单的模型算法是point wise,这里简单展示使用简单的线性模型调权的方案。2. 数据集合grade,titleScore,overviewScore,ratingScore,comment:# <docid> keywords@movietitle4,10.65,8.41,7.40,# 1366 rocky@Rocky3,0.00,6.75,7....

2019-09-16 01:53:52 572

原创 NDCG原理和实现

1. 原理对于搜索引擎,本质是用户搜一个query, 引擎返回一个结果列表,那么如何衡量这个结果列表的好坏?我们希望把最相关的结果放到排名最靠前的位置,因为大部分用户都是从上往下阅读的, 那么最相关的前面可以最大程度减少用户的阅读时间。我们希望整个列表的结果尽可能的和query相关。第一个条件的满足是首要的,而第二个条件的加入是保证整体结果质量,而这两个条件都体现在了NDCG里...

2019-08-03 00:46:45 3231 3

原创 深度文本匹配

1. 传统的文本匹配最近在了解文本匹配相关一些实现和算法。在信息检索系统里面,如何厘清文本的相关性,是一个非常关键的问题。所谓的相关性,主要包括两个方面, 一个方面是文本相关性,还有一个语义的相关性。在经典的模型里面,比较常见的做法是向量空间模型(vector space model)。向量空间模型, 原理则是将query和doc的文本映射成同一个数字向量空间,然后通过consine或者Jac...

2019-07-31 08:13:15 350

原创 向量检索的搜索引擎实现

1. 基本原理与推荐系统不同的是,搜索系统比较重要的用户特征是query,信息检索的过程则是根据query,给用户返回doc集合。传统的检索系统,对文本进行切词, 然后每个词下面会生成一个倒排索引。 query查询时,则是对query进行分词,然后到对应的词进行直接召回即可实现,数据集合的返回。有了数据集之后,如何给doc排序是一个比较关键的问题,毕竟人的精力是比较有限的,在浩渺的知识大海里...

2019-07-16 01:13:17 5974

原创 yum rpm 常用命令使用手册

1. yum 源直接使用yum命令实现对rpm包的搜索、安装以及yumdownloader下载rpm包,用于别的机器。yum search package_nameyum install package_nameyumdownloader package_name外部查找rpm包的网站:http://rpmfind.net/,el6的适用于tlinux1.2,而el7的适用于tlin...

2019-07-06 23:11:18 747

原创 Faiss 入门

1. Faiss 原理单元-探测(Cell-probe) 方法以失去保证以找到最近邻居为代价来加速该过程的典型方法是采用诸如k均值的分区技术。 相应的算法有时被称为 cell-probe 方法:我们使用基于多探测的基于分区的方法(可以联想到best-bin KD-tree的一种变体)。特征空间被划分为 ncells 个单元格。由于散列函数(在k均值的情况下,对最靠近查询的质心的分配)...

2019-07-01 00:37:30 4403

原创 python 常用api

1. 用法从json str 转成jsonfor line in f: data = json.loads(line) one_data = data.values()按照文本顺序from collections import OrderedDictfor line in f: data = json.loads(line, object_pairs_hook=Orde...

2019-06-28 16:12:09 583

原创 Flink 入门

Flink 目前最流行的流式引擎,主要是用来替换jstorm和spark streaming的, 实现对实时数据流的处理,很多实现和spark的操作非常相像。1. 源码安装http://archive.apache.org/dist/flink/flink-1.8.0/ tar -zxf flink-1.7.0-bin-hadoop28-scala_2.11.tgz ./bin/...

2019-06-25 23:37:45 280

原创 RocksDB 入门

1. 基本介绍RocksDB是Facebook开源的一个k-v存储组件,支持点查找和范围扫描, 并提供ACID保证。实现架构主要参考的是开源的leveldb和hbase的设计思想。目前RocksDB主要用于本地存储引擎。1.1 基础架构图Rocksdb中引入了ColumnFamily(列族, CF)的概念,所谓列族也就是一系列kv组成的数据集。所有的读写操作都需要先指定列族。写操作先写WA...

2019-06-24 00:55:49 2773

原创 威尔逊得分 Wilson Score 排序算法

https://www.jianshu.com/p/4d2b45918958

2019-06-18 00:29:36 3004

原创 Protocol Buffer 常用操作指南

1. 数据结构复制

2019-06-17 17:41:23 274

原创 Centos7 / Centos 8常用操作

1. 背景手动升级gcc版本相当麻烦,需要安装很多依赖。于是有了yum这样的包管理。可以方便升级软件解决依赖的问题。2. redhat提供的方案yum升级gcc 6方法具体如下:yum -y install centos-release-sclyum -y install devtoolset-6-gcc devtoolset-6-gcc-c++ devtoolset-6-binutil...

2019-06-16 22:53:36 8073

原创 docker 常用命令

记录常用的docker命令1. 常用命令进入docker容器内部sudo docker ps -asudo docker exec -it 775c7c9ee1e1 /bin/bash停止容器sudo docker stop 775c7c9ee1e1 启动容器sudo docker run 775c7c9ee1e1 ...

2019-06-14 10:54:06 199

原创 tars C++ docker 环境配置

0. 环境说明centos 7.4 vb 虚拟机enp0s3 natenp0s8 host-only(192.168.56.101)1. 安装docker参考https://www.cnblogs.com/yufeng218/p/8370670.htmlsudo yum install -y yum-utils device-mapper-persistent-data lvm2su...

2019-06-10 00:11:19 1332

原创 读龙应台《目送》有感

导语:在高中的时候,我的两个座右铭:“走自己的路,让别说去吧”,以及 “迟疑就面临着失败,抓紧时间,勇往直前”。这两句话一直在我心中,成为心中的一道执念。1. 走自己的路走自己的路不是一种偏执,不是一种顽固不化,不是一种误入歧途。每个人的人生轨迹都不一样,在不同的世界,会接触到不同的人,不同的环境,不同的事物,因而,没人的路是一模一样的。 一条成功的道路只能学习,而不能完全复制。 在人生的...

2019-06-08 23:38:45 616

原创 大数据常用的SQL语法

1. 前言数据分析是算法的基石。而数据分析(如hive、spark的dataframe,flink),目前很大部分都依赖于SQL数据分析。因此很多机器学习算法同学,被戏称为SQL BOY或者是调参 BOY。这里主要备忘一下在大数据分析常用的一些SQL语法,方便随时查看。2. 常用语法将null值填充为其他值select a.id,a.name,IFNULL(b.lastlogintim...

2019-06-07 23:54:54 1343

转载 C++ 11 私有成员变量就地初始化

在C++11之前,对于类中的非静态成员变量,不能在类中进行初始化,它们的初始化操作只能通过构造函数来进行,示例如下:class Foo{ private: int a = 1; //编译错误 public: Foo() {}};上面的程序中,变量a进行了就地初始化,这在C++98中是不允许的,因此会导致编译错误。但是这种情况在C++...

2019-06-06 17:36:28 5744 2

原创 C++ 11 的std::atomic操作

0. 简单应用所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借...

2019-05-31 21:11:31 8106 1

原创 C++11中std::lock_guard和std::unique_lock的使用

1. 原理在互斥类最重要的成员函数是lock()和unlock。通常在进入临界区时,需要进行加锁操作,在退出临界区时,进行解锁操作。更好的办法是采用**”资源分配时初始化”(RAII)方法来加锁、解锁**,这避免了在临界区中因为抛出异常或return等操作导致没有解锁就退出的问题。std::lock_guard类模板做mutex的RAII, 避免因为return或者异常导致的解锁失败而导致资源...

2019-05-31 20:32:20 1468

原创 C++11的move语义

1. 基本原理std::move函数可以以非常简单的方式将左值引用转换为右值引用。通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。2. 例子如string类在赋值或者拷贝构造函数中会声明char数组来存放数据,然后把原string中的 char ...

2019-05-29 23:10:01 545

原创 C++ 11 promise future

1. 简单用例future和promise的作用是在不同线程之间传递数据。简单的例子:假设线程1需要线程2的数据,那么组合使用方式如下:线程1初始化一个promise对象和一个future对象, promise传递给线程2, 相当于线程2对线程1的一个承诺,future相当于一个接受一个承诺,用来获取未来线程2传递的值。如果值未返回,则一直会阻塞。#include <iostr...

2019-05-28 00:33:50 1051

原创 Linux TCP协议栈定时器走读

导语:TCP协议栈是事件驱动的,如果说TCP的拥塞算法是tcp协议栈的心脏,那么tcp协议栈的定时器则是tcp协议栈的心跳。1. 数据结构TCP协议栈的定时器众多,也异常复杂,在这里主要简单走一遍tcp协议栈的定时器机制。N.Wirth曾说:程序=数据结构+算法。某大牛曾说:好的数据结构设计是程序成功的一半。首先来看一下定时器的数据结构:struct timer_list //include

2016-09-15 20:49:59 5933

原创 378. Kth Smallest Element in a Sorted Matrix

Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix.Note that it is the kth smallest element in the sorted order, not the

2016-09-09 07:55:00 562

原创 235. Lowest Common Ancestor of a Binary Search Tree

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two

2016-09-07 08:31:55 440

原创 96. Unique Binary Search Trees

Given n, how many structurally unique BST’s (binary search trees) that store values 1…n?For example, Given n = 3, there are a total of 5 unique BST’s.1 3 3 2 1 \ /

2016-09-05 08:10:24 416

原创 62. Unique Paths

A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).The robot can only move either down or right at any point in time. The robot is trying to reach the botto

2016-09-01 22:35:12 475

原创 108. Convert Sorted Array to Binary Search Tree

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.Subscribe to see which companies asked this question解题思路:就是用2分查找的方案,然后进行深度搜索的方案,递归将数组转化成二分查找数。/** * Def

2016-09-01 08:05:04 330

jdk-8u111-linux-x64.zip

jdk-8u111-linux-x64.tar.gz.

2019-06-10

mysql-5.6.26.7z

mysql-5.6.26.tar.gz 下载下载.

2019-06-09

PaperTest Q&A

这是北邮师兄共享的面试经验总结。谢谢大家。

2014-08-22

TCP-IP详解卷1

这本书是学习TCP/IP协议的经典,是初学者学习的最好的入门资料。

2012-06-27

嵌入式WEB服务器及远程测控应用详解

重点描述了在嵌入式Linux系统上搭建Web服务器,通过Web的方式控制和检测资源。物联网。

2012-06-27

Java学习手册光盘

里面的资源很全,代码很实用。对学习Java编程的人,很实用。

2012-03-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除