- 博客(27)
- 收藏
- 关注

原创 使用Spring Boot+gRPC构建微服务并部署到Istio
使用Spring Boot+gRPC构建微服务并部署到Istio作为Service Mesh和云原生技术的忠实拥护者,我却一直没有开发过Service Mesh的应用。正好最近受够了Spring Cloud的“折磨”,对Kubernetes也可以熟练使用了,而且网上几乎没有Spring Boot微服务部署到Istio的案例,我就开始考虑用Spring Boot写个微服务的Demo并且部署到Istio。项目本身不复杂,就是发送一个字符串并且返回一个字符串的最简单的Demo。题外话:我本来是想用Sprin
2020-11-10 19:39:46
3263
2
原创 【LeetCode通关全记录】509. 斐波那契数
【LeetCode通关全记录】509. 斐波那契数题目地址:509. 斐波那契数解法:记忆化搜索(动态规划+状态压缩)这道题其实最简单的解法是递归,大家应该也都会写,但是递归99%会TLE,所以需要找点省时间的办法。由于每一个斐波那契数都可以用它的前两个数得出,所以只需要把前两个数存储下来然后循环迭代对应的次数即可求出答案。这其实就是动态规划的一种变体,也可以说是一种“记忆化搜索”,建议看这个:动态规划套路详解,讲的非常非常详细。当然,这题因为没有涉及求最值(最优子结构),所以不算完整意义上的动态
2021-10-20 22:21:33
387
原创 【LeetCode通关全记录】1137. 第N个泰波那契数
【LeetCode通关全记录】1137. 第N个泰波那契数题目地址:1137. 第N个泰波那契数解法:记忆化搜索(动态规划+状态压缩)动态规划入门题,其实就是509多算了一位而已,代码基本上跟509没有区别。func tribonacci(n int) int { if n == 0 { return 0 } if n == 1 { return 1 } if n == 2 { return 1 } pre1, pre, cur := 0, 1, 1 for i := 3
2021-10-20 22:19:27
321
原创 【LeetCode通关全记录】704. 二分查找
【LeetCode通关全记录】704. 二分查找题目地址:704. 二分查找解法:二分查找二分查找的代码大家应该都背的滚瓜烂熟了吧,这里就着重讲一下二分查找的一些小技巧:在使用mid = (left + right) / 2可能发生溢出的情况下,可以套用mid = left + (right - left) / 2的公式避免溢出;除以2这个操作可以用右移1位来代替,会更快一些:mid = left + (right - left) >> 1func search(nums []i
2021-10-20 21:46:02
372
原创 【LeetCode通关全记录】35. 搜索插入位置
【LeetCode通关全记录】35. 搜索插入位置题目地址:35. 搜索插入位置解法:二分查找本题其实也是二分查找的变体。本题与二分查找的不同之处在于找不到待查元素时需要返回插入位置,所以查不到时需要返回l——因为l左边的值一直小于等于target,而r右边的值一直大于等于target,这样退出循环时,因为l左边的值全部小于等于target所以l就是我们要求的插入位置。func searchInsert(nums []int, target int) int { l, r := 0, len
2021-10-20 21:31:48
159
原创 【LeetCode通关全记录】278. 第一个错误的版本
【LeetCode通关全记录】278. 第一个错误的版本题目地址:278. 第一个错误的版本解法:二分查找这道题虽然看起来很绕,但本质上就是个简单的二分查找变体而已。因为这题要求的是第一个错误的版本,所以在判断错误版本时要让r = m,并且判断条件要改成l < r,这样最后会在l == r时退出循环,此时返回的r就是第一个错误版本。通过这题学到一招:在二分查找中,使用公式l + (r - l) / 2来求m可以避免溢出的问题。这里给出两种写法:手写二分查找/** * Forwar
2021-10-20 21:24:03
149
原创 【LeetCode通关全记录】453. 最小操作次数使数组元素相等
【LeetCode通关全记录】453. 最小操作次数使数组元素相等题目地址:453. 最小操作次数使数组元素相等解法:求所有元素与数组最小元素之间的差值这道题与其说是算法,不如说是考察逆向思维的脑筋急转弯吧。。。其实思路很简单:每次操作使n - 1个元素增加1,那么效果其实就相当于让数组中最大的数减1,所以只要先求出数组中的最小值,再求所有元素与这个最小值的差,最后把这些差都加起来就是我们需要的答案了。如果不明白的话可以看官方题解,讲得很清楚。func minMoves(nums []int)
2021-10-20 21:16:39
148
原创 【LeetCode通关全记录】187. 重复的DNA序列
【LeetCode通关全记录】187. 重复的DNA序列题目地址:187. 重复的DNA序列解法1:哈希表(最容易想到)对于这道题,一个很容易想到的方法就是从字符串开头统计出所有长度为10的字串放入哈希表(key为字串,value为出现次数),向后遍历时将每个长度为10的字串都与哈希表中已有的字符串进行比较,如果该字符串在哈希表里已经出现过就将该字串加入到答案集合中,否则将该字串作为key放入哈希表并置其value为1。func findRepeatedDnaSequences(s string)
2021-10-11 00:00:40
138
原创 【LeetCode通关全记录】9. 回文数
【LeetCode通关全记录】9. 回文数题目地址:9. 回文数转换成字符串并反转、比较字符串(实际上就是转换成rune切片并且比较)的解法因为太简单所以这里就不分享啦,主要来看看怎样不转换成字符串解决这个问题。解法:反转数字并和原数比较首先考虑特殊情况:0是回文数,这个不会影响后面的正常解法,因为如果是0的话会直接跳出循环返回true;小于0的数字因为前面有个负号,所以肯定不可能是回文数;10的倍数都不可能是回文数,因为反转之后0在最高位,这显然是不行的。排除这两种情况后我们可以这
2021-10-10 23:54:26
110
原创 【LeetCode通关全记录】441. 排列硬币
【LeetCode通关全记录】441. 排列硬币题目地址:441. 排列硬币解法1:暴力迭代(最容易实现)本题最容易实现的办法就是设置一个计数器记录行数,每次循环给计数器加1并从总数中减去计数器的值,直到计数器的值比总数大时跳出循环。func arrangeCoins(n int) int { if n <= 1 { return 1 } m := 1 for n >= m { n -= m m++ } return m - 1}执行用时: 8 ms(超过4
2021-10-10 23:53:44
163
原创 【LeetCode通关全记录】223. 矩形面积
【LeetCode通关全记录】223. 矩形面积题目地址:223. 矩形面积解法:面积之和-重叠面积看到这道题你可能认为需要考虑各种情况(比如两个矩形有没有重叠,大矩形包小矩形会怎样等等)来求解了,其实仔细想想就能发现这题本质上就是求两个矩形的重叠面积,因为两个矩形的实际覆盖面积就是两个矩形的面积之和减去它们的重叠面积。那么问题就转化为如何求重叠部分的面积了。这也很简单,重叠面积的宽度w为math.Min(ax2, bx2) - math.Max(ax1, bx1),高度h为math.Min(ay2,
2021-10-10 23:50:56
167
原创 【LeetCode通关全记录】1436. 旅行终点站
【LeetCode通关全记录】1436. 旅行终点站题目地址???? 1436. 旅行终点站解法1:结点-出度表(想复杂了)看到这题第一反应是图,题目中要求的又是出度为0的结点,那么自然而然地就想到了求所有结点的出度并保存在map中,最后遍历map并返回出度为0的结点的方法。详细解法请看注释????func destCity(paths [][]string) string { // path数组的第一个参数为起点,第二个参数为终点 // 那么我们就可以建立一个map,key为城市(结点),
2021-10-01 22:18:09
135
原创 【LeetCode通关全记录】658. 找到 K 个最接近的元素
【LeetCode通关全记录】658. 找到 K 个最接近的元素题目地址????658. 找到 K 个最接近的元素解法1:删除法(双指针)从数组的两端不断删除与x的差值更大的元素直到数组长度为k,看到这题第一个想到的就是这个方法,也是一个比较简单的方法,可惜的是在n很大k很小的时候效率不高。注意:因为若x在数组中那么x比arr[0]大而比arr[len(arr)-1]小,所以如果不想调用math.Abs()或者自己写绝对值函数取绝对值的话判断条件就需要写成x-arr[0] > arr[len(
2021-10-01 22:17:31
185
原创 Go语言设计模式(3)抽象工厂模式
Go语言设计模式(3)抽象工厂模式抽象工厂模式的定义抽象工厂模式的定义如下:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.为创建一组相关或者相互依赖的对象提供一个接口,而且无须指定它们的具体类。——《设计模式之禅》好吧,就跟它的名字一样,它的定义也很抽象,很让人摸不着头脑。但其实这种设计模式还是很好理解的,
2021-09-19 15:36:29
357
原创 Go语言设计模式(2)工厂模式
Go语言设计模式(2)工厂模式工厂模式的定义工厂模式的定义如下:Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。——《设计模式之禅》
2021-09-19 15:35:45
267
原创 Go语言设计模式(1)单例模式
Go语言设计模式(1)单例模式单例模式的定义个人认为单例模式是23种设计模式中最简单也最好理解的一种,定义如下:Ensure a class has only one instance, and provide a global pointof access to it.确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。——《设计模式之禅》那它有什么用呢?我目前在项目中遇到的最多的需要使用单例模式情况就是工具类——工具类一般都没有必要用一次就新建一个实例,所以使用单例模式来实现
2021-09-13 18:49:30
216
原创 Go语言设计模式(0)前言:我回来了,我带着23种设计模式回来了
Go语言设计模式(0)前言:我回来了,我带着23种设计模式回来了鸽了那么久,我终于回来了!我宣布从今天开始,高产的Martin Jiang又回来了,从今天开始我将努力做到日更,争取每天都能产出一篇高质量的笔记或者文章,直到我找到满意的工作为止。当然,找到工作并不意味着学习这个过程就结束了,只是找到工作之后的事情现在还未可知。那么我要填的第一个坑就是鸽了大半年的Go语言实现23种设计模式。众所周知,懂得设计模式是每一个有志于从事服务端开发的萌新所必须掌握的知识;并且,设计模式在开发中也是很常用的(例如我之
2021-09-13 18:48:24
196
原创 一文看懂Web后端开发
一文看懂Web后端开发前言由于网络上系统地介绍后端开发的文章实在太少,而最近有恰巧有许多同学问我“什么是后端开发?”、“你为什么喜欢后端开发?”、“做后端都需要学什么?”,那么我们就来讲一讲,到底什么才是后端开发。定义后端开发(Back-End Development,也称服务端开发、服务器端开发等)是创建完整可运行的Web应用服务端程序(服务端程序和资源合称为后端,即在服务器上运行的、不涉及用户界面的部分)的过程,是Web应用程序开发的一部分。后端开发者使用Java、Golang等语言及其衍生的各
2021-03-20 23:53:37
39845
12
原创 前端废物的自救之路(3)使用Cookie完成Nuxt.js中Vuex的持久化
前端废物的自救之路(3)使用Cookie完成Nuxt.js中Vuex的持久化为什么需要Vuex持久化在开发的过程中,我们会使用Vuex来存储用户信息、Token等内容,但Vuex的信息是存储在内存中的,当页面刷新时,内容自然就丢失了。我们需要寻找其他的办法使得刷新页面时Vuex的信息能保存下来,也就是Vuex的持久化。Nuxt.js中的Vuex持久化方案及其可用性使用Vue.js时,我们一般用vuex-persist、vuex-persistedstate等框架完成Vuex的持久化,也并不会出什么问
2021-03-19 16:25:15
1710
2
原创 前端废物的自救之路(2)Ant Design Vue实现登录页面及表单校验功能
前端废物的自救之路(2)Ant Design Vue实现登录页面及表单校验功能前言由于后台没有要求响应式,本来我是打算使用Element UI(以下简称element)作为后台的UI框架的——因为Element的参考资料实在是太多了,简直是我等前端废物的福音,并且我以前的项目中也多次使用了element。但是在认真研究了Ant Design Vue(以下简称antdv)的文档后,我决定前后台都使用antdv,因为antdv支持响应式所以可以前后台用一套框架,并且antdv在设计上更加符合我的审美,也更简
2021-03-15 21:16:35
1928
原创 前端废物的自救之路(1)实现axios拦截器:对Nuxt.js中的@nuxtjs/axios进行封装
前端废物的自救之路(1)实现axios拦截器:对Nuxt.js中的@nuxtjs/axios进行封装前言手头有一个去年五月写的遗留项目,以前使用的是Spring Boot+Thymeleaf+AmazeUI(前台)+X-admin(后台),由于用户反映有许多需要改进的地方(并且打开项目一看,那代码我自己也看不懂了,而且以现在的视角看那些代码真的是烂到极致),故进行彻底重构。由于前台需要SEO,并且考虑到上一版中使用AmazeUI+Thymeleaf开发的体验极为痛苦,且新的后端(Gin)的模板引擎十分
2021-03-15 21:13:51
759
原创 Dubbo源码阅读(1)搭建Dubbo源码阅读环境
Dubbo源码阅读(1)搭建Dubbo源码阅读环境一直想阅读一些开源框架的源码,但是由于上学期事情太多而一直没有时间阅读。现在放寒假了,终于有足够的时间来阅读源码了,就先从Dubbo开始吧——毕竟这个寒假是有写一个自己的RPC框架的打算的,从阅读RPC框架的源码开始也是一个不错的选择。虽然我对Dubbo实在是说不上喜欢——明明定位是一个RPC框架却有服务注册与发现、监控等服务治理的功能,在使用时有时会发现一些莫名其妙的默认行为,根据RPC Benchmark(https://github.com/ha
2021-01-12 23:20:52
272
原创 史上最全面的Kubernetes(k8s)入门笔记
史上最全面的Kubernetes(k8s)入门笔记准备虚拟机使用的操作系统为Ubuntu 18.04.4 Server amd64,安装时使用了阿里云镜像源,如果没有使用的话记得换源。因为准备虚拟机的过程也比较复杂,所以也记录一下吧。创建虚拟机时,创建2核2G的虚拟机,硬盘20G就可以:我用的是Ubuntu Server 18.04.4,用18.04的话安装过程也是大同小异的:选择English:Continue Without Updating:Done:Done:Done
2020-11-10 19:57:38
1173
原创 给想学Markdown的你的一个简单的Markdown语法教程
给想学Markdown的你的一个简单的Markdown语法教程这篇文章是对我所知道的常用、兼容性较好的Markdown语法的一个简单的总结,文中所有的语法在Typora编辑器和简书上都可以正确显示,如有错漏之处,烦请指正。本文同时也发表在我的个人网站:www.wendev.site,欢迎前往我的个人网站阅读。什么是Markdown?我觉得对HTML比较熟悉的同学可能会很容易地回答出这个问题——Markdown其实就是一个轻量级、用来编写文档的更易用的HTML。当然,对于没有基础的同学,可以暂时
2020-11-10 19:54:59
490
原创 递归输出全排列的一种新方法(C语言描述)
递归输出全排列的一种新方法(C语言描述)前言最近在数据结构的作业题中,出现了这样一道题目:7-2 输出全排列 (20 分)请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。输入格式:输入给出正整数n(n<10)。输出格式:输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序。输入样例:3输出样例:123132213231312321在网上搜索了一下,网上的思路要么很复杂,要
2020-11-10 19:53:14
908
原创 Web应用开发大作业项目记录(2)接口规范的制定与通用类的设计
Web应用开发大作业项目记录(2)接口规范的制定与通用类的设计Reference这次使用的很多项目搭建方法都参考了这篇文章:一份Spring Boot项目搭建模板,作者真的是太强了,感谢作者的无私奉献。接口规范:统一返回对象因为是半前后端分离的项目,页面中几乎所有的数据都是走接口的,所以需要有一个统一的返回格式以便前端进行调用。这里因为后面要做对这个对象的统一创建的工具类,所以没有使用泛型:package site.wendev.qikebao.common;import lombok.Dat
2020-11-10 19:49:58
256
原创 Web应用开发大作业记录(1)架构与项目搭建
Web应用开发大作业记录(1)架构与项目搭建Web应用开发大作业已经布置了两三周了,但是由于前两周一直忙于《并行程序设计》课程的答辩准备,再加上遇到了状态低谷,所以迟迟没有动工;今天觉得再不动工的话可能完成的质量就不够高了,所以这就开始。这个作业要做的是一个只有CRUD的后台管理系统,并且已经给出了前端代码,我们只需要完成后端代码并对前端的接口进行一些改造就可以了。没有任何复杂的地方,也没有任何的技术难点,只是一个堆时间堆代码量的最简单的项目罢了,估计大家写的也都差不多。但是如果想要打败其他同学拿到高分
2020-11-10 19:43:24
1302
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人