go语言初学记录

部门计划年底开始转到go,难得这个周末在家没事,学习go圣经这里记录下与C C++ lua中的异同点。对比主要涉及ANSI C 、C++98、 C++11(小部分)、 lua,不涉及c++14 c++17 c++20等新特性。在学习go的过程中一个下意识的举动就是想某某特性C/C++ lua里对应怎么实现?

学习的直观感受是go中有的,C/C++ lua都有,但大部分情况下没有go用起来简单、方便。语法和使用上C/C++远比go复杂的多,go入门快,学习性价比高。初学go,文章中的观点如有错误,欢迎评论指出。本文部分例子来源于go-tour和go by example这两个教程非常好,非常适......

日常开发笔记总结(四)

在geeksforgeeks上看到一篇介绍shared_ptr的文章,里面提到了Cyclic Dependency。

维基百科中也有详细的介绍Circular dependency

维基百科中提到一种循环依赖关系错误的例子:

a.h

#ifndef A_H

#define A_H

class B; //forward declaration

cl......

[LeetCode C++实现]46.Permutations

46.Permutations

一口气刷了3道简单题目,正当得意忘形的时候遇到了一道求全排列的题,竟然一时间不知道如何下手。

由于恰好看algorithm中有实现next_permutation,因此直接使用stl中的现有实现:

方法一:

next_permutation

class Solution {

public:

vector<vector<int> > permute(vector<int> &num) {

vector<vector<int> > ans;

sort(num.begin(), num......

KMP算法简介与应用

延期复工在家无聊,刷了几道leetcode的题,目前进度111 / 1340,很多题目现在觉得好简单,一遍手敲代码,直接AC。但运行速度和内存占用往往很难达到top 10%。以leetcodeimplement strstr为例,要实现子串查找最简单的就是暴力求解,两层for循环搞起来。当然两层for循环的基础上还能有小的优化。

class Solution {

public:

int strStr(string haystack, string needle) {

int hsize = haystack.size();

int nsize = needle.size();

for......

c++filt用法介绍

解析变量类型

typedef char * pstring;

const pstring cstr = 0; //cstr是指向char的常量指针

const pstring *ps; //ps是一个指针,它的对象是指向char的常量指针

上面两条声明语句的基本数据类型都是const pstring,const是对给定类型的修饰。pstring实际上指向char的指针,因此const pstring就是指向char的常量指针,而非指向常量字符的指针。

遇到类型别名时,人们往往会错误地尝试把类型别名展开,以理解该语句的含义,这是错误的!

例如:

typedef char *......

C++语言导学

放假前去朋友那闲逛,发现他一前端居然看起了一本的书,这不是不务正业吗?

为了让他在前端方面能有更深的造诣,我只能把这本书拿来勉为其难的读下。

说来惭愧工作中使用的C++只是最简单的那部分,公司编程规范中明确规定不能使用c++ 11 14 17 模板等新特性。本文记录学习该书过程中的疑问,如有错误欢迎指正。

确定默认c++编译标准

如何确定当前g++使用的哪个版本的C++标准编译呢?

这里介绍一种查看方法,如果当前g++版本是4.7之后,可以使用如下方法查看:

[root workspace]#g++ --version | head -1

g++ (Ubuntu 7.......

leveldb中的LRUCache学习

由于查询内存要远比查询mongo数据库快,为了减少数据库查询压力,提升业务进程处理速度,实现了一个简单的lrucache,笔记链接LRU算法C++实现。内存相对于磁盘永远是奢侈品,但随着时代的发展,现在的服务器动辄32G 64G起步,分出几个G来提高访问速度是必要的。计算机中有个比较有意思的现象,要么以时间换空间,要么以空间换时间,LRU算法则属于后者。

QQ group里听某位大哥说google leveldb中有一套非常经典的lrucache实现,心向往之,周日跑了一天的装修后,晚上一边泡着脚一边github上拉下来代码研究下。

首先是leveldb的安装,网上找了一些安装方法,差不多......

日常开发笔记总结(三)

拷贝赋值函数#include <string>

#include <iostream>

using namespace std;

class Person{

string name;

int age;

public:

Person(const string &name,int age):name(name),age(age){}

//拷贝构造和拷贝赋值函数

Person(const Person &p):name(p.name),age(p.age){}

Person& operator=(const Person &p)

{

cou......

LRU算法C++实现

最近项目里需要实现一个LRU算法,github上找到一个c++版本,虽然C++用的少,但看了下源码之后发现学到了不少知识。本文记录如何使用该开源库,最后给出学习之后对源代码的注释版本。

原项目地址:cpp-lru-cache

源代码使用,将如下代码命名为lru_example.cpp,并与文件lrucache.hpp放在同一个目录下。使用如下命令编译:

g++ -g -std=c++11 -o lru_example lru_example.cpp

lru_example.cpp

#include "lrucache.hpp"

#include <......

C语言函数getrlimit与setrlimit介绍

老规矩,祭出man手册。学习man手册中的内容:man 2 getrlimit

The getrlimit() and setrlimit() system calls can be used to get and set the resource limits such as files, CPU, memory etc. associated with a process.

Each resource has an associated soft and hard limit.

soft limit: The soft limit is the actual limit enfo......