- 博客(120)
- 资源 (27)
- 论坛 (36)
- 收藏
- 关注
原创 mvn跨平台编译thrift
在java开发中,如果需要编译thrift文件时,需要使用插件maven-thrift-plugin,然而这个插件不支持跨平台(比如开发在window,运行在linux上),这就对编译环境提出比较高的要求。然而我们可以通过简单的配置。 <build> <extensions> <extension> <groupId>kr.motd.maven</groupId>
2021-02-24 21:08:47
8
原创 spring家族-sping基本知识
看了一段时间视频教程,还是需要总结一下,不然很容易忘的,笔记如下。一、概念1、三层架构:表现层(SpringMvc)、业务层(Spring)、持久层(Mybaits),感觉现在用springboot比较多。2、程序间的依赖关系:类之间的依赖、方法间的依赖 3、IOC什么是Ioc:控制反转,不知道为什么老外喜欢创建名词。IoC本质:一个java对象的生命周期(创建、销毁)统统交...
2021-01-27 10:34:37
73
原创 从零开始介绍如何写注解(annotation)
一、注解注解相关内容,可自行百度。这里介绍通过语法树,修改源码的方式:主要实现在方法入口、退出打印。二、idea创建工程通过idea创建一个工程,并且添加两个module,如下图所示:2.1、ztrace工程2.1.1、pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http.
2020-11-26 19:41:06
155
原创 java根据不同环境使用不同的配置文件
一、maven编译打包方式<profiles> <profile> <id>preonline</id> <build> <resources> <resource> <directory>src/main/resources/preonline/</directo.
2020-11-24 16:57:58
176
原创 正则表达式积累
1、数字范围 810000000 ~ 899999999^8[1-9]\d{7}$ ==> 第一位是8,第二位只能是1-9中一个,其余7位是任意数字组合(\d表示数字)2、数字范围810000001 ~ 899999999^(81000000[1-9]|8100000[1-9]\d|810000[1-9]\d{2}|81000[1-9]\d{3}|8100[1-9]\d{4}|810[1-9]\d{5}|81[1-9]\d{6}|8[2-9]\d{7})$完全的排列组合,需要单独...
2020-11-12 17:56:06
15
原创 sed删除注释#
modules.conf文件内容:applications/mod_av#applications/mod_distributorapplications/mod_mod_ladspa需求:将#删除掉#!/bin/bashfunction sed_repalce() { filename=$1 old="#$2" new=$2 echo $old $new sed -i 's;'''$old''';'''$new''';g' $filename}sed_rep
2020-11-04 21:09:53
143
原创 java getLocalHostName底层实现
最近工作getLocalHostName返回值和linux 命令hostname返回值不太一样,就深入研究了一下jdk源码实现,请参考代码注释。JNIEXPORT jstring JNICALLJava_java_net_Inet4AddressImpl_getLocalHostName(JNIEnv *env, jobject this) { char hostname[NI_MAXHOST+1]; hostname[0] = '\0'; if (JVM_GetHost
2020-11-04 17:53:59
79
原创 slf4j入门指导
第一次配置日志,还是花了很长时间。记录一下slf4j疑惑一、slf4j是什么slf4j是一套日志框架,但是它并不真正实现日志写入功能。java的日志实现框架有很多例如:log4j、logback等,但各种日志使用规则不尽相同,为了更好的体验,slf4j在日志实现框架上进行了一层封装。即:不关心底层日志实现,只需要使用slf4j简单接口即可。二、配置slf4j可以对接多中日志实现框架,这里罗列一下常用框架配置,以便后面使用。如果通过idea运行,默认目录是工程的根目录。2.1、对接log4
2020-10-26 17:00:50
42
原创 Freeswitch常见问题
一、返回480Reason: Q.850;cause=96;text="MANDATORY_IE_MISSING" 我这里遇到原因是:fs外呼时, 对端的ip端口写错了。freeswitch internal端口是5060,external端口是5080 <extension name="Output fs"> <condition field="destination_number" expression="^0(10[01][0-9])$">..
2020-09-22 20:00:53
434
原创 github clone 慢
通过站长工具:http://tool.chinaz.com/dns/输入github.com,进行dns查询,挑选一个TTL最小的ip,然后设置hosts文件,添加dns影射即可,例如:13.250.177.223 github.com
2020-08-29 16:09:59
47
原创 C语言实现为终端程序--webshell基石
之前对ssh一直很困惑它是如何实现的,网上也没有相关代码实例,所以自己花了一段时间研究了一下。本篇博客主要写了两个程度:服务端和客户端,通过客户端可以远程登录服务端,执行shell命令。代码实现的比较糙,但是基本原理一看就明白。一、主要核心思想:1)创建pty终端,即open("/dev/ptmx", O_RDWR | O_NOCTTY),关于pty的介绍网上有很多,这里简单说明一下pty类似我们管道,但是pty是全双工的。pty有master、slave,两者之间可以进行通信。当我open的时候返
2020-06-30 19:56:53
293
原创 docker 网络之host模式底层实现
众所周知,docker有4种网络模式:桥接、host、容器、none,默认使用桥接。今天主要介绍一下host模式。host模式,本质是容器与物理主机在网络空间是同一个namesapce。docker在创建容器后会在默认路径/var/run/docker/netns/ 生成一个文件,创建一个容器并且指定网络是为--net=host,具体如下可知:我们通过上图可知,蓝色中实际为文件inode id,三者是完全相同的。其中进程1的net namespace代表就是物理主机net namespace,由
2020-06-10 20:59:47
363
原创 Linux namespace定位
1、lsns命令查看系统中namespace[root@localhost hotspot]# lsns NS TYPE NPROCS PID USER COMMAND4026531836 pid 324 1 root /usr/lib/systemd/systemd --switched-root --system --deserialize 224026531837 user 326 1 root /usr/lib/syste
2020-05-22 17:23:10
119
原创 简约而不简单epoll之EPOLLRDHUP
在内核2.6.17(不含)以前版本,要想知道对端是否关闭socket,上层应用只能通过调用recv来进行判断,在2.6.17以后,这种场景上层只需要简单处理即可。一、未使用EPOLLRDHUP服务端代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <s...
2020-04-01 12:47:33
238
原创 简约而不简单epoll之EPOLLOUT
本篇主要分析epoll边缘触发,通过模拟各种场景,来介绍EPOLLOUT,不涉及epoll底层源码实现。一、前提epoll_wait返回的条件1、等待时间到期2、发生信号事件,例如ctrl+c3、The associated file is available for read(2) operations,如果注册了EPOLLIN, socket接收缓冲区,有新的数据到来4...
2020-03-31 17:14:30
876
1
原创 CSS3备忘录3
一、CSS精灵技术精灵图其实几句是有多张小图片,做成一张大图片,通过精确位置定位+宽度高度来限制图片显示。使用这种技术能够减少与web服务器的交互。二、字体图标所谓字体图标是在一个网页中我们看着像是一个图片(图标),实际上是字体(来自字体库)。使用字体图标的好处是:我们可以任意修改图标的大小、颜色等(不必求UI工程师)。字体图标网站:https://icomoon.io/(国外...
2019-12-16 11:04:34
61
原创 CSS3备忘录2
上一篇,在这里目录六、常用属性七、小技巧六、常用属性 属性 取值 备注 background background-color 背景颜色 background-image 背景图片 background-repeat 背景图片是否平铺 默认平铺 background-position 背...
2019-12-16 10:58:24
50
原创 CSS3备忘录
目录一、背景二、css选择器三、css元素分类四、CSS三大特性五、CSS三大模块5.1、盒子模型5.2、浮动-float浮动使用方式浮动特性清除浮动5.3、定位5.3.1、边偏移5.3.2、定位模式5.3.2.1、相对定位模式5.3.2.2、绝对定位模式5.3.2.3、固定定位模式5.4 定位总结一、背景对...
2019-12-16 10:55:18
53
原创 Centos安装GIMP图片软件
一、安装GIMPGIMP应该是linux下面Photoshop,在linux下安装也很方便。我的系统是Cenots7.4版本,下面是我的安装方式通过flatpak 进行安装即可,如下命令:[root@localhost 下载]# flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.fl...
2019-12-05 15:22:51
241
原创 Webpack入门简介
文章目录什么是Webpackwebpack安装webpack配置文件webpack使用自动打包编译组件 -- webpack-dev-server安装配置运行配置项说明第三方加载器Babel配置Babel步骤什么是Webpack我们在开发Java后端应用程序,可能会用maven来进行项目管理(编译、打包、发布、运行),能够节省我们人力成本。而webpack也是类似的软件,只不过它是应用于前端。...
2019-11-28 14:36:05
58
原创 Vue入门笔记(2)
目录结构五、Vue中动画六、Vue中组件组件创建组件间切换组件间传值数据传递方法传递,父子间双向传递七、Vue获取DOM元素\组件获取DOM元素获取组件八、Vue路由相关说明使用路由传值query方式--即?方式占位符方式--即:方式路由嵌套路由命名视图九、其他五、Vue中动画六、Vue中组件组件分为全局组件和私有组件,将组件定义在vue实例中components就是私有组件。组件创建创...
2019-11-26 18:10:28
54
原创 Vue入门笔记(1)
这里写自定义目录标题一、vue对象创建vue中常用属性二、vue常用指令三、vue过滤器全局过滤器私有过滤器四、Vue的生命周期一、vue对象创建<html><head><!-- 导入vue.js --><script src="lib/vue.js"></script></head><body> ...
2019-11-26 18:10:04
87
原创 Linux进程、线程绑定CPU以及独占CPU
在很早之前就了解一项技术:线程绑定cpu。该项技术也应用到各种应用软件,来提高性能。这里把自己做的一个实验记录下来,方便日后查阅。一、进程绑定cpu我们通过系统调用sched_setaffinity进行绑定,通过sched_getaffinity获取绑定关系。注意这对方法是进程级别的绑定。代码中指定cpu0和cpu3,我们可以通过htop查看,两个cpu使用达到了100%,其他的cpu均不...
2019-11-04 19:49:19
2712
3
原创 小白搞kafka之安装篇
一、简介kafka是由Scala语言开发的并且依赖zookeeper,所以我们在部署kafka环境的时候需要安装scala以及zookeeper。一般都是多节点部署(除学习外),所以我通过kvm虚拟了6台虚拟机,三台做为zookeeper集群,三台做为kafka集群。二、安装zookeeper2.1、环境名称 IP地址 zookeeper1 192.168.125....
2019-09-23 19:59:59
200
原创 kvm网络那些事儿
在Linux下面我比较习惯用kvm虚拟出虚拟机,今天主要记录一下kvm网络相关的一些内容。一、网络模式kvm虚拟机支持两种网络模式:NAT和Brigde,这种模式有什么区别呢?NAT(网络地址转换):这种方式是虚拟系统通过网络地址转换,将地址映射到host主机地址上,通过主机进行网络访问。这样虚拟系统就可以访问外网和局域网内的其他主机。但是局域网内的其他主机不能访问虚拟系统,相当于单向...
2019-09-18 14:50:57
242
原创 supervisor监控和mail预警
一、首先配置邮件相关配置在配置文件/etc/mail.rc末尾增加如下配置set from=sender@abcd.comset smtp=mail.demo.abcd.com #发送方地址 邮件服务器 也可能是ip地址set smtp-auth-user=mpdset smtp-auth-password=SenderPasswordset smtp-auth=logins...
2019-08-15 20:17:42
667
原创 leveldb常见问题以及性能优化点
本篇是leveldb最后一篇,这里主要把技术核心点,性能提升点或者面试可能会被问到进行总结。一、常见问题1、leveldb key-value内存,内存中保存的是所有key-value吗? 答:不是 搜索顺序,memtable immtable ldb文件2、布隆过滤器 在leveldb中的应用是什么?答:布隆过滤器主要应用查找方面,如果查找一个key在过滤器中返回false,那么...
2019-07-18 18:35:38
2359
原创 leveldb深度剖析-布隆过滤器
布隆过滤器使用bit数组映射关键字key,对于在一个超大的集合中判断是否存在某个key能够起到很好的效果。但是缺点很明显:容易误报。也就是本来不存在的key,可能告诉你它存在。一、布隆过滤器根据上图来说明布隆过滤器的原理:1)布隆过滤有一个m位(这里是10个)的bit数组(或者称bitmap),bit数组初始化为全0,并且有k个(这里是3个)hash函数。2)当我们分别存储a...
2019-07-18 18:35:26
534
原创 leveldb深度剖析-TableCache
TableCache设计的出发点就是:提升性能。根据著名的局部性访问原理,leveldb设计了一个简单LRUCache算法,该算法是TableCache的核心,下面我们就来分析一下leveldb是如何实现的。一、TableCache先来看一下TableCache的类定义,非常简洁:class TableCache { public: TableCache(const std::...
2019-07-18 18:35:10
527
原创 leveldb深度剖析-查询流程
至此,将插入流程以及压缩流程都已介绍完毕了,本篇主要介绍查询流程。一、查询流程首先来看一下查询接口具体实现内容:/** * 查询 * @param options 查询选项 * @param key 查询key * @param value 输出参数 如果找到则赋值给value */Status DBImpl::Get(const ReadOptions& opt...
2019-07-18 18:34:17
707
原创 leveldb深度剖析-压缩流程(3)
本篇是压缩流程中最后一篇,介绍DoCompactionWork方法。压缩主要工作是什么呢?剔除无效数据。什么是无效数据呢?就是被标记为删除的数据,我们要在这个流程中从磁盘中删除掉。下面来看一下具体是如何进行删除的。一、迭代器该函数比较长,这里分段介绍该函数。/** * 执行压缩 * @param compact 压缩信息 */Status DBImpl::DoCompacti...
2019-07-16 20:50:09
245
原创 leveldb深度剖析-压缩流程(2)
继续上一篇内容,来分析一下跨层压缩处理。leveldb不会轻易进行压缩流程(压缩流程影响性能),所以为了提升性能leveldb设计两个简单算法来决定压缩哪一层的哪一个文件一、压缩预计算1.1、打分函数leveldb每次进行文件压缩并没有随意压缩的,而是通过压缩预计算流程(打分函数)计算出一下值,在压缩的时候根据预计算结果选择压缩的层次,那么打分函数是如何实现的呢?/** * 预...
2019-07-16 20:48:05
475
原创 leveldb深度剖析-存储流程(2)
继续上一篇内容,本篇继续说明leveldb是如何将数据插入到MemTable中。一、Iterate循环处理插入到MemTable使用该接口WriteBatchInternal::InsertInto,具体实现是:Status WriteBatchInternal::InsertInto(const WriteBatch* b, ...
2019-07-16 20:46:50
242
原创 leveldb深度剖析-压缩流程(1)
继续上一篇遗留问题,本篇介绍对MemTable压缩,在介绍之前先普及一下其他内容。在存储流程第一篇博客中,有一个方法没有详细说明--MakeRoomForWrite,该函数是保证新插入的数据有足够空间,那么该方法是如何保证的呢?本篇就详细介绍一下该方法。一、MakeRoomForWrite/* * 确保有足够空间可写 * @param force true表示强制立刻写入 fa...
2019-07-16 20:44:25
917
原创 leveldb深度剖析-存储流程(1)
上一篇介绍了leveldb初始化流程,本篇开始介绍存储流程。对于leveldb来说,删除数据实际是插入数据,只是将类型设置为删除即可,并不会真正将数据从磁盘中删除.那么什么时候真正删除呢?在压缩过程中,具体在压缩流程中介绍。一、插入1.1、总体流程图调用接口Put即可完成插入数据。那么内部实现是什么呢?首先来看一下总体流程图:说明:1) 调用接口Put插入数据,首先会先保存...
2019-07-16 20:40:46
469
原创 centos下使用搜狗输入法
搜狗输入法官方网站没有提供centos7下面的安装包,网上大部分教程都是针对deb包进行解压然后安装。我是怎么安装的我也记不清楚了,稀里糊涂的就安装上了。但是安装的时候遇见两个重要问题:1、有的博客建议将ibus卸载掉。我这里不建议卸载:因为卸载了ibus可能导致桌面系统无法正常使用,我之前就遇到了这个大坑,卸载了ibus无法进入桌面。2、安装完后,中文标点符号不能使用。解决方法:安装过程...
2019-07-15 15:12:05
2400
原创 Linux命令查找并替换 awk sed
查找当前目录中所有文件,将`business` VARCHAR(16)替换成`business` VARCHAR(32)grep '`business` VARCHAR(16)' ./ -rn | awk -F ':' '{print $1}' |xargs sed -i 's/`business` VARCHAR(16)/`business` VARCHAR(32)/'...
2019-07-11 19:29:24
2017
原创 leveldb深度剖析-初始化流程
本篇来介绍一下leveldb初始化流程,初始化流程中涉及了很多内容,例如:文件组织方式,存储内容序列化和反序列化等等。在了解这些内容后,是有助于日后分析存储流程和压缩流程的。一、创建/Open数据库leveldb属于轻量级kv数据库,可以很方便写一个hello程序并结合gdb单步调试,来辅助我们阅读源码,起到事半功倍的效果。1.1、版本管理leveldb采用分层思想对数据进行管理,...
2019-07-03 20:01:56
564
原创 leveldb深度剖析-MemTable
上一篇介绍了SkipList数据结构,但leveldb插入数据并不是直接操作SkipList,而是直接操作MemTable。可以理解为MemTable是对SkipList一层封装。一、数据结构class MemTable { public: // MemTables are reference counted. The initial reference count // i...
2019-07-03 19:56:25
325
原创 leveldb深度剖析-SkipList跳表
上一篇介绍了leveldb整体存储结构,了解整体存储结构有助于我们深入理解leveldb源码。本篇介绍一下leveldb在内存中存储结构。链表的特点是插入、删除很好,但是查找性能就比较差了,需要从头开始遍历。对于查找场景我们通常使用二叉树,但是二叉树在插入、删除场景下需要调平衡,性能不是很好。所以为解决这两种数据结构的弊端,跳跃表应运而生。一、SkipList思想跳跃表的大体存储形式为...
2019-07-03 19:55:24
475
无线网卡Rtl8188EUS驱动文件
2018-11-22
openvswitch hmap举例
2015-12-27
charles-proxy-4.5.6_amd64.tar.gz
2020-07-22
wireshark支持flannel报文解析
2019-01-03
Centos6.7 OpenVSwitch-2.4.1.rpm x86
2015-11-01
oauth-proxy docker 镜像
2018-03-30
Nginx实现登录、留言板、文件上传
2018-12-04
MemoryAnalyzer-1.9.2.20200115-linux.gtk.x86_64.zip
2020-04-16
vscode支持golang相关bin
2019-01-15
Dremel+made+simple+with+Parquet.pdf
2019-09-30
二分查找算法pk平衡二叉树 效率高低比较
发表于 2012-11-26 最后回复 2020-07-16
opendaylight 安装feature失败
发表于 2015-10-21 最后回复 2018-05-24
新版博客编辑-上传图片不能居中--啥玩意
发表于 2018-01-06 最后回复 2018-01-06
python中文替换 出现问题
发表于 2013-09-26 最后回复 2015-10-30
编译完openvswitch安装kmod时候出错
发表于 2015-10-30 最后回复 2015-10-30
Qt QPushButton按钮背景图片!!高手进来
发表于 2012-11-21 最后回复 2015-06-13
QT 快速添加注释
发表于 2012-10-16 最后回复 2013-12-20
linux内核升级成功2.6.18---3.9.3
发表于 2013-06-05 最后回复 2013-07-08
Qt QAction旋转效果
发表于 2012-11-06 最后回复 2013-05-22
c语言编译问题 非常奇怪 居然能编译通过
发表于 2013-03-28 最后回复 2013-04-03
socket 网络编程指点
发表于 2013-02-06 最后回复 2013-02-25
变量初始化问题
发表于 2013-02-07 最后回复 2013-02-21
VC父子窗口销毁问题 希望MFC 高手指点一下
发表于 2013-02-05 最后回复 2013-02-06
高手指点--写个恢复数据软件
发表于 2013-01-28 最后回复 2013-02-05
最近学习汇编,不会,就高手指点1、2
发表于 2013-01-16 最后回复 2013-02-05
汇编小问题。。。求高手
发表于 2013-01-15 最后回复 2013-01-28
QToolButton 做标题栏的控制按钮 还原后还是按下状态
发表于 2012-12-05 最后回复 2013-01-15
如何第一个函数指针 ??
发表于 2012-12-14 最后回复 2012-12-24
QLabel背景图片平铺 急急急
发表于 2012-12-23 最后回复 2012-12-24
Qt安装问题 高手请进来吧!!
发表于 2012-11-09 最后回复 2012-12-01
2012年考研计算机题 高手进来吧!!
发表于 2012-11-14 最后回复 2012-11-26
ubuntu 10.04开机没有登录窗口了
发表于 2011-03-12 最后回复 2012-11-23
C语言移位问题
发表于 2012-10-12 最后回复 2012-11-14
控制台界面如果想实现下面界面如何实现
发表于 2012-09-19 最后回复 2012-11-06
Linux红黑树求解
发表于 2012-09-14 最后回复 2012-09-17
Dijkstra算法
发表于 2012-08-13 最后回复 2012-09-14
C语言 如何根据偏移量访问成员dd
发表于 2012-08-27 最后回复 2012-08-27
C语言宏函数的使用 待急
发表于 2012-08-02 最后回复 2012-08-02
g++编译C语言函数 混合编程 有点意思??
发表于 2012-07-31 最后回复 2012-07-31
如何让VC6.0支持宏定义TRACE
发表于 2012-07-26 最后回复 2012-07-26
CTabCtrl使用
发表于 2012-04-20 最后回复 2012-07-18
控件背景色
发表于 2011-03-21 最后回复 2012-04-10
VC进度条不能往前移动了???
发表于 2011-03-26 最后回复 2012-04-10
VC 画两张不同的同心圆,但是结果却是相同的
发表于 2010-12-17 最后回复 2011-02-25
js document.write问题
发表于 2010-11-01 最后回复 2010-11-01
asp上传文件类的问题
发表于 2010-09-18 最后回复 2010-11-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝