Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器 软件资源

软件开发小程序制作系统集成与运维空间租用硬件开发视频监控技术咨询与支持——联系电话:0311-88999002/88999003

首页 / 操作系统 / Linux

Linux SHELL 抓取错误日志脚本

Linux SHELL 抓取错误日志脚本

背景任何程序运行起来免不了产生很多日志,其中错误日志需要最为关心的。在某些时候会将错误日志和正常日志分开,但我们的系统却没有这么做。更麻烦的是,每个小时存储一个日志文件,所以每次为了查找当天是否有错误信息需要打开N个文件,而且不能用grep因为需要把整个堆栈抓取下来。SHELL本人对shell完全是初学,磕磕碰碰写了个脚本。主要逻辑是判断ERROR的日志级别的那一行开始记录,直到碰到下一个INFO或者DEBUG的日志级别行。#!/bin/bashisInE...
Redis 客户端与服务端通信协议

Redis 客户端与服务端通信协议

背景在跟踪REDIS服务端处理命令流程的时候,发现在服务端processInputBuffer里收到的字符串并非是在客户端输入的,而是进行了某种编码。比如,客户端输入get a,实际服务端打印出来的是buf= *2$3get$1a最开始认为是在服务端某段代码对客户端送过来的字符串进行处理,可能是出于某些考虑,后来发现从SOCKET读取过来就已经转换过了,所以就应该是客户端和服务端的通信协议,我对这个就开始产生了很浓厚的兴趣,*和$符号必定是有特殊意义的。客...
Map对象用JSON反序列化的方法

Map对象用JSON反序列化的方法

我们项目组的A系统依靠B系统写入Redis中的数据对象工作。这个对象是一个Map对象,Map对象写入Redis很简单,先JSON化,然后Set入Redis即可。但是用JSON提供的反解析方法的时候,得到的是Map<String, JSONObject> 类型,而我希望得到的是Map<String, DDRouteRuleEntry>类型。也就是DDRouteRuleEntry类型并没有被正确的解析。只好顺应这个结果进行反序列化,然后...
Go语言内存分配器设计

Go语言内存分配器设计

Go语言的整个内存管理子系统主要由两部分组成——内存分配器和垃圾收集器(gc)。十一小长假期为了避开我泱泱大国的人流高峰,于是在家宅了3天把Go语言的内存分配器部分的代码给研究了一番,总的来说还是非常酷的,自己也学到了不少的东西,就此记录分享一下。整个内存分配器完全是基于Google自家的tcmalloc的设计重新实现了一遍,因此,想看看Go语言的内存分配器实现的话,强烈建议先读一读tcmalloc的介绍文档,然后看看Go runt...
Go语言内存分配器-FixAlloc

Go语言内存分配器-FixAlloc

前面写了一篇Go语言内存分配器设计,记录了一下内存分配器的大体结构。在介绍内存分配器的核心实现前,本文先介绍一下内存分配器中一个工具组件——FixAlloc。FixAlloc称不上是核心组件,只是辅助实现整个内存分配器核心的一个基础工具罢了,由此可以看出FixAlloc还是一个比较重要的组件。引入FixAlloc的目的只是用来分配MCache和MSpan两个特定的对象,所以内存分配器中有spanalloc和cachealloc两个组...
Go语言内存分配器-MSpan

Go语言内存分配器-MSpan

MSpan和FixAlloc一样,都是内存分配器的基础工具组件,但和FixAlloc没太大的交集,各自发挥功效而已。span(MSpan简称span)是用来管理一组组page对象,先解释一下page,page就是一个4k大小的内存块而已。span就是将这一个个连续的page给管理起来,注意是连续的page,不是东一个西一个的乱摆设的page。为了直观形象的感受一下span,还是得画个图吧,图形是最好的交流语言。MSpan结构定义在malloc.h头文件中,...
Go语言内存分配器的实现

Go语言内存分配器的实现

前面断断续续的写了3篇关于Go语言内存分配器的文章,分别是Go语言内存分配器设计、Go语言内存分配器-FixAlloc、Go语言内存分配器-MSpan,这3篇主要是本文的前戏,其实所有的内容本可以在一篇里写完的,但内容实在太多了,没精力一口气搞定。本文将把整个内存分配器的架构以及核心组件给详细的介绍一下,当然亲自对照着翻看一下代码才是王道。内存布局结构图我把整个核心代码的逻辑给抽象绘制出了这个内存布局图,它基本展示了Go语言内存分配器的整体结构以及部分细节...
Python 的 Magic Methods 指南

Python 的 Magic Methods 指南

介绍本指南是数月博客的总结。主题是魔术方法。什么是魔术方法呢?它们是面向对象Python语言中的一切。它们是你可以自定义并添加“魔法”到类中的特殊方法。它们被双下划线环绕(比如__init__或__lt__)。它们的文档也不像它所需要的那么齐备。Python的所有魔术方法都在Python文档的同一区域,但它们的使用分散,组织松散。而且文档的这部分区域中几乎没有一个示例(这很有可能是设计好的,因为在语法参考里它们都很详尽,但伴随的是枯...
Linux select详解

Linux select详解

select系统调用时用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,通过socket函数的声明就明白了:int socket(int domain, int type, int protocol);我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、s...
C++中构造函数何时才会构建

C++中构造函数何时才会构建

当用户未定义一个默认的构造函数,编译器并不是在任何时候都给自动给我们定义一个默认的构造函数,它只会在编译器需要的时候才会生成,并且只有class类型的变量会被初始化,其他的诸如内置类型变量或者指针都不会被初始化,这些变量的初始化工作是程序员的责任。同样,一个类的默认复制构造函数也不是什么时候都会由编译器自动生成,它需要满足以下几种情况:当class内含有一个member object,而这个member object的class声明有一个copy cons...
Java源文件命名规范

Java源文件命名规范

Java源文件命名规范命名规则:1、一个源文件中可以有多个类的定义。注意:此处的类指的是类级别的定义,并不仅仅指class,还包括interface,enum,@interface。2、一个源文件中最多只能有一个类的访问权限为public。注意:此处的类指的是顶级类,并不包括内部类。3、如果源文件中某个类的访问权限为public,则源文件的文件名必须和该类的名称一样,包括大小写都必须一致,并且以.java为后缀。4、如果源文件中没有访问权限为public的...
Java中class.forName和classLoader加载类的区分

Java中class.forName和classLoader加载类的区分

Java中class.forName和classLoader都可用来对类进行加载。前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。Class.forName(name, initialize, loader)带参函数也可控制是否加载static块。并且只...
Go语言的国际化支持(基于gettext-go)

Go语言的国际化支持(基于gettext-go)

hello, world!假设有以下的程序, 输出: “Hello, world!”.package mainimport ("fmt")func main() {fmt.Println("Hello, world!")}现在要让改程序支持不同语言的用户, 然后以本地语言输出相同意思的信息. 这就是很多程序面临的国际化问题.Go 语言的国际化思路程序的国际化一般涉及到编码和翻译两个概念. 其中编码一般采用 UTF8 编码标准, Go...
<< 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 >>