04 2021 档案
摘要:小例子: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Hello React!</title> <script src="https://cdn.staticfile.org/react/16.4.0/umd/react
阅读全文
摘要:定义虚拟DOM时,不要写引号; 标签中混入JS表达式时要用; 样式的类名指定不要用class,要用className; 内联样式,要用style={{key:value, key:value}}的形式去写; 虚拟DOM只有一个根标签 标签必须闭合 标签首字母: 1)小写开头时,将该标签转为HTML中
阅读全文
摘要:Hello React! 首先引入了三个库: react.development.min.js 、react-dom.development.min.js 和 babel.min.js: react.min.js - React 的核心库 react-dom.min.js - 提供与 DOM 相关的
阅读全文
摘要:1. 简介 SpringBoot框架基于Spring4.0设计,由Piovotal公司设计。 VMware+EMC+通用电气->Pivotal公司 2014年 Spring Boot1.0,基于Spring4.0 2015年 Spring Cloud 2018年 Spring Boot2.0,基于S
阅读全文
摘要:func maxProfit(prices []int) int { var max = 0 for i:=1;i<len(prices);i++{ if prices[i]>prices[i-1]{//只要后一天比前一天有利可图 max += prices[i]-prices[i-1]//就在前一
阅读全文
摘要:动态规划+sort.SearchInts() func lengthOfLIS(nums []int) int { dp := []int{} for _, num := range nums { i := sort.SearchInts(dp, num) //min_index if i == l
阅读全文
摘要:直接遍历链表,使用set做标记位(标记是否已经到达过) /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ type void struct{} fun
阅读全文
摘要:使用切片slice实现 type MinStack struct { stack []int minIndex int length int } /** initialize your data structure here. */ func Constructor() MinStack { ret
阅读全文
摘要:func maxProfit(prices []int) int { // 最大利润=第i天卖出-最小买入 var min_input = prices[0]//默认第0天为最小买入 var max_profit = 0//最大利润 for i:=1;i<len(prices);i++{ min_i
阅读全文
摘要:/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ var res [][]int func levelOrder(
阅读全文
摘要:func addStrings(num1 string, num2 string) string { add := 0 //进位标志 ans := ""//最终字符串 var i = len(num1)-1//从末尾开始 var j = len(num2)-1//从末尾开始 for i >= 0 |
阅读全文
摘要:func maxSubArray(nums []int) int { var res = nums[0] // 默认第一个是最大和 var sum = 0 // sum为nums[i]前面的元素的最大和 for i:=0;i<len(nums);i++{ sum = max(sum + nums[i
阅读全文
摘要:func sortArray(nums []int) []int { quickSort(nums, 0, len(nums)-1) return nums } func quickSort(nums []int, low, high int){ if low<high{ var pivot = p
阅读全文
摘要:func lengthOfLongestSubstring(s string)int{ var length = 0 var max = 0 var start = 0//慢指针 var end = 0//快指针 for end<len(s){ tmpChar:=s[end] for i:=star
阅读全文
摘要:一般思路 先遍历A链表,记录所有点 再遍历B链表,若已经在记录中存在则返回该节点. /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ type voi
阅读全文
摘要:/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func mergeTwoLists(l1 *ListNode, l2 *ListNode) *Li
阅读全文
摘要:给定一些正数(代表长度)组成的数组arr,返回由其中三个 长度组成的面积不为0的三角形的最大周长。 如果不能组成三角形,返回0. 三角形满足条件:a+b>c且a+c>b且b+c>a 贪心算法 先排序(升序) 从后往前选三个数,看是否满足三角形条件 package main import ( "fmt
阅读全文
摘要:在柠檬水摊上,每一杯柠檬水的售价为5美元。 顾客排队购买,一次购买一杯。 每一个顾客只买一杯柠檬水,然后向你付5美元、10美元或20美元。 必须给每个顾客正确找零。 **注意:**一开始你手头并没有任何零钱。 如果你能给每位顾客正确找零,则返回true,否则返回false。 贪心算法 顾客给你5块,
阅读全文
摘要:给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。 如: [1,2,3,2,3,4,3,4,5,6,7] 返回5. 贪心算法 func findLength(nums []int)int{ var start = 0 var maxLength = 0 for i:=1;i
阅读全文
摘要:给定一个二叉树,找出其最小深度。 最小深度是从根节点到叶子节点经过的最短路径上的节点数量。 如: 则返回3. 广度优先 func minDepth2(root *TreeNode)int{ if root==nil{//第一次进入时根节点的判断 return 0 } root.deep = 1 va
阅读全文
摘要:给定一个二叉树,找出其最小深度。 最小深度是从根节点到叶子节点经过的最短路径上的节点数量。 如: 则返回3. 深度优先 package main import ( "fmt" "math" ) type TreeNode struct{ val int left *TreeNode right *T
阅读全文
摘要:给定一个整数数组,找出平均数最大且长度为K的下标连续的子数组, 并输出该平均数。 如[1,12,-5,-6,50,3], k=4 返回 12.75 滑动窗口 func findMaxAverage(nums []int, k int)float64{ var sum = 0 var n = len(
阅读全文
摘要:两个有序数组nums1和nums2,将nums2合并到nums1中,使nums1成为一个有序数组。 初始化nums1和nums2的元素数量分别为m和n。 假设nums1的空间大小等于m+n(足够)。 一般解法,先拷贝,再排序 package main import ( "fmt" "sort" )
阅读全文
摘要:给定一个链表,判断链表中是否有环。 如果链表中存在某个节点,可以通过连续跟踪next指针再次到达该节点,则链表中存在环。 如果链表中存在环,则返回true,否则返回false。 直接遍历链表,使用set做标记位(标记是否已经到达过) package main import ( "fmt" ) typ
阅读全文
摘要:总共有n枚硬币,排成阶梯形状,满足第K行有K个硬币。 求形成的完整阶梯行的总行数。 例如n=5时, 1 1 1 1 1 此时完整的阶梯行的总行数为2,因为第3行未排满。 n为一个非负整数,且在32位有符号整型的范围内。 暴力破解 func arrangeCoins(n int)int{ for i:
阅读全文
摘要:递归 func fibRecursive(n int)int{ if n==0{ return 0 } if n==1{ return 1 } return fibRecursive(n-1) + fibRecursive(n-2) } 动态规划 func fibDynamic(n int)int{
阅读全文
摘要:给定一个升序的整数数组numbers,从数组中找出两个数满足: 两数之和等于目标数target,且两个数不能是同一个数, 假设每个输入只对应唯一的答案,不能重复使用同一个元素(下标不能相同)。返回两数的下标。 暴力破解,O(n2) map打标记,O(n),但是空间复杂度也为O(n) 二分查找(对于每
阅读全文
摘要:给定一个无序的整数数组numbers,从数组中找出两个数满足: 两数之和等于目标数target,且两个数不能是同一个数, 假设每个输入只对应唯一的答案,不能重复使用同一个元素(下标不能相同)。返回两数的下标。 暴力解法 map打标记 package main import ( "fmt" ) fun
阅读全文
摘要:整形数组nums,在数组中找出由三个数字组成的最大乘积,并输出这个乘积。(乘积不会越界。不考虑超过int的最大值) 重点考察:线性扫描。 暴力破解 先排序 全是正数或全是负数,则nums[length-1]*nums[length-2]*nums[length-3] 有负数有正数,则要么是nums[
阅读全文
摘要:递归版牛顿迭代 package main import ( "fmt" ) func newton(n int)int{ if n==0{ return 0 } return int(sqrt(float64(n), float64(n))) } func sqrt(x, n float64)flo
阅读全文
摘要:不能使用sqrt函数,得到x的平方根的整数部分(x>0)。 package main import "fmt" func mySqrt(x int) int { var left = 0 var right = x for left<=right{ mid := (left+right)/2 if
阅读全文
摘要:给定一个整数数组nums,编写一个能返回数组中心下标的方法。 中心下标:是数组的一个下标,其左侧所有元素相加的和等于右侧元素相加的和。 如果数组不存在,则返回-1.如果数组存在多个中心下标,返回最靠近左侧的那个。 注意:中心下标可能会出现在数组的两端。 package main import "fm
阅读全文
摘要:一个有序数组nums,原地删除重复出现的元素,使每个元素只能出现一次,返回删除后数组的新长度。 不能使用额外的数组空间,必须在原地修改输入的数组,并在使用O(1)额外空间的条件下完成(临时变量、指针等) 例如:输入:[0,1,2,2,3,3,3,4] 输出:5 重点考察:双指针算法 package
阅读全文
摘要:暴力破解 func isPrime(n int) bool{ for i:=2;i*i<=n;i++{ if n%i==0{ return false } } return true } func bf(n int)int{ sum := 0 for i:=2;i<n;i++{ if isPrime
阅读全文
摘要:给定一个单链表: 1->2->3->4->5, 反转后输出为: 5->4->3->2->1 PrintNodeList输出头节点及后续节点 ReverseNodeList1是迭代的方式 ReverseNodeList2是递归的方式 package main import ( "fmt" ) type
阅读全文
摘要:分布式系统中常用的缓存方案有哪些? 客户端缓存:页面和浏览器缓存,APP缓存,H5缓存,localStorage和sessionStorage CDN缓存: 内存存储:数据的缓存 内容分发:负载均衡 nginx缓存:本地缓存,外部缓存 数据库缓存:持久层缓存(mybatis,hibernate多级缓
阅读全文
摘要:为什么使用缓存? 高性能: 就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请求,那么直接将查询出来的结果放在缓存中,后面直接读缓存就好 高可用(高并发场景): 缓存是走内存的,内存天然就支撑高并发。 缓存功能简单,说白了就是 key-value 式操作,单机支撑的并发
阅读全文
摘要:海量数据下,如何快速查找一条数据? 使用布隆过滤器,快速过滤不存在的记录。 使用Redis的bitmap结构来实现布隆过滤器。 在Redis中建立数据缓存。 以普通字符串的形式来存储(userId → user.json) 以一个hash来存储一条记录 以一个整的hash来存储所有的数据 存在的问题
阅读全文
摘要:这里我们尝试将Protobuf和RPC结合在一起使用,通过 Protobuf来最终保证RPC的接口规范和安全。 Protobuf中最基本的数据单元是message,是类似Go语言中结构体的存在。在message中可以嵌套message或其他基础数据类型的成员。 首先创建hello.proto文件,其
阅读全文
摘要:Redis如何配置KEY的过期时间?他的实现原理是什么? redis设置key的过期时间:1.EXPIRE。2.SETNX。 实现原理: 定期删除:每隔一段时间,执行一次删除过期key的操作。 懒汉式删除:当使用get,getset等指令去获取数据时,判断key是否过期。过期后,就先把key删除,再
阅读全文
摘要:如何设计一个分布式锁?如何对锁性能进行优化? 分布式锁的本质:就是在所有进程都能访问到的一个地方(如数据库、zookeeper、Redis),设置一个锁资源,让这些进程都来竞争锁资源。通常对于分布式锁,会要求响应快、性能高、与业务无关。 Redis实现分布式锁: SETNX key value :N
阅读全文
摘要:如何保证Redis与数据库的数据一致? 当我们对数据进行修改的时候,到底是先删缓存,还是先写数据库? 1.如果是先删缓存,再写数据库:在高并发场景下,当第一个线程删了缓存,还没有来得及写数据库,第二个线程来读数据,会发现缓存中的数据为空, 那就会去读数据库中的数据(旧值/脏数据),读完之后,把读到的
阅读全文
摘要:什么是缓存穿透? 缓存穿透:缓存中查不到,数据库中也查不到。 解决方案: 对参数进行合法性校验 将数据库中没有查到结果的数据也写入到缓存。这时要注意为了防止Redis被无用的key占满,这一类缓存的有效期要设置得短一点。 引入布隆过滤器(BloomFilter),在访问Redis之前判断数据是否存在
阅读全文
摘要:Go语言内在的RPC框架已经支持在HTTP协议上提供RPC服务。但是框架的HTTP服务同样采用了内置的Gob协议,并且没有提供采用其他协议的接口,因此从其他语言依然无法访问,在前面的例子中,我们已经实现了在TCP协议之上运行jsonrpc服务,并且通过nc命令行工具成功实现了RPC方法调用。现在我们
阅读全文
摘要:标准库的RPC默认采用Go语言特有的Gob编码,因此从其他语言调用Go语言实现的RPC服务将比较困难。在互联网的微服务时代,每个RPC以及服务的使用者都可能采用不同的编程语言,因此跨语言是互联网时代RPC的一个首要条件。得益于RPC的框架设计,Go语言的RPC其实也是很容易实现跨语言的。 Go语言的
阅读全文
摘要:在涉及RPC的应用中,作为开发人员一般至少有3种角色:首先是服务器端实现RPC方法的开发人员,其次是客户端调用RPC方法的人员,最后也是最重要的是制定服务器端和客户端RPC接口规范的设计人员。为了简化将以上几种角色的工作全部放到一起,虽然看似实现简单,但是不利于后期的维护和工作的切割。 如果要重构H
阅读全文
摘要:Go语言的RPC包的路径为net/rpc,也就是放在了net包目录下面。因此我们可以猜测该RPC包是建立在net包的基础之上的 。 我们首先构造一个HelloService类型,其中的Hello()方法用于实现打印功能: 其中的Hello()方法必须满足Go语言的RPC规则 :方法只能有两个可序列化
阅读全文