Golang入门指南


  • 首页

  • todo

  • 思考

  • life

  • food

  • OS

  • lua

  • redis

  • Golang

  • C

  • TCP/IP

  • ebpf

  • p4

  • OpenVPN

  • IPSec

  • L2TP

  • DNS

  • distributed

  • web

  • OpenWRT

  • 运维

  • Git

  • 鸟哥的私房菜

  • IT杂谈

  • 投资

  • About Me

  • 友情链接

  • FTP

  • 搜索
close

find grep linux中查找文件和字符串

时间: 2022-09-29   |   分类: 运维     |   阅读: 1328 字 ~3分钟

在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。

区别:

  • find 命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
  • grep 是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。
  • which 查看可执行文件的位置 ,只有设置了环境变量的程序才可以用
  • whereis 寻找特定文件,只能用于查找二进制文件、源代码文件和man手册页
  • locate 配合数据库查看文件位置 ,详情:locate -h查看帮助信息

​

阅读全文 »

写给工程师的十条精进原则

时间: 2022-09-29   |   分类: IT     |   阅读: 8033 字 ~17分钟

引言

时间回到8年前,我人生中第一份实习的工作,是在某互联网公司的无线搜索部做一个C++工程师。当时的我可谓意气风发,想要大干一场,结果第一次上线就写了人生中第一个Casestudy。由于对部署环境的不了解,把SVN库里的配置文件错误地发到线上,并且上完线就去吃晚饭了,等吃饭回来发现师傅在焦头烂额地回滚配置。那次故障造成了一个核心服务20分钟不可用,影响了几百万的用户。这仅仅是一个开始,在后来半年的时间里,我几乎把所有职场新人可能犯的错误都犯了个遍。架构师让我调研一个抓取性能提升方案,我闷头搞了两周,也没有得出任何结论;本来安排好的开发计划,由于我临时要回去写论文,搞得经理措手不及;参加项目座谈会,全程“打酱油”……那段时间,自己也很苦恼,几乎每天晚上11点多才走,很累很辛苦,但依然拿不到想要的结果。

阅读全文 »

工作中如何做好技术积累

时间: 2022-09-29   |   分类: IT     |   阅读: 12641 字 ~26分钟

引言

古人云:“活到老,学到老。”互联网算是最辛苦的行业之一,“加班”对工程师来说已是“家常便饭”,同时互联网技术又日新月异,很多工程师都疲于应付,叫苦不堪。以至于长期以来流传一个很广的误解:35岁是程序员工作的终点。

阅读全文 »

工程师的基本功是什么?该如何练习?

时间: 2022-09-29   |   分类: IT     |   阅读: 2343 字 ~5分钟

在美团有一句老话,叫做“苦练基本功”。美团创始人王兴解读的基本功是业务和管理的基本动作。只要能把基本功扎实练好,就能产生巨大价值。然而滴水石穿非一日之功,练好基本功是一个长期的事情。

阅读全文 »

字符串匹配的KMP算法

时间: 2022-09-29   |   分类: 算法     |   阅读: 1955 字 ~4分钟

https://www.ruanyifeng.com/blog/2013/05/)

字符串匹配是计算机的基本任务之一。

举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?

阅读全文 »

Compare And Swap(CAS)原理分析

时间: 2022-09-29   |   分类: IT     |   阅读: 3329 字 ~7分钟

1 什么是CAS?


1.1 加锁和CAS解决原子性问题的不同原理

首先看如下代码:

package com.nrsc.ch2.cas;

import java.util.ArrayList;
import java.util.List;

public class CasDemo {

    //共享资源
    static int i = 0;

    public static void increase() {
        i++;
    }

    public static void main(String[] args) throws InterruptedException {
        Runnable r = () -> {
            for (int j = 0; j < 1000; j++) {
                increase();
            }
        };

        List<Thread> threads = new ArrayList<>();
        for (int j = 0; j < 10; j++) {
            Thread thread = new Thread(r);
            threads.add(thread);
            thread.start();
        }

        //确保前面10个线程都走完
        for (Thread thread : threads) {
            thread.join();
        }

        System.out.println(i);
    }
}

123456789101112131415161718192021222324252627282930313233343536

相信每个人都知道这段代码由于i++不是原子操作,因此会导致这10个线程执行后的最终结果不是10*1,000 = 10,000。 当然也相信几乎所有人都知道通过加锁可以解决这个问题,加锁方式解决该问题的原理基本可以用下图进行概况: 在这里插入图片描述 而其实除了加锁之外利用CAS机制也能解决这个问题。既然说它是除了加锁之外的另一种解决方式,那它肯定是无锁的,因此利用CAS机制解决该问题的方式大致可以用下图进行概况: 在这里插入图片描述 那到底啥是CAS呢?它又是是如何解决这个问题的呢?

阅读全文 »

golang 中 channel 的详细使用、使用注意事项及死锁分析

时间: 2022-09-29   |   分类: go     |   阅读: 4639 字 ~10分钟

golang 中 channel 的详细使用、使用注意事项及死锁分析

什么是 channel 管道#

它是一个数据管道,可以往里面写数据,从里面读数据。

channel 是 goroutine 之间数据通信桥梁,而且是线程安全的。

阅读全文 »

Copy a slice in Go

时间: 2022-09-29   |   分类: go     |   阅读: 384 字 ~1分钟

To duplicate a slice in Go, getting a deep copy of its contents, you need to either use the built-in copy() function, or create a new empty slice and add all the elements of the first slice to it using the append() function. Because of how slices are built in Go, assigning one slice to another only makes a shallow copy, and you should not use it if you want to clone the slice in a deep way.

阅读全文 »
28 29 30 31 32 33 34 35 36

日志
分类
标签
RSS 订阅
GitHub
© 2009 - 2025
粤ICP备2021068940号-1 粤公网安备44011302003059
0%