自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(169)
  • 收藏
  • 关注

原创 Ubuntu 18.04 安装 CMake v3.17.5

之所以不装最新版的,是因为最近用 clion,想搞个 remote toolchain,但是只支持到 3.17.x,所以就装个 3.17 里最新的。只是让我比较意外的是,装这玩意都能有坑……其实安装方法网站上已经说得挺清楚了,这是从源码编译的方法,进入源码根目录,然后:./bootstrap && make && sudo make install主要是我对预编译的二进制文件失去了信任,还是得自己上手编译一下才能放心,所以就用了这种方式。但是这么安装有个问题,他会默认

2020-12-10 22:46:46 39

原创 随便谈谈 HTTP 的 201 204 205 状态码

最近在给某个组设计一套基于 REST 的接口规范,重温了一遍 HTTP 的状态码,然后发现了几个很有点模糊的状态码,稍微想了想,略有所得,就拿出来随便谈谈。其实纠结 HTTP 状态码的含义是很有点学院派的意思的,就我的观察,大部分人成功就是 200,出了错就是 500,顶多自己封装一个返回值,加点报错信息啥的;而且在大型组织里很可能还会有组织内的自定义错误码,直接结果就是弱化了 HTTP 状态码的语义:反正我只需要知道调用是否成功,自然会有其他信息来具体描述调用过程。自定义错误码倒还好,封装返回值其实就

2020-11-23 19:25:59 140

原创 在 spring cloud config server 中使用 ssh 连接 git 仓库

最近没怎么写博客,短期内可能也不怎么写了,主要是因为改行了,我也没想到有一天会去做科研。等这个微服务项目结束后,我可能就会暂时告别业务开发;思之不免有些唏嘘。也许我可以在这里记录我的科研心得。但是科研笔记这种东西,也不是我藏私,实在是不知道从何写起,零零碎碎的一些感想,拿出来分享也没啥用,不能落地的想法也就是想法罢了;而能落地的想法全部都体现在论文里了。他日我若有幸发表论文,将在此敬告诸君,分享我的快乐。因为用 username 和 password 连接git仓库的方式不是很好(主要是经常会不小心

2020-11-14 21:09:58 87

原创 display:inline 真的兼容所有的浏览器吗?

CSS 的 display 属性于 1996 年的 CSS 1 规范中提出,所以支持 CSS 并且按照标准实现的浏览器都应当支持该属性。以下摘自W3C:Microsoft released Internet Explorer 3.0 on August 14, 1996. It is the first commercial browser that supports CSS.在此之前的商业浏览器不支持 CSS,也就谈不上对 display 属性的支持。所以,display:inline 不兼容

2020-10-19 09:42:15 145

原创 构建跨硬件架构(multi-arch)的docker镜像

有时候我们希望构建出来的镜像能够在不同硬件架构的机器上运行(主要是 arm 架构),这样能更好地应对异构的分布式环境的需求。在之前,通常的解决办法是准备多台不同硬件架构的机器,并且分别进行编译和分发工作,但是现在 docker 提供了一个新功能 buildx(虽然还是实验性的),能够很好地解决这个问题。关于 buildx 的介绍可以查阅相关资料,在此不再赘述。如果需要在本地运行,可以参考这篇文章:BUILDING DOCKER IMAGES FOR KUBERNETES RUNNING ON ARM。但是

2020-10-18 16:02:18 213

原创 docker运行容器报错standard_init_linux.go:211: exec user process caused “exec format error“的可能解决办法

这个问题主要是由不兼容引起的。主要包括几种不兼容:硬件架构不兼容。在 amd 和 arm 架构下构建的镜像很有可能不能互通。解决办法:针对不同的硬件架构构建不同的镜像,或者构建跨架构(multi-arch)的镜像。shell 执行不兼容。脚本可能是基于 bash 写的,不同的 shell 解释器存在不兼容的情况,而有些 Linux 发行版可能没有 bash,或者默认的 shell 解释器不是 bash。解决办法:在 shell 脚本的开头指定需要使用的解释器,比如#!/bin/bash,并且

2020-10-18 15:45:43 1158

原创 [LeetCode 19] 删除链表的倒数第N个结点

其实还算比较简单的一个题。链表往往会和双指针绑定在一起。因为链表这个数据结构的特点,并且链表长度未知,不太可能会有小于 O(n)O(n)O(n) 的解法出现。function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null { let slow = head, fast = head, last = null; while (n) { fast = fast!.next; --

2020-10-06 17:02:10 63

原创 HTML 元素的 id 真的不能为纯数字吗?

先说结论。这个问题的答案视 HTML 的版本而定:如果是 HTML 4,这个问题的答案是“是”;如果是 HTML 5,这个问题的答案是“否”。事实上,H5 规范并没有规定 id 不能为数字。以下摘自 H5 规范:There are no other restrictions on what form an ID can take; in particular, IDs can consist of just digits, start with a digit, start with an u

2020-10-02 20:47:13 300

原创 spring boot + feign + eureka部署后服务无法调用的可能解决办法

接着前面两篇继续。在本地部署运行正常之后,我把 eureka server 和 provider 部署到了服务器上。然后之前出现过的错误又再次出现了……按照顺序去排查,首先是网络不对,请求被发到了一个莫名其妙的网络上(参考之前 docker 莫名其妙把 hosts 改掉的事情),发现 eureka 默认会把请求发到服务的 hostname 上,这个行为有好有坏吧,在内网环境下或者有容器网络的情况下是好事,但是在现阶段的零零碎碎的公网 IP 直接调用的情况下就不是很好。所以改一下配置:eureka:

2020-09-30 20:11:38 93

原创 spring boot设置active profiles的一个小坑

传统的配置文件写法是 properties ,但可读性太差,所以最近换成了 yml,并且按照官方文档配置了 profiles,也就是类似于 application-prod.yml 这种不同运行环境下的配置文件。我一开始是这么运行的:java -jar dist.jar -Dspring.profiles.active=prod但是在运行的时候一直不行,总是启动默认的配置。后来看到文档上写的,应该这么运行:java -jar dist.jar --spring.profiles.active=pro

2020-09-30 12:13:15 129

原创 spring boot + feign + eureka报错Load balancer does not have available server for client的可能解决办法

接着上一篇。解决了上一个问题之后,好景不长,又报了一个新错误 Load balancer does not have available server for client。我看网上大部分都说是服务名称写错了,检查一下 feign 里的 name 写得对不对,但我确实没写错。后来发现,eureka 的配置是这样的:server: port: 8000eureka: client: register-with-eureka: false fetch-registry: fal

2020-09-30 00:09:07 205

原创 spring boot + feign + eureka报错java.net.SocketTimeoutException: connect timed out的可能解决办法

身为前端,这次被迫写后端,体验属实不好,到处踩坑。不过有啥办法呢……按照网上的教程配了一个 eureka server,一个 provider ,一个 consumer ,在 eureka 里看两个服务都活得挺好,然后直接调 provider 也能调通,但是从 consumer 里用 feign 调 provider 就是调不通,一直报错java.net.SocketTimeoutException: connect timed out。查了很多资料,一直不行,主要是这个报错也没啥指导意义。后来看到.

2020-09-29 23:27:39 120

转载 package.json中版本号前面~和^的区别

指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。波浪号(tilde):比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。插入号(caret):比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来.

2020-09-28 19:47:29 427

原创 前端做题家之JavaScript

最近精神状态不太好,没心思写博客。前段时间听说了牛客网,看到上面全是面试题,虽然并不打算找工作,但是做题家的属性觉醒了,就每天做点题玩一玩。虽然我一直自诩“语言律师”,但是看到这些刁钻的面试题,还是有点应付不过来……不过,今天已经把JS的技能值刷满了,稍微有点心得,想了想觉得还是写个博客,摘录一些我觉得比较有意思的题目。名义上是JS的题目,其实并不完全是,还是有一些别的领域的内容。如果不给cookie设置过期时间会怎么样?会在浏览器会话结束时过期。事实上,我还真没试过……不过我倒是想到了sess

2020-09-27 20:32:08 184

原创 Ubuntu 18.04 安装docker(简略版)

看一下芯片架构:uname -ax86amdarm(aarch)看一下系统版本:lsb_release -a根据不同的芯片架构和系统版本,配置国内Ubuntu源如果不介意网速慢,可以跳过这一步建议选择中科大源、清华源或者163源,因为华为云可能会对阿里源限速按照docker官方文档进行安装,记得选择正确的芯片架构参考链接:https://docs.docker.com/engine/install/ubuntu/如果出现类似于 Unable to locate ..

2020-09-11 23:59:15 515

原创 Ubuntu 18.04 无法安装docker报错 E: Unable to locate package docker-ce 的可能解决办法

用了个华为云的新服务器,首先是改了一下Ubuntu的镜像源,换了个中科大的(离得近),然后开始配环境。配环境的时候docker一直装不上,报错 E: Unable to locate package docker-ce 。然后看了一下安装过程,发现有这么一段报错:E: Failed to fetch https://mirrors.ustc.edu.cn/ubuntu/dists/bionic/main/binary-arm64/Packages 404 Not Found [IP: 218.104.

2020-09-11 21:33:33 308

原创 关于JavaScript中new运算符的一些理解

最近看到一道很有意思的面试题,问输出是多少:var name = "global";var obj = { name: "local", foo: function () { this.name = "foo"; }.bind(window)};var bar = new obj.foo();setTimeout(function () { console.log(window.name);}, 0);console.log(bar.name);var bar3 =

2020-09-09 22:09:41 99

原创 精读ECMAScript规范:全局对象

今天看到一个很有意思的问题:setTimeout是不是全局函数?这个问题,我第一反应是“是”,因为setTimeout是挂在window对象的一个方法(也就是window.setTimeout),而window是浏览器环境下的全局对象,所以setTimeout显然是全局函数。但是也有人说不是,因为方法(methods)和函数(functions)是两码事,全局函数应该是不通过任何对象即可调用的,而setTimeout是隐式的window.setTimeout调用。从这个角度来说,setTimeout应该

2020-09-09 20:07:29 118

原创 关于前端代码结构的一些思考

过了两天重新再读,有点语无伦次;不过确实我的真情实感。有一段时间没写博客了,简单谈谈最近对代码结构的一些思考。事实上,我总觉得这些问题有一点共性,但也并没有做过实证研究,所以也仅仅是我个人的感想罢了。两年之前接到第一个项目的时候,当时啥也不知道,就一通乱写,把所有的代码都放在一个包里;似乎把所有的代码都放在同一个包里会让人更有安全感。那个时候也不知道为啥,对模块化有一种奇怪的抵触,好像把代码分割之后就会失去对它的控制。一年多之前学软工二,那是我最沉迷OOP的时期。意识到模块化的好处之后,我急于将所有

2020-09-02 23:00:45 125

原创 记一次前端无法关闭的排障过程

晚上喝了半瓶酒,然后洗了个澡,正在贴地飞行的时候,被隔壁给拽到了地面上:他的前端关不掉了。我说怎么可能呢,啥症状?他说他把前端部署到80端口了,然后无论怎么搞都关不掉,重启了也没用。我说你看看80端口的进程,然后他熟练打出了netstat -ano | findstr 80,结果啥都没有……按理来说这时候就应该意识到问题所在了,但我不太清醒,就随口说了一句,那你把node杀掉呗。然后他找了半天,也没有node……我意识到不对了,我赶紧问他,你这不是dev模式?他说是在本地启了一个nginx,然后把打包

2020-08-19 19:48:45 184

翻译 YAML速成个人翻译

学习circle-ci的用法时,无意中在网上看到了这个教程,拜读英文版之后觉得实在不错,就动了翻译的心思。可惜的是,已经有了中文翻译。不过这个翻译让人实在不满意,于是我重新翻译了一遍,希望能像YAML一样,“让人类可写可读”。2020.07.27于家中YAML 是一种数据序列化语言,旨在让人类直接可写可读。它是 JSON 的严格超集,增加了在语法上有意义的(syntactically significant,参见译注1)换行符和缩进,就像Python一样。但和Python的不同之处在于,YAML不

2020-07-27 22:31:02 88

原创 vue-router URL里存在锚点导致不能再次跳转的可能解决办法

有时候我们会碰到这么一个场景:我们可能希望点击页面上的某个按钮,然后就会滚动到页面的某一块上,也就是所谓的“滚动到锚点”的功能。这个其实很好实现,vue-router的官方文档里已经给出了写法:const router = new VueRouter({ routes: [...], scrollBehavior (to, from, savedPosition) { if (to.hash) { return { selector: to.hash

2020-07-19 18:12:55 275

原创 deno报错error trying to connect: invalid dnsname的可能解决办法

最近比较喜欢用deno去运行ts代码,总感觉比ts-node利索。但是deno有个小问题,如果不用代理,因为deno的release是发布在aws上的,而且由于众所周知的原因,国内无法访问aws;而如果使用代理,就会一直报错:error: error sending request for url (https://github.com/denoland/deno/releases/latest): error trying to connect: invalid dnsname查了一下,有老外说把代

2020-07-18 19:42:04 405 4

原创 tkinter canvas + PIL渲染图片不显示的可能解决办法

这个问题的起因是想做一个文件选择器,选择图片之后用PIL缩放,然后渲染到tkinter的canvas里。然后我写了这么一段代码(为了简化这个问题,文件选择器改用写死的路径代替了):import tkinter as tkfrom PIL import Image, ImageTk# ...canvas_avatar = tk.Canvas(root, width=1800, height=1000) # root是整个窗口ele_avatar = canvas_avatar.create_ima

2020-07-13 21:33:09 181

原创 ImportError: cannot import name ‘deprecated‘ from ‘nltk.internals‘的可能解决办法

看到网上的文章说nltk做分词效果很好,甚至可以完成单词的时态转换,就想着体验一下。安装完了之后,我运行了这段代码:from nltk.stem.wordnet import WordNetLemmatizerwords = ['gave', 'went', 'going', 'dating', 'comes']for word in words: print(WordNetLemmatizer().lemmatize(word, 'v')) # 还原动词但是出现了报错:ImportEr

2020-07-09 18:38:17 365

原创 AttributeError: module ‘nltk‘ has no attribute ‘download‘的可能解决办法

在.py文件里直接运行nltk.download(),会报错:import nltknltk.download()环境是anaconda 3。后来看到有人说,不能在.py文件里直接运行,而应该在Jupiter Notebook或者命令行运行。所以,我用命令行试了一下:C:\Users\Administrator>pythonPython 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anacon

2020-07-09 18:19:55 514 3

原创 C++使用greater报错‘this‘ argument has type ‘const xxx‘, but method is not marked const的解决方案

使用STL的时候难免遇到需要自己定义排序函数的时候,这时候greater和less就能起到很大作用。但之前排序的对象都是基本类型(或者基本类型的容器),这次要给自定义类型排序,就遇到了问题。比如,我有这么一个场景,我想要给二维空间里的点做一个优先队列,从大到小排个序;所以我先定义一个Point类。因为需要进行大于的比较,所以我重载一个>运算符:class Point{ int val, x, y; Point(int val, int x, int y) : val(val),

2020-07-03 11:19:36 508

原创 在JavaScript / TypeScript中使用栈——几种栈的使用方法
原力计划

这里主要介绍几种栈本身的使用方法,不包括一些作为容器其他用法,比如进行DFS,用来保存中间结点等等;也不包括递归栈,虽然有时候也可以把使用递归方法看做使用了栈,但抠字眼没什么意思。此外,本文不会详细介绍语法,请读者担待。用数组实现栈这个并不属于正文,而且是很简单的内容,但是我觉得还是有必要在这里稍微提一下;看似很简单的东西也会有坑在里面。比如三合一问题,用一个数组实现三个有容量上限的栈:class TripleInOne { private data: number[] = []; priv

2020-07-01 22:46:27 228

原创 让我重新看看汉诺塔问题

汉诺塔可以说是一个非常经典的递归问题了,在很多书上也会把它作为递归的入门题,用来介绍递归的基本概念。故事的背景和问题的具体内容就不在这里介绍了,我觉得我并没有搞明白递归是怎么一回事,比起迭代,递归从头到脚都透露着一种神秘;虽然我想不到,但是递归的逻辑很清晰。这两者并不矛盾。抒情完毕,说正事。如何解决汉诺塔问题(在这里相当于是把A移到C,并且直接在C上修改)?很简单:function hanota(A: number[], B: number[], C: number[]): void { C.pu

2020-06-30 22:40:33 207

原创 [LeetCode 41] 用原数组保存信息

首先这题一个很明显的性质:缺少的那个整数一定在[1, n + 1](n为nums的长度)之间。为什么?假设这个数组是从1开始,然后依次递增并且不重复,全部填充时数组正好是[1, n],此时缺少的整数就是n + 1;然后前面替换掉哪个数,哪个数就是缺少的,在[1, n]之间。所以,可以想到一个很自然的解法,用一个数组来记录[1, n]之间哪个数已经出现过了,没出现的那个就是缺少的;如果全都出现了,那就是缺少了n + 1。这个解法我认为比哈希表还要自然:int firstMissingPositive(ve

2020-06-27 10:52:59 71

原创 在VuePress中添加Gitalk评论

本来博客是没有评论功能的,后来经imwxz提醒,觉得还是搞个评论区比较好,就花了几个小时弄了一下。中间遇到一些小问题,就稍微记录一下。在此之前,要先创建一个GitHub Application。里面Homepage URL和Authorization callback URL写上博客的域名,别的随便写。比如我的是这样:需要注意两点:域名结尾的/要加上,否则在后面使用时可能会出现重定向错误。在这里填的域名是博客的直接域名,否则在后面使用时也可能会出现重定向错误。啥意思呢,比如我的博客是基于

2020-06-25 17:43:14 252 2

原创 每天一个被拒小技巧——BigInt

LeetCode 67题题解。想必经典的模拟加法大家都会,所以看到这题的时候,我就知道一定会有人用BigInt;果然如此。但是那位并没有解释BigInt的相关内容,只是给出了答案,所以这里主要是介绍一下BigInt的内容。先来看写法:function addBinary(a: string, b: string): string { return (BigInt("0b" + a) + BigInt("0b" + b)).toString(2);}关于这个写法,可能存在三个疑问:为什么.

2020-06-23 17:57:45 166

原创 百度AI Studio配置并运行pytorch项目的体验

总之,体验我给7分(满分10分)。优点:GPU挺快的,当然这一点没有比较过,直观感受上还挺快的算力卡(GPU可用时长)给得跟不要钱似的,完全就是那种屠龙宝刀来就送的感觉,而且我这算力卡怎么越用越多……缺点:notebook里只能使用百度家的飞桨框架(虽然在命令行可以用其他框架,但不稳定)动不动掉线,一掉线装好的依赖就全没了……在网上看到一堆持久化的方法,但好像并没有用,我没有往持久化的目录里写数据的权限,也没法sudo。要是有什么好办法,请各位指教~~,然后我把评分改高一点~~。

2020-06-15 23:27:05 1392 4

原创 从爬楼梯简单谈谈执行性能

爬楼梯这个问题,其实思路是很明确的:爬到当前楼梯的方法数 = 爬到上一级楼梯(然后再爬一级,只有这一种选择)的方法数 + 爬到上两级楼梯(然后再爬两级,只有这一种选择)的方法数,也就是:f(x)=f(x−1)+f(x−2)f(x)=f(x-1)+f(x-2)f(x)=f(x−1)+f(x−2)这个其实是老生常谈了,它其实就是著名的斐波那契数列,可以循环或者递归求解,也可以用dp来剪枝,然后进一步对dp的数组进行优化(所谓的滚动数组),乃至矩阵快速幂、通项公式,或者更极端的直接打表(如果指定范围的话)

2020-06-13 11:13:58 103

原创 VSCode配置Code Runner + Deno直接运行ts代码

最近LeetCode的一些题目开始支持ts了,所以我就开始用ts做一些题目。事实上现在vscode对ts的支持已经相当不错了,包括语法高亮啥的。但是无论是什么编辑器(包括我最爱的WebStorm),都不能直接运行ts代码,这给本地调试带来了很大的不便。应该很多人知道vscode有个叫code runner的插件,可以很方便地去运行代码,然后他给的办法是去装一个ts-node的npm包,但我觉得没啥意思。正好一直听说deno的1.0版本已经发布了,能够直接运行ts代码,就索性装个deno,然后配置一下cod

2020-06-12 11:13:42 569

原创 计算N叉树的最大深度,搞点阳间的写法

其实题目是很简单的。但这就是函数式编程?????????❤了。var maxDepth = function (root) { function traverse(root, depth) { return Math.max( depth, ...root.children.map((child) => traverse(child, depth + 1)) ); } return root ? traverse(root, 1) : 0;};

2020-06-10 17:04:04 110

原创 等式方程的可满足性——TypeScript并查集实现
原力计划

总的来说,思路还是很清晰的。一看到这个题就想到了图,==构成的是连通关系,只要有连通关系,就可以构造图来解决问题。而解决图的问题,比较常见的思路的就是BFS(或者DFS)和并查集,这个题感觉用BFS和BFS有点麻烦,那就用并查集了:function equationsPossible(equations: string[]): boolean { const parent: number[] = []; for (let i = 0; i < 26; ++i) { parent.p

2020-06-08 12:05:51 129

原创 TypeScript 迭代 + 前缀和解决路径总和问题

好像还没人写过ts版本的题解,我就先来抛砖引玉了(笑)。思路其实很简单,就是在前序遍历的过程中,记录当前结点为止的结点值之和,这样到叶结点的时候就可以很容易地判断路径总和是否等于目标值了。因为用的是迭代,不像递归那么直接就可以处理前缀和,所以干脆用一个Map来存储了。function hasPathSum(root: TreeNode | null, sum: number): boolean { if (!root) return false; const stack = [root];

2020-06-07 23:06:31 164

原创 创建WebService Client报错/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd的解决方案

有两个想吐槽的吧,第一个是我身为一个前端,都一年多没写过Java了,到头来还是躲不过去;第二个是网上以讹传讹的人太多,而且越传越错。sigh。报错的大概内容是/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber: 52; columnNumber: 88; schema_reference: …(一堆乱码) accessExternalSchema’xjc.xsd’先说版本,我这里是JDK 8u201。其实很简单,在

2020-06-03 15:43:14 187

原创 精读ECMAScript规范:截断
原力计划

之所以要写这个,是因为之前遇到了一个老生常谈的问题:如何在JS中实现截断,也就是向0取整,也就是保留数字的整数部分?JS使用的是基于IEEE 754的浮点数,这个大家都知道。IEEE 754所带来的浮点数精度问题(比如著名的0.1 + 0.2 != 0.3,==还是===都是一样的,因为都是number),以及大整数的误差问题(比如著名的2**53+1 == 2**53),我们也都很清楚。关于这些问题,ES6以后提供了类似于Number.EPSILON、BigInt等一系列特性去解决这些问题,就不在这里赘

2020-05-29 10:26:16 125

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除