JDK动态代理
JDK动态代理
应用#
为每个排序方法计算其运行时间
1234567891011// 排序方法接口public interface SortMethods { // 冒泡排序 void bubbleSort(int[] arr); // 选择排序 void selectSort(int[] arr); // 插入排序 void insertSort(int[] arr); // 快速排序 void quickSort(int[] arr);}
1234// 排序方法实现类public class SortMethodsImpl implements SortMethods { // 排序方法具体实现见: https://gist.github.com/tiam-bloom/ea2bc5112dfa67506a960a76bdf3c367}
12345678910111213141516171819202122232425262728293031/** * @author Tiam * @date 2023/4/ ...
快速排序
快速排序
选择一个基准数(任意)
交换位置, 直到基准数的左边都比基准数小, 基准数的右边都比基准数大
这样就将一个数组分为了基准数左数组 和 右数组
再次从头执行操作(递归)
第二步具体怎么实现呢?
在数组首尾设置两个指针i、j,向数组中间遍历,每次与基准数比较,若i遇到了比基准数更大的值,停下;j遇到了比基准数更小的值,停下;交换i与j位置的值;直到i与j相遇,再将基准数交换到i或j所在的位置,此时,数组中 基准数左边都比基准数小,而右边都比基准数大了。
代码:
123456789101112131415161718192021222324252627@Overridepublic void quickSort(int[] arr) { quickSort(arr, 0, arr.length - 1);}private void quickSort(int[] arr, int low, int high) { if (low >= high) return; // 将第一位做基准数, 使base左边都比base小, ba ...
方法引用与函数式编程
方法引用与函数式编程
先引入一个问题, 在js中, func()与func 有什么区别呢?
123function func(){ console.log("这是一个函数");}
区别就是func()是调用函数, 他的值是函数的返回值(这里返回值为undefined); 而func是函数引用, 他的值是函数的地址
那么在Java中, 如何实现?
在java的语法里, 以Arrays的sort方法为例, Arrays.sort()是调用方法; Arrays::sort是引用方法;
有什么用呢?
看个例子:
1234567891011121314151617/** * 接受一个函数作参数, * 这个函数只有一个String类型的参数, 并且没有返回值 * @param print */public void func(Consumer<String> print) { // 调用print方法 print.accept("Hello Java8");}@Testpublic v ...
只出现一次的数
只出现一次的数
题目: 一个数组中, 有两个不同的数出现了一次, 其他的数都恰好出现了两次, 找出这两个数.
原题链接: 260. 只出现一次的数字 III - 力扣(Leetcode)
使用位运算解题需要几点前置知识:
首先, 第一点, 对于任意一个数N, 一定满足: N ^ N == 0, 0 ^ N == N;
第二, 位运算异或满足交换律和结合律;
根据第一第二就能推出, 位运算异或具有复原性, 即对于任意两个数M和N一定满足: M^N^N == M;
那么, 若定义一个变量eor对数组中的每一个值, 依次进行异或运算, (假设两个不同的数分别为a和b)则eor的值一定等于a^b
现在有了a ^ b的值eor, 怎么求出具体a和b的值分别是多少呢?
先分析eor的值有什么特点, 因为a与b不等, 所以eor一定不为0 ,
所以其二进制一定有一位为1, 在那一位上, 一个为0, 一个为1(这很重要)
例: 比如 a=1011, b=0101, eor=a^b= 1110
可以发现, eor为1的位上, a和b都是一个为0一个为1
为什么要找那一位1?
找到那一位1, 假设 ...
居中方式
块元素的居中
块元素特点:
宽度撑满父元素
高度由内容撑开
可设置宽高
12345678910.outer { width: 500px; height: 500px; border: 1px solid black;}.inner { width: 100px; height: 100px; background-color: purple;}
12345<div class="outer"> <div class="inner"> </div></div>
两个盒子, 如何让inner在outer中, 垂直水平居中?
方式一#
通过flex布局, 首选, 无需计算, 简单
支持行内元素, 行内块元素的居中, 因为flex布局后, 其子元素默认变为块元素
方式二#
较简洁, 但是需要简单的计算, 且inner高度改变时, 会影响垂直居中
不支持行内元素的居中(当inner的元素从div变成span时 ...
margin问题
margin相关问题
margin塌陷问题#
正常的两个盒子
12345678910.outer { width: 300px; height: 300px; background-color: skyblue;}.inner { width: 100px; height: 100px; background-color: #ccc;}
1234<div class="outer"> <div class="inner"> </div></div>
样式如下
当给盒子 inner 添加一个外边距,margin: 100px;
理想中, 应该是这样
然而并不是, 实际的结果是这样
给inner的上外边距, 却意外的到了其父元素outer身上,
具体原因不太清楚, 应该是历史遗留问题, 关键词margin塌陷
较好的解决方案是给outer添加样式, overflow: hidden;
有时候可能会遇到marg ...
奇怪的间隙和垂直对齐问题
奇怪的间隙和垂直对齐问题
一个基本的搜索框和按钮, 没有任何样式
1234<form action=""> <input type="search" name="keywords"> <button>搜索</button></form>
chrome浏览器下, 默认应该是这样的:
经过检查, input和button都没有外边距, 那么之间的空隙哪里来的呢?
其实是由于input和button之间的换行导致的, 换行符被浏览器解析为了一个空格
将换行去掉后
123<form action=""> <input type="search" name="keywords"><button>搜索</button></form>
间隙消失了
那这里就必须不能换行吗?
并不是, 换行也是字符, 可以通过font-size:0;将其隐藏掉, ...
Mysql5.7安装记录
Mysql5.7安装记录#
【2023-3-5 19:26:15 星期日】
下载地址: MySQL :: Download MySQL Community Server
下载后应是一个zip的压缩文件, 然后解压在某个路径下,我是放在``F:\Program\mysql-5.7.41-winx64`路径下
注意路径中不可有中文和空格!
一、解压后,在根目录下新建一个名为my.ini配置文件(注意文件后缀是ini)
二、填充以下内容,注意根据自己所解压的目录,更改内容。
1234567891011121314151617181920212223242526[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录 ----------是你的文件路径-------------basedir=D:\MySQL_Navicat\mysql-8.0.27-winx64# 设置mysql数据库的数据的存放目录 ---------是你的文件路径data文件夹自行创建# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则 ...
软件分享
软件分享
软件下载网站:
softonic:1997年成立于西班牙,是欧洲领先的软件下载网站
anopos – 人生就是选择,选择的关键在于认识自我。
1. Typora#
介绍: 一款 Markdown 编辑器和阅读器
下载官网: https://typoraio.cn/
2. oCam#
介绍: 供个人使用的免费屏幕录像机
下载: https://ocam.en.softonic.com/
3. ScreenToGif#
介绍: 截Gif图,对于有些不支持视频的博客网站,gif是个很好的选择
下载:https://www.screentogif.com/
4. Git#
介绍: 分布式版本控制工具
官网:https://git-scm.com/download/win
镜像下载(解决官网下载慢的问题):https://registry.npmmirror.com/binary.html?path=git-for-windows/
5. Snipaste#
下载: https://www.snipaste.com/download.html
6. uTools#
下载:h ...
Java环境安装JDK+Maven大致流程
Java环境安装JDK+Maven大致流程
下载#
下载java集成开发环境IDE: https://www.jetbrains.com/zh-cn/idea/
其实下载IDEA后, 根据里面提示可直接下载jdk, 便可运行Java文件了, 新版IDEA也集成了maven
下载JDK1.8:
https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html
https://www.oracle.com/java/technologies/downloads/#java8-windows
即使Java目前已经更新到Java19了, 但是使用最多的依旧还是Java8(Jdk1.8), 官网强制登陆才能下载旧版本
环境配置#
系统变量中新增, 值为安装路径
测试(可能需要重启电脑)
maven下载#
下载地址: Maven – Download Apache Maven
设置配置文件#
路径: "~\apache-maven-3.8.8\conf\sett ...















