Kennem's Blog
  • 🏠主页
  • 🔍搜索
  • 📚文章
  • ⏱时间轴
  • 🔖标签
  • 🗂️分类
  • 🙋🏻‍♂️关于
主页 📚文章

💻技术

LeetCode双周赛129(240427)

双周赛20230427 第三/四题3130. 找出所有稳定的二进制数组 II 题目大意:给定三个正整数 zero、one 和 limit,定义一个二进制数组 arr,要求满足以下条件:数组中 0 出现的次数为 zero,1 出现的次数为 one,并且数组中每个长度超过 limit 的子数组都同时包含 0 和 1。求稳定二进制数组的总数目。 ...

2024-04-30 · 1 分钟 · 469 字 · updated: 2024-04-30 · ShowGuan

LeetCode周赛395(240428)

周赛240428 第四题134. 找出唯一性数组的中位数 题目大意:给定一个整数数组nums,唯一性数组是一个按元素从小到大排序的数组,包含了nums的所有非空子数组中不同元素的个数。要求返回nums唯一性数组的中位数,即有序唯一性数组的中间元素。 ...

2024-04-30 · 1 分钟 · 401 字 · updated: 2024-04-30 · ShowGuan

Java Web开发(3)

Java Web开发(3) Maven Maven是一款管理和构建java项目的工具 依赖管理 统一的项目结构 项目构建 <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> MVN坐标 Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置 使用坐标来定义项目或引入项目中所需要的依赖 Maven的坐标主要组成 ...

2024-04-27 · 10 分钟 · 4679 字 · updated: 2024-04-27 · ShowGuan

Java Web开发(4)

Java Web开发(4) 数据库 数据库:DataBase(DB) , 是存储和管理数据的仓库 DBMS, SQL MySql登录,首先在服务中启动mysql mysql -uroot -p"password" 或者 mysql -uroot -p 之后输入密码 ...

2024-04-27 · 19 分钟 · 9099 字 · updated: 2024-04-27 · ShowGuan

Java Web开发(1)

Java Web开发(1) 什么是Web? Web:全球广域网,也称为万维网(World Wide Web),能够通过浏览器访问的网站 CRM OA ERP 不谋全局者不足以谋一域 前后端分离开发 混合开发 ...

2024-04-22 · 13 分钟 · 6348 字 · updated: 2024-04-22 · ShowGuan

Java Web开发(2)

Java Web开发(2) Vue Vue是一套前端框架,免除原生的JavaScript中的DOM操作,简化书写。 基于MVVM(Model-View-View-Model)思想,实现数据的双向绑定,将编程的关注点放在数据上。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Vue</title> <!-- 引入Vue.js库 --> <script src="../js/vue.js"></script> </head> <body> <div id="app"> <!-- 输入框,使用v-model指令实现双向数据绑定 --> <input type="text" v-model="message"> <!-- 使用插值表达式显示message变量的值 --> {{ message }} </div> </body> <script> // 创建一个Vue实例 new Vue({ // 将Vue实例挂载到id为"app"的元素上 el: "#app", // 定义数据对象 data: { message: "Hello Vue" // 初始值为"Hello Vue" } }) </script> </html> Vue常用指令 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Vue</title> <!-- 引入 Vue.js 文件 --> <script src="../js/vue.js"></script> </head> <body> <!-- Vue 实例挂载的根节点 --> <div id="app"> <table border="1" cellspacing="0" width="60%"> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>成绩</th> <th>等级</th> </tr> <!-- 使用 v-for 循环渲染列表 --> <tr align="center" v-for="(user, index) in users"> <td>{{index + 1}}</td> <td>{{user.name}}</td> <td>{{user.age}}</td> <td> <!-- 使用 v-if 条件渲染 --> <span v-if="user.gender == 1">男</span> <span v-if="user.gender == 2">女</span> </td> <td>{{user.score}}</td> <td> <!-- 使用 v-if、v-else-if、v-else 实现多条件渲染 --> <span v-if="user.score >= 60 && user.score < 85">优秀</span> <span v-else-if="user.score >= 85">及格</span> <span style="color:red" v-else>不及格</span> </td> </tr> </div> </body> <script> // 创建 Vue 实例 new Vue({ el: "#app", // 指定实例挂载的根节点 data: { // 用于存储数据的对象 users: [{ name: "Tom", age: 20, gender: 1, score: 30 }, { name: "Rose", age: 18, gender: 2, score: 99 }, { name: "Jerry", age: 16, gender: 1, score: 98 }, { name: "Kennem", age: 21, gender: 1, score: 100 }] }, }) </script> </html> Vue生命周期 new new Vue({ el: "#app", //接管区域 data: { }, methods: { }, mounted() { alert("挂载完成!"); }, }) Ajax Asynchronous JavaScript And XML, 异步的JavaScript和XML 作用: 数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想,用户名是否可用的校验等。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>原生Ajax</title> </head> <body> <input type="button" value="获取数据" onclick="getData()"> <div id="div1"></div> </body> <script> function getData() { // 创建XMLHttpRequest对象 var xmlHttpRequest = new XMLHttpRequest(); // 发送异步请求 xmlHttpRequest.open('GET', 'https://xxx/json_demo.json'); xmlHttpRequest.send(); // 发送请求 // 获取服务响应数据 xmlHttpRequest.onreadystatechange = function () { if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) { document.getElementById('div1').innerHTML = xmlHttpRequest.responseText; } } } </script> </html> Axios Axios对原生的Ajax进行了封装,简化书写,快速开发。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ajax-Axios-案例</title> <!-- 引入axios库 --> <script src="js/axios-0.18.0.js"></script> <!-- 引入Vue.js --> <script src="js/vue.js"></script> </head> <body> <div id="app"> <!-- 数据展示表格 --> <table border="1" cellspacing="0" width="60%"> <!-- 表头 --> <tr> <th>编号</th> <th>姓名</th> <th>图像</th> <th>性别</th> <th>职位</th> <th>入职日期</th> <th>最后操作时间</th> </tr> <!-- 数据行,使用Vue.js的v-for指令循环渲染 --> <tr align="center" v-for="(emp,index) in emps"> <td>{{index + 1}}</td> <!-- 显示编号 --> <td>{{emp.name}}</td> <!-- 显示姓名 --> <td> <img :src="emp.image" width="70px" height="50px"> <!-- 显示图像 --> </td> <td> <span v-if="emp.gender == 1">男</span> <!-- 根据性别显示男或女 --> <span v-if="emp.gender == 2">女</span> </td> <td>{{emp.job}}</td> <!-- 显示职位 --> <td>{{emp.entrydate}}</td> <!-- 显示入职日期 --> <td>{{emp.updatetime}}</td> <!-- 显示最后操作时间 --> </tr> </table> </div> </body> <script> new Vue({ el: "#app", data: { emps: [] // 存储员工数据的数组 }, mounted () { // 在Vue实例mounted生命周期钩子中发送异步请求加载数据 axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => { // 异步请求成功后将数据赋值给emps数组 this.emps = result.data.data; }) } }); </script> </html> 接口管理平台 Yapi apifox ...

2024-04-22 · 8 分钟 · 3959 字 · updated: 2024-04-22 · ShowGuan

Java20天速成——进阶课程(5)

Java20天速成——进阶课程(5) 网络编程 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信) 基本的通信架构 基本的通信架构有2中形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务器) 无论是CS架构,还是BS架构的软件都必须要依赖网络编程 ...

2024-04-21 · 17 分钟 · 8164 字 · updated: 2022-01-08 · ShowGuan

LeetCode周赛240421

力扣周赛394(20240421) 第三题100290. 使矩阵满足条件的最少操作次数 题目大意:给定一个大小为 m x n 的二维矩形 grid,每次操作可以将任意格子的值修改为任意非负整数。完成所有操作后,需要确保每个格子 grid[i][j] 的值满足以下条件:如果下面相邻格子存在的话,它们的值相等;如果右边相邻格子存在的话,它们的值不相等。返回需要的最少操作次数。 记忆化 实现思路:首先,统计每一列中各个数字的出现次数。然后,使用动态规划的方法,定义函数dfs(i, pre),表示处理到第i列时,前一列的值为pre时的最大操作次数。在dfs中,对于当前列的每个数字,考虑是否修改当前列的值,然后递归处理下一列。利用缓存来避免重复计算。最后返回总的操作次数。 class Solution: # 如果你想不出来,1、你不知道这个知识点 2、 你知道这个知识点但是方向错了 def minimumOperations(self, g: List[List[int]]) -> int: n, m = len(g), len(g[0]) cnt = [[0]*10 for _ in range(m)] for row in g: for k, v in enumerate(row): cnt[k][v]+=1 @cache def dfs(i, pre): if i<0: return 0 res = 0 for v in range(10): if v!=pre: res = max(res, dfs(i-1, v) + cnt[i][v]) return res return m*n - dfs(m-1, -1) 递推 实现思路:首先,对每一列进行遍历,并统计每列中每个数字的出现次数。然后,通过动态规划的方法,使用两个变量f0和f1分别表示当前列处理时,前一列最大能保留的个数和次大能够保留的个数。接着,通过遍历每列中的每个数字,计算当前列的最大操作次数,并更新f0和f1。最后返回总的操作次数。 class Solution: def minimumOperations(self, grid: List[List[int]]) -> int: n, m = len(grid), len(grid[0]) f0, f1, pre = 0, 0, -1 for col in zip(*grid): mx, mx2, x = f0, f1, -1 for v, c in Counter(col).items(): res = (f0 if v!=pre else f1) + c if res > mx: mx, mx2, x = res, mx, v elif res > mx2: mx2 = res f0, f1, pre = mx, mx2, x return m*n - f0 第四题100276. 最短路径中的边 题目大意:给定一个包含n个节点的无向带权图,节点编号从0到n-1,总共有m条边。对于节点0为出发点,节点n-1为结束点的所有最短路,需要返回一个长度为m的布尔数组,如果edges[i]至少在其中一条最短路上,则answer[i]为true,否则为false。 ...

2024-04-21 · 2 分钟 · 989 字 · updated: 2024-04-21 · ShowGuan

Java20天速成——进阶课程(4)

Java20天速成——进阶课程(4) 特殊文件 properties, xml 为什么要用这些特殊文件? 存储多个用户的:用户名, 密码, 家乡, 性别 日志技术 把程序运行的信息,记录到文件中,方便程序员定位bug, 并了解程序的执行情况等。 ...

2024-04-20 · 20 分钟 · 9840 字 · updated: 2024-09-11 · ShowGuan

Java20天速成——进阶课程(3)

Java20天速成——进阶课程(3) 文件操作 File对象 常用方法 public static void main(String[] args) { // 创建File对象,表示文件test.txt的绝对路径 File f1 = new File("D:/JAVA/JavaSeProMax/file-io-app/src/com/showguan/FileDemo/test.txt"); // 创建File对象,表示文件夹JavaSeProMax的绝对路径 File f2 = new File("D:/JAVA"); // 创建File对象,表示不存在的文件路径t.txt File f3 = new File("D:/JAVA/t.txt"); // 输出文件f1的长度(字节数) System.out.println(f1.length()); // 输出文件夹f2的长度,由于f2表示文件夹,而不是文件,因此返回值没有意义 System.out.println(f2.length()); // 输出文件f3的长度,由于文件路径不存在,因此返回0 System.out.println(f3.length()); // 检查文件f3是否存在,返回false,因为文件路径不存在 System.out.println(f3.exists()); // 创建File对象,表示相对路径下的文件test.txt // 相对路径默认从当前工程的根目录开始寻找,因此文件路径不存在 File f4 = new File("file-io-app\\src\\com\\showguan\\FileDemo\\test.txt"); // 检查文件f4是否存在,返回false,因为文件路径不存在 System.out.println(f4.exists()); // 输出文件f4的长度,由于文件路径不存在,因此返回0 System.out.println(f4.length()); } public static void main(String[] args) { // 创建File对象,表示相对路径下的文件test.txt File f1 = new File("file-io-app\\src\\com\\showguan\\FileDemo\\test.txt"); // 创建File对象,表示文件夹file-io-app的路径 File f2 = new File("file-io-app"); // 检查文件f1是否存在,返回true,因为文件路径存在 System.out.println(f1.exists()); // 检查f1是否表示一个文件,返回true System.out.println(f1.isFile()); // 检查f1是否表示一个文件夹,返回false System.out.println(f1.isDirectory()); // 检查f2是否表示一个文件夹,返回true System.out.println(f2.isDirectory()); // 获取文件f1的名称,输出test.txt System.out.println(f1.getName()); // 获取文件f1的长度(字节数) System.out.println(f1.length()); // 获取文件f1最后修改时间 long time = f1.lastModified(); // 格式化最后修改时间并输出 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); System.out.println(sdf.format(time)); // 获取文件f1的路径(创建时使用的路径),输出相对路径file-io-app\src\com\showguan\FileDemo\test.txt System.out.println(f1.getPath()); // 获取文件f1的绝对路径,输出完整的绝对路径 System.out.println(f1.getAbsolutePath()); } 创建文件、目录 import java.io.File; import java.io.IOException; public static void main(String[] args) throws IOException { // 创建File对象,表示新文件test2.txt的路径 File f1 = new File("file-io-app\\src\\com\\showguan\\FileDemo\\test2.txt"); // 创建新文件test2.txt,如果文件不存在则创建并返回true,否则返回false System.out.println(f1.createNewFile()); // 创建File对象,表示新文件夹aaa的路径 File f2 = new File("file-io-app\\src\\com\\showguan\\FileDemo\\aaa"); // 创建新文件夹aaa,如果文件夹不存在则创建并返回true,否则返回false System.out.println(f2.mkdir()); // 创建File对象,表示新文件夹路径a\b\c File f3 = new File("file-io-app\\src\\com\\showguan\\FileDemo\\a\\b\\c"); // 创建新文件夹路径a\b\c,如果路径中的文件夹不存在则递归创建,创建成功返回true,否则返回false System.out.println(f3.mkdirs()); // 删除文件test2.txt,删除成功返回true,否则返回false System.out.println(f1.delete()); // 删除文件夹a,由于文件夹非空,因此删除失败返回false File f4 = new File("file-io-app\\src\\com\\showguan\\FileDemo\\a"); System.out.println(f4.delete()); } public static void main(String[] args) { // 遍历方法,只能遍历一级文件 File f1 = new File("D:\\JAVA"); // 获取D:\JAVA目录下的所有一级文件名 String[] names = f1.list(); // 遍历打印所有一级文件名 for (String name : names) { System.out.println(name); } // 获取D:\JAVA目录下的所有一级文件对象 File f2 = new File("D:\\JAVA"); // 获取D:\JAVA目录下的所有一级文件对象 File[] files = f2.listFiles(); // 遍历打印所有一级文件对象的绝对路径 for (File file : files) { System.out.println(file.getAbsoluteFile()); } // 尝试获取不存在的目录的一级文件对象,返回null File f3 = new File("D:\\JAVA1"); System.out.println(f3.listFiles()); // null // 尝试获取非文件夹的一级文件对象,返回null File f4 = new File("D:\\JAVA\\test1"); // 因为f4代表的路径不是文件夹,因此listFiles()返回null File[] files4 = f4.listFiles(); System.out.println(Arrays.toString(files4)); // null } 递归查找 public static void main(String[] args) throws IOException { searchFile(new File("D:\\文档"), "23暑期青训营笔记"); // 调用搜索文件的方法 } /** * 递归搜索指定目录下的文件,并打印找到的文件的绝对路径,并使用系统默认程序打开该文件。 * @param dir 要搜索的目录 * @param fileName 要搜索的文件名 * @throws IOException 如果发生I/O错误 */ public static void searchFile(File dir, String fileName) throws IOException { // 如果目录为空、不存在或者是文件,则直接返回 if(dir==null || !dir.exists() || dir.isFile()){ return ; } // 获取目录下的所有文件和子目录 File[] files = dir.listFiles(); // 如果目录下存在文件 if(files!=null && files.length>0){ // 遍历目录下的所有文件和子目录 for (File file : files) { // 如果是文件 if(file.isFile()){ // 判断文件名是否包含指定的文件名 if(file.getName().contains(fileName)){ System.out.println("找到了!" + file.getAbsoluteFile()); // 打印找到的文件的绝对路径 Runtime runtime = Runtime.getRuntime(); runtime.exec(file.getAbsolutePath()); // 使用系统默认程序打开该文件 return; // 找到文件后直接返回 } }else{ // 如果是目录,则递归调用搜索文件的方法 searchFile(file, fileName); } } } } 递归删除 public static void main(String[] args) throws IOException { File file = new File("D:\\JAVA\\test1\\test"); // 要删除的目录的路径 deleteDir(file); // 调用删除目录的方法 } /** * 递归删除目录及其所有子目录和文件。 * @param dir 要删除的目录 */ public static void deleteDir(File dir){ // 如果目录为空或者不存在,则直接返回 if(dir==null || !dir.exists()){ return ; } // 如果是文件,则直接删除并返回 if(dir.isFile()){ dir.delete(); return; } // 获取目录下的所有文件和子目录 File[] files = dir.listFiles(); // 如果目录为空,则直接返回 if(files==null){ return; } // 遍历目录下的所有文件和子目录 for (File file : files) { if(file.isFile()){ // 如果是文件,则直接删除 file.delete(); } deleteDir(file); // 递归删除子目录 } dir.delete(); // 删除当前目录 } 字符集 UTF-32 ...

2024-04-19 · 17 分钟 · 8234 字 · updated: 2024-04-19 · ShowGuan

LeetCode笔记

LeetCode笔记 目标:2500分 HOT100 301. 删除无效的括号 题目大意: 给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 ...

2024-04-17 · 26 分钟 · 12788 字 · updated: 2024-10-06 · ShowGuan

Linux

Linux Linux文件系统 FHS3.0(File system Hierarchy Standard) / etc 配置文件 bin 必要命令 usr 二级目录 home 家目录 var 动态数据 VFS虚拟文件系统 内核层抽象出通用的文件系统接口 支持文件、网络、特殊文件系统 ...

2024-04-17 · 17 分钟 · 8430 字 · updated: 2024-04-17 · ShowGuan

LeetCode每日一题(202404)

每日一题(202404) 2009. 使数组连续的最少操作数 题意:给定一个可能有重复元素的数组,可以修改数组中值为任意其他值,问使数组连续的最小操作数。 思路:由于只能改动元素,所以最后的元素个数不变,去重后,枚举每个值作为左端点,则右端点为nums[i]+n-1, 用双指针计算在区间内的元素个数即为可以保留的数字,其他数字修改元素值填满空隙即可。 ...

2024-04-17 · 12 分钟 · 5983 字 · updated: 2024-04-22 · ShowGuan

LeetCode每日一题(202404)

每日一题(202404) 2009. 使数组连续的最少操作数 题意:给定一个可能有重复元素的数组,可以修改数组中值为任意其他值,问使数组连续的最小操作数。 思路:由于只能改动元素,所以最后的元素个数不变,去重后,枚举每个值作为左端点,则右端点为nums[i]+n-1, 用双指针计算在区间内的元素个数即为可以保留的数字,其他数字修改元素值填满空隙即可。 ...

2024-04-17 · 11 分钟 · 5131 字 · updated: 2024-04-22 · ShowGuan

剑指Offer

剑指Offer 数据流中的中位数 用两个堆模拟, 左边大顶堆,右边小顶堆,则两个堆顶是最中间的数字。 添加数字时: 如果输入的是第奇数个(比如第一个,则N初始化为0,插入后N为1,代表一共有一个数字),则先插入大顶堆,然后把堆顶插入小顶堆。保证小顶堆的任意一个值都比大顶堆大。 同样,如果输入的是第偶数个(第二个),则先插入小顶堆,然后将小顶堆最小值插入大顶堆。同样是保证小顶堆的任意一个值都比大顶堆大。 至于先插入哪一个堆是没有关系的,只要保证交替插入不同的堆即可,并且要确保边界问题(比如在奇数个元素的中位数, 只有一个数据时应返回先插入的堆顶值, 否则堆为空会报错)。 ...

2024-04-17 · 5 分钟 · 2475 字 · updated: 2024-04-22 · ShowGuan
« 上一页  下一页  »
© 2026 Kennem's Blog · Powered by Hugo & PaperMod
👤 Visitors: 👀 Views: