愿星光伴随你左右


  • 首页

  • 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

LRU原理和Redis的实现

时间: 2022-10-09   |   分类: algorithm     |   阅读: 2346 字 ~5分钟

很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 Redis 中如何实现 LRU。

我的第一反应是操作系统课程里学过,应该是内存不够的场景下,淘汰旧内容的策略。LRU … Least Recent Used,淘汰掉最不经常使用的。可以稍微多补充两句,因为计算机体系结构中,最大的最可靠的存储是硬盘,它容量很大,并且内容可以固化,但是访问速度很慢,所以需要把使用的内容载入内存中;内存速度很快,但是容量有限,并且断电后内容会丢失,并且为了进一步提升性能,还有CPU内部的 L1 Cache,L2 Cache等概念。因为速度越快的地方,它的单位成本越高,容量越小,新的内容不断被载入,旧的内容肯定要被淘汰,所以就有这样的使用背景。

阅读全文 »

将Git存储库从一个平台fork到另外一个平台

时间: 2022-10-08   |   分类: git   运维     |   阅读: 296 字 ~1分钟

从github到github

打开你想fork的项目界面,点击fork按钮即可将此项目fork到你的github账户上;

在不同的平台之间fork

  • 在平台B上新建一个空的仓库 eg:git@github.com:shankusu2017/uhttpd-openwrt.git,并 clone 到本机上;
  • 在本机上将新创建的仓库的"上游"设置为你原本想 fork 的地址 eg:git remote add upstream https://git.openwrt.org/project/uhttpd.git
  • 将平台A的上游代码同步到本机上 git pull upstream master
  • 将本机上最新的代码提交到自己的平台B仓库中 git push origin master

同步上游的tags

  • 拉取上游平台A上的的tags: git fetch upstream
  • 提交到自己的平台B上 git push –tags

以上内容转载自网友的blog,如有侵权请联系站长

阅读全文 »

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   |   分类: 算法     |   阅读: 1939 字 ~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呢?它又是是如何解决这个问题的呢?

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

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