剑指Offer刷题记录
03 数组中重复的数字题目在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 12345class Solution { public int findRepeatNumber(int[] nums) { }} 题解基本思路初步想法是创建一个Set,然后遍历数组并把数字添加入Set,每次添加的时候如果数字已经存在,就返回该数字。 但是这样的话时间复杂度和空间复杂度太高了。 12345678910111213public class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<Integer>(); int repeat = -1; for (int num : nums)...
SpringBoot自定义Controller参数解析器
SpringBoot自定义Controller参数解析器(HandlerMethodArgumentResolver)正文省略一万字( 参考: HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】 - 云+社区 - 腾讯云 (tencent.com) HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】 - 云+社区 - 腾讯云 (tencent.com) HandlerMethodArgumentResolver(三):基于HttpMessageConverter消息转换器的参数处理器【享学Spring MVC】 - 云+社区 - 腾讯云 (tencent.com) HandlerMethodArgumentResolver(四):自定参数解析器处理特定应用场景,介绍PropertyNamingStrategy的使用【享学Spring MVC】 - 云+社区 - 腾讯云...
Java动态代理
动态代理实现: 1、JDK 动态代理 用 Java 反射包中的类和接口实现动态代理 2、CGLIB 动态代理 通过第三方库 CGLIB ,以继承类的方式实现动态代理 JDK 代理由于底层机制的缘故,被代理的目标类必须实现至少一个接口 创建被代理的目标类以及其实现的接口 创建 InvocationHandler 接口的实现类,在 invoke() 中完成要代理的功能 用 Proxy.newInstance() 动态地构造出代理对象 Hello (被代理的目标类实现的接口) 12345public interface Hello { void sayHello(); int plus(int a, int b);} HelloImpl (被代理的目标类) 123456789101112131415public class HelloImpl implements Hello { @Override public void sayHello() { ...
MySQL高级
逻辑架构 参考:MySQL逻辑架构 - 知乎 (zhihu.com) 连接层将MySQL服务层通过线程池和TCP连接池,与多个客户端连接。主要工作是:连接处理、授权认证、安全防护。 服务层服务层用于处理核心服务,如标准的SQL接口、查询解析、SQL优化和统计、全局的和引擎依赖的缓存与缓冲器等等。所有的与存储引擎无关的工作,如过程、函数等,都会在这一层来处理。在该层上,服务器会解析查询并创建相应的内部解析树,并对其完成优化,如确定查询表的顺序,是否利用索引等,最后生成相关的执行操作。 服务层可以细分为几个部分: SQL Interface: SQL接口 接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT … FROM就是调用SQL Interface MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口 Parser: 解析器 在解析器中对 SQL...
Weather-Forecast
Weather-Forecast部署地址:fengye404.top/weather github:fengye404/weather-forecast: SAST.2022-FrontEnd-WoC (github.com) SAST.2022 前端组的 WoC (Winter of Code)项目,技术栈: React + Semi Design 也是我自己第一次摸前端的项目,从 0 学三大件到学 React 、拼组件、调CSS,前前后后花了差不多有一个多星期。仿佛回到了去年寒假第一次学后端,虽说遇到的困难很多,但是做出来还是挺有成就感的。 其实还有好多想法由于时间原因没有实现,比如: 1、获取客户端地址,直接回调天气 api 。之前用了搜狐的 api 本来写好了,但是部署完发现获取的是服务端的,直接寄( 2、加载过程中显示骨架屏幕 3、布局做到兼容多端。布局太难了,摆烂 4、找个更好的天气API。目前的API数据量太少,而且经常容易出bug( 做完还是发现后端适合自己。 前端,我劝你别学!
CSS虚化背景图片并解决白边
CSS虚化背景图片并去掉白边直接上代码 App.jsx 1234567891011121314151617import {Layout} from "@douyinfe/semi-ui";import "./App.css";function App() { const {Header, Footer, Content} = Layout; return ( <Layout className={"layout"}> <div className={"background"}/> <Header>Header</Header> <Content>Content</Content> ...
nps搭建内网穿透
前言最近在玩 MC ,买了个 腾讯云2核4G 的服务器跑 MC 服务端,但是 mod 加多了之后还是有点卡,于是就用了个老的电脑搭建服务器,之前的买的服务器用来搭建内网穿透服务端。 一开始使用的是 frp ,后来被安利了 nps,因为有 web gui ,使用起来更友好一点。 客户端服务端是买的 腾讯云2核4G 服务器 centos7 x86_64 下载1wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz 解压1tar -zxvf linux_amd64_server.tar.gz 安装1./nps install 启动1nps start 启动后就可以访问了,默认: http://ip:8080 服务端客户端是老的笔记本 windows10 64 手动下载解压后,文件结构 12345│ npc.exe│└─conf multi_account.conf npc.conf 启动配置文件启动 1.\npc.exe...
Docker笔记
镜像命令查看本机所有镜像 1234docker images参数:-a 列出所有镜像(默认自带)-q 只显示镜像id 搜索镜像 1234docker search 镜像名参数:-s 指定值 列出收藏数不少于指定值的镜像--no-trunc 显示完整的镜像信息 下载镜像 1docker pull 镜像名[:TAG] 删除镜像 123docker rmi 镜像名参数:-f 强制删除 加载.tar镜像文件到本地docker仓库 1docker load -i 镜像文件名 容器命令运行镜像,新建容器并启动 123456docker run 镜像名参数:--name 为容器起别名-d 在后台启动容器-p 主机端口号:容器端口号 映射端口号 例: docker run -d --name mytomcat -p 8081:8080 tomcat 查看正在运行的容器 1234docker ps参数:-a ...
Java手写异步调用
Java 手写异步调用前言今天在写 mirai 机器人的一个小功能时,遇到了这样一个需求:机器人需要先发出一条消息,然后间隔 3 秒钟撤回这条消息 。 当然mirai本身提供了现成的方法,支持异步调用 最朴素的想法是使用Thread.sleep(3000) 1234567891011121314151617181920public class Test { public void A() { System.out.println("A"); try { Thread.sleep(3000); System.out.println("3S after"); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("B"); ...
Angular规范的git-commit-message
介绍 Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。 1>$ git commit -m "hello world" 上面代码的-m参数,就是用来指定 commit mesage 的。 如果一行不够,可以只执行git commit,就会跳出文本编译器,让你写多行。 1>$ git commit 原则上是写什么都行的。 但是一般来说,commit message 应该清晰明了,说明本次提交的目的。 目前,社区有多种 Commit message 的写法规范。本文介绍Angular 规范(见上图),这是目前使用最广的写法,比较合理和系统化,并且有配套的工具。 格式每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。 1<type>(<scope>): <subject>// 空一行<body>// 空一行<footer> 其中,Header 是必需的,Body 和 Footer...