kafka面试,提升开发效率N倍的20,2024年大厂程序员进阶宝典

  • -e 多个命令叠加

  • -i 修改原文件(Mac下加参数 “”,备份)

  • 示例

➜ Documents$ cat file2

one 1

two 2

three 3

one1 4

➜ Documents$ sed “2,3d” file2

one 1

one1 4

➜ Documents$ sed ‘/one/d’ file2

two 2

three 3

➜ Documents$ sed ‘s/one/111/g’ file2

111 1

two 2

three 3

1111 4

#将one替换成111 并将含有two的行删除

➜ Documents$ sed -e ‘s/one/111/g’ -e ‘/two/d’ file2

111 1

three 3

1111 4

()标记(转义), \1 引用

➜ Documents$ sed ‘s/([0-9])/\1.html/g’ file2

one 1.html

two 2.html

three 3.html

one1.html 4.html

与上面一样 & 标记匹配的字符

➜ Documents$ sed ‘s/[0-9]/&.html/g’ file2

one 1.html

two 2.html

three 3.html

one1.html 4.html

➜ Documents$ cat mobile.csv

“13090246026”

“18020278026”

“18520261021”

“13110221022”

➜ Documents$ sed ‘s/([0-9]{3})[0-9]{4}/\1xxxx/g’ mobile.csv

“130xxxx6026”

“180xxxx8026”

“185xxxx1021”

“131xxxx1022”

awk

  • 基本参数和语法

  • NR 行号, NF 列数量

  • $1 第1列, $2, $3

  • -F fs fs分隔符,字符串或正则

  • 语法: awk 'BEGIN{ commands } pattern{ commands } END{ commands }', 流程如下:

  1. 执行begin

  2. 对输入每一行执行 pattern{ commands }, pattern 可以是 正则/reg exp/, 关系运算等

  3. 处理完毕, 执行 end

  • 示例

➜ Documents$ cat file5

11 11 aa cc

22 22 bb

33 33 d

11 11

11 11

#行号, 列数量, 第3列

➜ Documents$ awk ‘{print NR"(“NF”):", $3}’ file5

1(4): aa

2(3): bb

3(3): d

4(2):

5(2):

#字符串分割, 打印1,2列

➜ Documents$ awk -F"xxxx" ‘{print $1, $2}’ mobile.csv

“130 6026”

“180 8026”

“185 1021”

“131 1022”

#添加表达式

➜ Documents$ awk ‘$1>=22 {print NR":", $3}’ file5

2: bb

3: d

#累加1到36,奇数,偶数

➜ Documents$ seq 36 | awk ‘BEGIN{sum=0; print “question:”} {print $1" +"; sum+=$1} END{print “=”; print sum}’ | xargs | sed ‘s/+ =/=/’

question: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 = 666

➜ Documents$ seq 36 | awk ‘BEGIN{sum=0; print “question:”} $1 % 2 ==1 {print $1" +"; sum+=$1} END{print “=”; print sum}’ | xargs | sed ‘s/+ =/=/’

question: 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21 + 23 + 25 + 27 + 29 + 31 + 33 + 35 = 324

➜ Documents$ seq 36 | awk ‘BEGIN{sum=0; print “question:”} $1 % 2 !=1 {print $1" +"; sum+=$1} END{print “=”; print sum}’ | xargs | sed ‘s/+ =/=/’

question: 2 + 4 + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 + 22 + 24 + 26 + 28 + 30 + 32 + 34 + 36 = 342

其他高级语法:for, while 等, 各种函数等,本身awk是一个强大的语言,可以掌握一些基本的用法。

实际应用


日志统计分析

例如拿到一个nginx日志文件,可以做很多事情,比如看哪些请求是耗时最久的进而进行优化,比如看每小时的"PV"数 等等。

➜ Documents$ head -n5 std.nginx.log

106.38.187.225 - - [20/Feb/2017:03:31:01 +0800] www.tanglei.name “GET /baike/208344.html HTTP/1.0” 301 486 “-” “Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) 360JK yunjiankong 975382” “106.38.187.225, 106.38.187.225” - 0.000

106.38.187.225 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name “GET /baike/208344.html HTTP/1.0” 301 486 “-” “Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) 360JK yunjiankong 975382” “106.38.187.225, 106.38.187.225” - 0.000

10.130.64.143 - - [20/Feb/2017:03:31:02 +0800] stdbaike.bdp.cc “POST /baike/wp-cron.php?doing_wp_cron=1487532662.2058920860290527343750 HTTP/1.1” 200 182 “-” “WordPress/4.5.6; http://www.tanglei.name/baike” “10.130.64.143” 0.205 0.205

10.130.64.143 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name “GET /external/api/login-status HTTP/1.0” 200 478 “-” “-” “10.130.64.143” 0.003 0.004

10.130.64.143 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name “GET /content_util/authorcontents?count=5&offset=0&israndom=1&author=9 HTTP/1.0” 200 11972 “-” “-” “10.130.64.143” 0.013 0.013

上面是nginx的一个案例, 例如希望找到top 10 请求的path:

head -n 10000 std.nginx.log | awk ‘{print $8 ", " $10}’ | grep ‘,404’ | sort | uniq -c | sort -nr -k1 | head -n 10

#or

head -n 10000 std.nginx.log | awk ‘$10==404 {print $8}’ |sort | uniq -c | sort -nr -k1 | head -n 10

当然,你可能一次不会直接处理成功,一般会先少拿一部分数据进行处理看逻辑是否正常, 或者你可以缓存一些中间结果.

cat std.nginx.log | awk ‘{print $8 “,” $10}’ | grep ‘,404’ >404.log

sort 404.log | uniq -c | sort -nr -k1 | head -n 10

再比如每小时请求数量,请求耗时等等

➜ Documents$ head -n 100000 std.nginx.log | awk -F: ‘{print $1 $2}’ | cut -f3 -d/ | uniq -c

8237 201703

15051 201704

16083 201705

18561 201706

22723 201707

19345 201708

其他实际案例 ip block

案例: db数据订正

背景: 因为某服务bug,导致插入到db的图片路径不对,需要将形如(安全需要已经将敏感数据替换) https://www.tanglei.name/upload/photos/129630//internal-public/shangtongdai/2017-02-19-abcdefg-eb85-4c24-883e-hijklmn.jpg 替换成 http://www.tanglei.me/internal-public/shangtongdai/2017-02-19-abcdefg-eb85-4c24-883e-hijklmn.jpg,因为mysql等db貌似不支持直接正则的替换,所以不能够很方便的进行写sql进行替换(就算支持,直接改也有风险的,还是先备份再修改留个“后悔药”)。

当然将数据导出,然后写 python 等脚本处理也是一种解决方案,但如果用上面的命令行处理,只需要几十秒即可完成。

步骤:

  1. 准备数据

select id, photo_url_1, photo_url_2, photo_url_3 from somedb.sometable where

photo_url_1 like ‘https://www.tanglei.name/upload/photos/%//internal-public/%’ or

photo_url_2 like ‘https://www.tanglei.name/upload/photos/%//internal-public/%’ or

photo_url_3 like ‘https://www.tanglei.name/upload/photos/%//internal-public/%’;

  1. 替换原文件 一般在用sed替换的时候,先测试一下是否正常替换。

#测试是否OK

head -n 5 customers.csv | sed ‘s|https://www.tanglei.name/upload/photos/[0-9]{1,}/|http://www.tanglei.me|g’

直接替换原文件, 可以sed -i “.bak” 替换时保留原始备份文件

sed -i “” ‘s|https://www.tanglei.name/upload/photos/[0-9]{1,}/|http://www.tanglei.me|g’ customers.csv

  1. 拼接sql, 然后执行

awk -F, ‘{print "update sometable set photo_url_1 = " $2, ", photo_url_2 = " $3, ", photo_url_3 = " $4, " where id = " $1 “;” }’ customers.csv > customer.sql

#然后执行sql 即可

其他

  • play framework session

老方式: 需要启play环境,慢。新方式直接命令行解决。

sbt “project site” consoleQuick

import play.api.libs._

val sec = “secret…secret”

var uid = “10086”

Crypto.sign(s"uid= u i d " , s e c . g e t B y t e s ( " U T F − 8 " ) ) + s " − u i d = uid", sec.getBytes("UTF-8")) + s"-uid= uid"sec.getBytes("UTF8"))+s"uid=uid"

➜ Documents$ ~/stdcookie.sh 97522

918xxxxdf64abcfcxxxxc465xx7554dxxxx21e-uid=97522

➜ Documents$ cat ~/stdcookie.sh

#!/bin/bash ## cannot remove this line

uid=$1

hash=echo -n "uid=$uid" | openssl dgst -sha1 -hmac "secret...secret"

echo “ h a s h − u i d = hash-uid= hashuid=uid”

  • 统计文章单词频率: 下面案例统计了川普就职演讲原文中词频最高的10个词。

➜ Documents$ head -n3 chuanpu.txt

Chief Justice Roberts, President Carter, President Clinton, President Bush, President Obama, fellow Americans and people of the world, thank you.

We, the citizens of America, are now joined in a great national effort to rebuild our country and restore its promise for all of our people. Together we will determine the course of America and the world for many, many years to come.

➜ Documents$ cat chuanpu.txt | tr -dc 'a-zA-Z ’ | xargs -n 1 | sort | uniq -c | sort -nr -k1 | head -n 20

65 the

63 and

48 of

46 our

42 will

37 to

21 We

20 is

18 we

17 America

15 a

14 all

13 in

13 for

13 be

13 are

10 your

10 not

10 And

10 American

  • 随机数:比如常常新注册一个网站,随机生成一个密码之类的。

➜ Documents$ cat /dev/urandom | LC_CTYPE=C tr -dc ‘a-zA-Z0-9’ | fold -w 32 | head -n 5

cpBnvC0niwTybSSJhUUiZwIz6ykJxBvu

VDP56NlHnugAt2yDySAB9HU2Nd0LlYCW

0WEDzpjPop32T5STvR6K6SfZMyT6KvAI

a9xBwBat7tJVaad279fOPdA9fEuDEqUd

hTLrOiTH5FNP2nU3uflsjPUXJmfleI5c

➜ Documents$ cat /dev/urandom | head -c32 | base64

WoCqUye9mSXI/WhHODHDjzLaSb09xrOtbrJagG7Kfqc=

  • 图片处理压缩,可批量改图片大小等等 sips

➜ linux-shell-more-effiency$ sips -g all which-whereis.png

/Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png

pixelWidth: 280

pixelHeight: 81

typeIdentifier: public.png

format: png

formatOptions: default

dpiWidth: 72.000

dpiHeight: 72.000

samplesPerPixel: 4

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

Spring全套教学资料

Spring是Java程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!目前99%的公司使用了Spring,大家可以去各大招聘网站看一下,Spring算是必备技能,所以一定要掌握。

目录:

部分内容:

Spring源码

  • 第一部分 Spring 概述
  • 第二部分 核心思想
  • 第三部分 手写实现 IoC 和 AOP(自定义Spring框架)
  • 第四部分 Spring IOC 高级应用
    基础特性
    高级特性
  • 第五部分 Spring IOC源码深度剖析
    设计优雅
    设计模式
    注意:原则、方法和技巧
  • 第六部分 Spring AOP 应用
    声明事务控制
  • 第七部分 Spring AOP源码深度剖析
    必要的笔记、必要的图、通俗易懂的语言化解知识难点

脚手框架:SpringBoot技术

它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。

Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。

  • SpringBoot入门
  • 配置文件
  • 日志
  • Web开发
  • Docker
  • SpringBoot与数据访问
  • 启动配置原理
  • 自定义starter

微服务架构:Spring Cloud Alibaba

同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

  • 微服务架构介绍
  • Spring Cloud Alibaba介绍
  • 微服务环境搭建
  • 服务治理
  • 服务容错
  • 服务网关
  • 链路追踪
  • ZipKin集成及数据持久化
  • 消息驱动
  • 短信服务
  • Nacos Confifig—服务配置
  • Seata—分布式事务
  • Dubbo—rpc通信

Spring MVC

目录:

部分内容:

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

外链图片转存中…(img-6Ni9mgPJ-1712447300334)]

[外链图片转存中…(img-3kguZ5Hl-1712447300335)]

Spring MVC

目录:

[外链图片转存中…(img-FCLBEeVO-1712447300335)]

[外链图片转存中…(img-AciooTIT-1712447300335)]

[外链图片转存中…(img-nQeZrPIv-1712447300336)]

部分内容:

[外链图片转存中…(img-FuRtg0FB-1712447300336)]

[外链图片转存中…(img-ScdCW0DL-1712447300336)]

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值