- 博客(62)
- 收藏
- 关注
原创 CPU中也应用到了缓存:CPU3层高速缓存,以及它的缓存一致性问题、MESI协议和Java的一些应用
从缓存的作用——协调两端的性能差说起,虽然着重讨论的是CPU的高速缓存的形式和作用,但其实大部分缓存都可以应用这个逻辑:解决性能差、产生一致性问题。而MESI协议的状态机其实也可以理解为一种加锁机制,锁就是「独占」状态。最后,MESI也不是完美的,还需要考虑性能和数据一致性之间的问题。此外还扩展了Java的一些特性,包括如何绑核来提升性能、关键字禁止指令重排序的作用。
2024-09-26 15:34:24 657
原创 go-gin响应被覆盖为400,即使正常返回
gin框架,因为在json unmarshal的时候有一个字段出错了,但是其他字段是可以正常使用的,而后面的业务逻辑中又没有使用这个没成功反序列化的字段,所以响应一直都是正常的。一个正常响应里,http状态码为400,但实际已经成功返回了数据,且无论是自己写的业务逻辑代码还是中间件都没有返回400(bad request)这个状态码。一般情况下,是要拒绝非法请求体的,还是要前端传一个合法的请求体,所以就继续用BindJSON,然后如果出错返回400 bad request就好了。
2024-09-04 18:26:08 797
原创 Go语言多态实践以及gin框架c.BindJSON序列化遇到的坑
因为以后可能会扩展出更多类型的工程,所以考虑用多态来实现对工程子参数的处理,这样以后新增工程类型只需要新类型实现TypePara接口即可,尽量减少对主干代码的修改。另外解释下为啥要继续处理成json,因为存入数据库的json字段类型是datatypes.JSON 而请求解析过来的是json.RawMessage,这两个类型不能直接赋值。最后的实现方式:对于前端传过来的请求体,先用一个TypeParaJSON字段,json.RawMessge类型来接收,此时再通过c.BindJSON接收。
2024-09-04 18:24:58 1093
原创 yapi容器化docker部署以及mongodb容器的持久化挂载异常问题
通过docker形式部署yapi,需要准备一个mongodb,然后直接在一个空文件夹里写好Dockerfile,其中通过wget下载yapi的zip包。基本按照这篇文章:https://www.modb.pro/db/149666 来处理即可。
2023-08-01 14:43:58 1308
原创 刷题笔记:二叉树剪枝(递归,迭代)
注意在遍历完某一节点的左子树之后,我们会遍历其右子树,此时要标记这个节点我们已经访问完左子树了,否则会一直循环访问其右子树。当左子树为空且右子树为空且本身值为0时,删除该节点(删除的方式就是返回nil)居然官方也没给出什么其他解法。那么就用显式的栈来实现一下吧。遇到这种问题果然第一反应还是递归,算是比较简单暴力的解法。...
2022-07-20 23:00:27 486
原创 URL查询参数编码问题(golang)
主要是后端有个转发请求的功能,对另一个服务请求时url query参数有乱码(字符编码),导致另一个服务响应500.前端传入的是json后端解析json并且转为query params 发起http request。这里对传入params的value的类型断言:打印显示:对应的query url就会是:因为中的fmt设置为了’E’,在这个函数里可以看到说明:所以将E换为f,表示不使用指数形式,就可以获得正确的page值了...
2022-06-24 14:10:37 478
原创 golang eshook 自定义elastic client 使用https连接es
因为es从http升级到https了,所以需要修改golang程序里的log钩子,在新建elastic client时设置为https官方给出的方法见:https://github.com/olivere/elastic/issues/738elastic包使用的是默认的httpclient 需要传入自定义的httpclient主要是设置http.client的 字段......
2022-06-21 12:00:46 940
原创 linkerd服务网格调研笔记
简介Linkerd是一个k8s的服务网格,通过提供运行时调试、可观察性、可靠性和安全性来保证更简单安全地运行服务。这些功能都不需要对你的代码进行修改。什么是服务网格?服务网格是一个专注于处理服务间通信的基础设施层,是应用开发和交付问题的解决方案。从架构上来看,它就是一束用户空间代理,位置卡在了服务的"next",额外的会有一组管理进程。那些用户空间代理被称为服务网格的data plane,那些管理进程成为了服务网格的control plane。数据层拦截服务之间的调用并且使用这些调用来做一些事
2022-02-11 16:37:19 2334 1
原创 使用gitbook时graceful-fs报错:TypeError: cb.apply is not a function的解决方案
查看gitbook版本gitbook -V报错:/usr/local/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287 if (cb) cb.apply(this, arguments) ^TypeError: cb.apply is not a function at /usr/local/lib/node_modules
2022-02-11 16:25:11 1224
原创 golang for range遍历并赋值给字典后出现所有值相同的问题
for range遍历并赋值给字典后出现所有值相同的问题先看这段(非常经典的)错误示例:(为了方便用json包打印输出结构体,我使用了大写字母开头的导出字段)m := make(map[string]*student)stus := []student{ {Name: "名字1", Age: 1}, {Name: "名字2", Age: 2}, {Name: "名字3", Age: 3},}for _, stu := range stus { m[stu.Name]
2021-12-20 01:39:07 1058
原创 LVS负载均衡调度原理及配置方法
Ref参考写在前面,基本都是把需要的重点用自己的话摘抄下来方便自己以后看懂,原文写的更好。https://www.kancloud.cn/noahs/linux/1540462http://www.linuxvirtualserver.org/zh/lvs3.htmlLVS负载均衡Linux Virtual Server LVS是一个虚拟的服务器集群系统,可以实现负载均衡。当并发超过了Nginx上限(目前1000-2000w PV或并发请求1w以下可以使用Nginx)可以考虑LVS。LVS已集
2021-11-04 17:02:23 189
原创 将flask项目部署在k8s遇到的坑
name 'reload' is not defined原因是用的python2的写法,但python3执行将reload(sys) sys.setdefaultencoding('utf-8')改为import importlibimportlib.reload(sys)报错'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)加入import codecssys.std
2021-09-03 15:10:27 478
原创 flask项目celery使用redis sentinel中遇到的坑
flask项目celery中报错Can’t reconnect until invalid transaction is rolled back发现是celery的程序中有一处db.session.commit()没有处理异常,添加try except和db.session.rollback()之后修复。
2021-09-01 12:26:57 1630 1
原创 2020-08-30问题解决思路与方案:后端传前端JSON(cookie)加双引号问题、令牌无限过期,MAC时间校准
利用set_cookie,后端向前端传json数据时,字符串会加上双引号参考https://blog.csdn.net/chinabestchina/article/details/80905750同样也是设置了一个邮箱地址,然后发现形如"abc"的字符串不会加双引号,但邮箱地址会加。原因是目前大多数浏览器所使用的cookie,对于特殊字符如@,是不兼容的,会自动加上双引号。解决方案有两种:方法1:读取cookie时,将双引号去掉;方法2:在设置cookie值时,先编码encode,读取值时,则相
2021-08-31 10:16:21 767
原创 Prometheus Operator使用指南笔记
本篇博文主要是翻译User Guide of Prometheus Operator并记录笔记从 v0.39.0 开始,Prometheus Operator 需要使用 Kubernetes v1.16.x 及更高版本。概念简介Operator 是一种可以操作其他软件的软件,就是将人所收集的操作经验转化为软件。Prometheus Operator旨在尽可能简单地在Kubernetes上运行Prometheus,同时保持K8s原生配置选项。manifest举例先决条件:一个可以访问的k8s
2021-08-19 23:10:11 1079
原创 unable to resolve docker endpoint: default orchestrator is kubernetes but unable to resolve
unable to resolve docker endpoint: default orchestrator is kubernetes but unable to resolve kubernetes endpoint: invalid configuration: no configuration has been provided查看docker desktop关闭Deploy Docker Stacks to Kubernetes by default选项来源:https://stackov
2021-08-17 18:30:36 542
原创 docker启动nginx及问题处理
情景:前后端联调,都部署在本地,需要nginx来进行转发docker pull nginx拉取nginx镜像准备好nginx.confserver { listen 80; # 注意这个是容器的端口,要跟docker run命令中-p xx:yy中的yy一样,xx是宿主机的端口,注意不要有冲突 charset utf-8; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
2021-08-12 11:41:38 456
原创 Flask项目中创建数据库表db.create_all()
Flask项目部署时需要按照database中定义好的模型类来创建数据表。直接在database.py中写db.create_all()不起作用,报错:... from app import db, loggerModuleNotFoundError: No module named 'app'搜索了很久没有成功地在单独的文件(database.py)中执行db.create_all(),所以先在__init__.py写了创建的语句,注意要写在最后import database的后面才起作用。f
2021-08-10 21:30:20 3768
原创 APISIX的源码安装与使用
参考官方文档 安装APISIX安装mkdir apisix-2.7wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgztar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7# 记得下载好运行时需要的lua库cd apisix-2.7make deps启动# 先写好配置文件nginx.conf并启动etcd$ make init# start APISIX
2021-07-05 16:09:06 1205
原创 比较临时的修改node_modules内包的源码并编译引用 修改依赖包
开发时的一个测试用需求,所以只是在本地修改了node_modules里某个包的源码。只限本地git clone 包到node_modules里修改源码重新编译包 npm install -s + npm run build在整个项目的目录下package.json手动向dependencies加入该包和版本项目根目录,npm install -s+npm run serve查看效果这个方法不是很好,package.json的添加本来非常严谨。如果是实际应用需求还请查阅别的文章。...
2021-05-28 17:07:53 1428
原创 《Kubernetes in Action》第二章笔记
容器实现隔离机制namspace 单独的系统视图(文件、进程、网络接口、主机名)cgroups 隔离资源(CPU、内存、网络带宽等)虚拟机相较容器的优势内核。虚拟机运行在自己的内核上;容器调用同一个内核,会有安全隐患。执行docker run <image>本机是否已存在该镜像如果不存在则拉取基于镜像创建容器在容器里运行docker run 指定的命令输出后进程终止,容器停止运行docker run busybox echo "Hello world"(这里的he
2021-05-08 12:25:51 859 1
原创 mac上安装apisix(源码安装)
mac上安装apisix(源码安装)获取源码包wget https://downloads.apache.org/apisix/2.2/apache-apisix-2.2-src.tgz并解压安装依赖make deps这一步中提示需要openresty,brew tap openresty/brew+brew install openresty如果直接install会显示找不到No formulae found in taps.又遇到问题Failed to download resource "
2021-02-04 11:35:49 1919
原创 Day14=前端+HTML+CSS
HTML 超文本标记语言标记语言 .html .htm 由一个个标签组成HTML5标准(在头部写明)<!doctype html> anchor 超链接或锚->是否描述了href属性<meta name="viewport" content="width=device-width, initial-scale=1.0">屏幕设定标题 h1~h6下划线u 加粗b 斜体i 强调加粗strong 强调斜体em(强调针对搜索引擎)引用cite 下标sub 删除线del
2021-02-03 21:16:25 140
原创 华为云服务器arm64上安装etcd与apisix-dashboard(未成功,卡在build时yarn install报错/wget返回异常值)
环境华为云服务器 CentOS8 with armetcdref:etcd软件移植centos7.6-arm从github上下载etcd的arm64的tar包(注意修改为需要的版本) wget https://github.com/etcd-io/etcd/releases/download/v3.4.0/etcd-v3.4.0-linux-arm64.tar.gz解压 tar -xzvf etcd-v3.4.0-linux-arm64.tar.gz 或者指定解压目录cd到该目录ls可以看到
2021-02-03 21:12:50 2104
原创 转行自学的2021秋招面经汇总(Java开发/运维开发)
个人情况211计算机硕 本科材料 计算机基础知识很差(四大金刚完全没学过) 考研纯粹为了混计算机学历 自学半年Java 国企实习经历 无Java项目经验 最后拿了小米的运维开发offer面试题答案待施工。。。Java开发金山云(四面通过)一面HashMap底层实现,扩容机制,如果移除元素,红黑树会不会转回链表?锁,轻量级锁,自旋锁的代码举例实现手撕代码,从一些题中选2道遍历树(我选了这个保底,他问是不是因为这个简单,被发现了=。=然后就让我说了说遍历思路。我说完之后我说可能没有这么简单
2021-02-01 20:06:49 874
原创 Day12=枚举+注解+反射+类加载器+双亲委派+如何加载配置文件+class对象+反射获取注解+内省
枚举(记忆中可以阻止反射破坏单例模式?)定义多个常量(public static final)并分组管理。举例:Thread.state,有六种状态,每个都是该类对象枚举定义public enum Level{ LOW(1),MID(50),HIGH(100);//描述完毕 private int levelVal; private Level(int levelVal){ this.levelval = levelVal; } }或者:public enum Level{
2021-01-31 21:13:59 130
原创 Java核心类库学习总结-测试题
数组Array和列表ArrayList有什么区别?数组是在声明时就定义好长度的,这个长度不能变化。列表可以动态扩容(*1.5),可以不断添加元素。数组可以包含基本数据类型,ArrayList只能包含对象类型ArrayList有更多方法和特性,如迭代器数组只能存放同种类型的元素,ArrayList可以存Object,所以可以不同类型ArrayList和Vector的区别Vecotr是线程安全的,ArrayList是线程不安全的。Vector的迭代器是快速失败的。如果Vector对象创建时
2021-01-30 14:44:18 115
原创 Day11=xml语法+DOM4J解析XML+从url获取xml资源并解析+生成XML+JSON
XML可扩展标记语言Extensible markup language平台无关性,独立的标记语言自我描述性,可以由不同语言解析用途:网络数据传输数据存储配置文件存储数据:.xml文件方式内存中构建xml数据xml语法格式自我描述 xml文档声明第一行 <?xml version="1.0" encoding="UTF-8"?>2 标记(元素/标签/节点)xml文档由标记组成开始标记(开放标记):<name>结束标记(闭合标记):</
2021-01-30 13:36:48 226
原创 Day10=单元测试juit+断点debug+快捷键
junit引入jar包新建文件夹并Mark Directory as Test Sources Root对于任意类,按下shift ctrl t 创建测试类选择要测试的方法和版本junit4测试类创建完毕,编写测试代码。debug 断点调试竖排按钮:重新执行、往下继续执行走到下一次断点、暂停、停止、断点、屏蔽所有断点可以在variables里点+号加代码,眼镜时分栏右键断点可以加条件横排:把光标移到当前运行代码的位置,f8单步跳过向下一行代码运行,蓝色单步跳入如果是方法就进入方法往下
2021-01-30 10:33:27 266 1
原创 Day09=java网络编程和多次c/s通信交换数据遇到的问题(无法继续)
计算机在互联网中以IP地址标识内网ip (大多设置为192.168)公网ip 运营商提供一条线路连过来本机ip:127.0.0.1 localhost 可以在完全不联网的情况下使用端口号,传递给确定的进程端口号是计算机中的应用程序的标识,0-65535之间,应用程序可以占1个也可以占多个。应尽量避免使用0-1024之间的,已经被知名的软件或windows操作系统占用。通信协议交流的标准。对数据的传输速率传入接口步骤控制出错控制等,指定的标准,通信双方必须同时遵守才能完成数据交换
2021-01-30 00:28:18 123
原创 Day09=java网络Socket
计算机在互联网中以IP地址标识内网ip (大多设置为192.168)公网ip 运营商提供一条线路连过来本机ip:127.0.0.1 localhost 可以在完全不联网的情况下使用端口号,传递给确定的进程端口号是计算机中的应用程序的标识,0-65535之间,应用程序可以占1个也可以占多个。应尽量避免使用0-1024之间的,已经被知名的软件或windows操作系统占用。通信协议交流的标准。对数据的传输速率传入接口步骤控制出错控制等,指定的标准,通信双方必须同时遵守才能完成数据交换
2021-01-29 12:00:51 96
原创 Day08=线程与进程+线程调度+线程启动方法+线程安全问题+同步&锁+线程状态+多线程通信+线程池
线程与进程的区别(面试常考)本质进程是内存中运行的应用程序线程是进程的执行路径,每个进程必须至少一个线程内存空间进程拥有独立内存空间线程共享进程的内存空间,线程私有程序计数器,虚拟机栈,本地方法栈切换进程切换要保存、还原上下文,比较慢线程切换较快线程调度有以下几种方法分时调度所有线程轮流获得CPU使用权,平均分配每个线程占用CPU的时间(时间片)抢占式调度优先级高的线程使用CPU,如果优先级相同就随机,java使用的也是抢占式调度。CPU使用抢
2021-01-28 17:22:51 115
原创 Day07=IO+字符流字节流+Properties配置文件+序列化与反序列化
io读取和写出 in+outFile文件和目录路径名。描述文件的对象。File file = new File(path);通过路径来创建文件对象。createNewFile();不存在时创建新文件File也可以作为路径。dir.mkdir()不存在时创建文件夹。构造方法的第二种形式:父目录new File(c://haha,b.txt);删除:o.delete()listFiles()获取所有文件,返回数组分隔路径,适配不同系统File.pathSeparator路径分隔符File.
2021-01-28 11:50:39 160
原创 Day06=泛型+常用类库+String+工具类+日期重点
Objects工具类equals()如果string1和string2是传参,在判断相等时如果有null,则会出现空指针异常。用空的东西去调方法是不行的。可以在类里覆写equals,添加判空操作。@Ovveridepublic boolean equals(Object o){ if(this == o) return true; //如果为空或者是获取类不一致(不一致就没法强制转换) if(o == null || getClass()!=o.getClass()) re
2021-01-27 04:28:41 108
原创 Day07 java类集 :Collection的list和set Map
类集java.util.*顶级接口 :Collection Map Ilerator类集是java对数据结构的成熟实现,不用自己再去写了。数组和链表的区别 (面试常考)数组存取(按下标查找)速度快,链表很慢数组需要事先知道长度,链表不需要数组空间通常有限制,需要大块连续内存块,链表是离散分配节点的,通过指针相连,空间无限制链表插入删除元素很快,无需移动链表的特点,只有一个前驱,只有一个后继二叉树先序遍历:根左右中序遍历:左根右后序遍历:左右根待补充:遍历顺序在算法题解题中有
2021-01-26 15:29:29 87
原创 Day05=Java异常处理+快递柜小程序的MVC架构
异常?导致程序中断的指令流。异常给出线程,程序流的路径,灰色的文件是来自依赖库,可以不看,主要是蓝色的是自己写的代码。从上往下看第一个蓝色。异常类Exception对错误操作创建了对象,如果没有处理异常,会把异常返回main方法,抛给调用的方法名(JVM虚拟机),处理方案是中断程序。捕获异常->拦截掉,在try{}catch块里处理try{ //可能出现问题}catch (异常类型1 异常对象1){ //异常处理}catch (异常类型2 异常对象2){ //异常处理}...
2021-01-23 14:44:41 129
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人