3、写不出算法?不用慌!面试不是考试!

hello大家好,我是达同学,一个在大厂工作三年的Java后端工程师。 这是我们6篇文章的第三篇:算法篇。 其实算法的资料网上也是非常多的,这一章我重点想分享的不是怎么复习算法,而是在算法面试中如何应对写不出算法的情况。 哈哈,听起来是不是有点糟糕?可能有同学已经开始想象场景有多尴尬了,脸上发烫、脚趾扣地、思路凌乱,说话磕巴。(别为什么我这么了解,因为我曾经就是这样的!) 打住!不要再尴尬了,这样的想法是完全错误的!我们在面试中应该有的心态是:无论是八股文还是算法题还是其他,答不出来是很正常的!我们在面试里要做的是尽量展示自己的优点,为自己寻求面试通过的机会。 所以首先从心态上纠正自己的学生思维,面试并不是考试!通过了也只不过是找个地方打工罢了。 关于面试心态和技巧,我会在后续(应该是最后一篇)写一篇文章专门来说如何克服,这里就不再多展开了!(周五偷个懒) 好了,有点偏题,我们回到算法面试上来,首先我们要想明白,面试官通过算法到底想考察什么?答案是: 第一,考察代码水平,这里指的是代码规范性和逻辑性,比如 变量、函数的命名是否随意,有没有考虑函数边界、有没有抽函数的意识等常见的数据结构是不是了解,会不会用。遇到问题有没有充分思考,写代码有没有逻辑性。千万不要一看到题就写,写到一半发现思路是错的,这是大忌!最好是先说一下自己的思路再写,这样哪怕写错了,也说明你是经过了思考的。遇到困难会不会想办法解决。你可以不会写,但是可以从一些不同的角度说说你认为的可能的解法,这说明你不是遇到困难就退缩的人。沟通能力,这里就很灵活了,如果你沟通能力很强,可以找机会多和面试官讨论,展示你的交流表达能力。第二,才是能不能解出来这道题。 根据我过往面试的经验,很多时候写不出算法也能通过面试,这个过程中我会不断的和面试官聊我的思路和困惑,并且尝试根据我的想法来写代码,这本身就展示了我处理问题的方式和能力。 前几个月楼主换工作去了另一家大厂,当时这家大厂的二面算法题没写出来,但是依然二面通过了。后来问我的老板(也就是我的二面面试官),他说我当时一直在尝试解决问题,并且代码规范性很不错,又很积极的和他沟通,所以虽然没写出来也给我过了,想着放我去三面看看,后来三面的算法我都OC了,所以就顺利拿到了offer。楼主身边一些朋友换工作时也有很多类似的经历。 所以,在算法面试前,不要抱着"我一定要写出来!"的预期,而是"我写出来就血赚!"。尽量避免预期太高、落差太大导致紧张,反而影响口头表达和其他方面的发挥。题目写不出来就努力把上面说的第一点做到,同时多和面试官交流,说说你对这道题的分析和思路,把能够表达的都表达出来就好啦。 最后,分享一个我觉得不错的算法博主:labuladong,他整理的算法非常全,不过还是和前面那篇如何复习八股文(https://www.nowcoder.com/discuss/557350871567216640)里说的一样,不要关注边角料知识,聚焦最高频的算法! labuladong的博客大家可以自行百度,内容比较多,面试主要看下面四章就够了: 数组链表二叉树动态规划(看第一、二、三小节就好) 我自己基于他的博客,也整理了相关的leetcode题目和解析,如果需要可以关注我后,后台私信问我~ (不关注我,私信也会发的,关注一个呗!) 楼主本硕北邮计算机,在BAT某大厂工作三年。后续会持续和大家分享Java技术和职场经验,欢迎关注我,有问题随时找我交流! 喜欢的同学欢迎关注我的专栏,11月底前会更新完

简单递归题

本来不想用递归做的,最后还是用了 题目如下: 洪尼玛有 n 块长度不同的木板,他想用这些木板拼成一个等边三角形的围栏,好将他的草泥马养在这个围栏里面。现在,给你这 n 块木板的长度,洪尼玛想知道他能否拼成这个围栏?要求:n 块木板都得用上。 输入格式: 第一行为一个正整数 T ,表示有 T 组测试数据。 对于每组测试数据,第一行为一个正整数 n ,表示木板个数;第二行包含 n 个正整数,表示每块木板的长度。 对于 60% 的数据,1≤T≤5,3≤n≤5,每块木板长度大于等于 1 小于等于 100。 对于 100% 的数据,1≤T≤5,3≤n≤10 ,每块木板长度大于等于 1 小于等于 100 。 输出格式: 对于每一组测试数据输出一行。 如果能拼成围栏输出 Yes ,否则输出 No 。 输入样例: 2 4 1 2 3 4 4 1 2 3 3 高中同学问的 最后是用了递归,受不了,本来以为找到了一个优解,最后是根本不行 还是用了递归 代码如下: #include<stdio.h> void sort(int num[], int n); int dg(int num[], int idx, int sum); int tmp, occ[10]; int main(void) { int T, n; int plank[10]; scanf("

Python使用SQLAlchemy

Python使用SQLAlchemy 1 安装SQLAlchemy 备注:本文适用于SQLAlchemy>2.0 # 安装SQLAlchemy pip install SQLAlchemy # 安装pymysql pip install pymysql 参考文档(SQLAlchemy>2.0) https://docs.sqlalchemy.org/en/20/ 创建数据库 # 创建数据库 CREATE DATABASE mytest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; # 切换数据库 USE mytest; # 创建数据 CREATE TABLE article ( a_id INT PRIMARY KEY AUTO_INCREMENT, a_title VARCHAR(50) NOT NULL, a_keyword VARCHAR(100) NOT NULL ) ENGINE=INNODB DEFAULT CHARSET=utf8; 2 源代码 2.1 项目目录 2.2 config_db.py from sqlalchemy import create_engine, MetaData, URL from sqlalchemy.orm import Session, sessionmaker, scoped_session from model.

解决Resolving Android Dependencies问题

无论是谷歌的Admob,还是Unity的Level play, 在windows(win10, win11)下,都出现了resolving android dependencies 报错并且卡住的问题,如图: 主要错误,是找不到这个gradlew.bat文件。 在指定位置(就是报错指向的那个位置),新建一个名为:gradlew.bat的文件,并把下面这个链接里的内容,粘贴到bat里: https://raw.githubusercontent.com/googlesamples/unity-jar-resolver/master/gradlew.bat 在项目中,右键选择【reload】 重新执行: 显示完成: 附注:解决办法,参考了这个视频 https://youtu.be/SBtfuWEN5qk

hybridCLR热更

多种热更方案: Lua方案:Lua虚拟机+Lua代码 ILRuntime(.net虚拟机:面临跨域问题需要写适配器等问题) HybridCLR:不需要像lua一样安装lua虚拟机;AOT代码变成静态代码 原理: hybridCLR是IL2CPP技术的进一步修改,扩充了il2cpp的代码,使他由纯AOT runtime变成AOT+Interpreter混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不进能再android平台,也能再ios、console 等现在的JIT平台上高效地以AOT+interpreter混合模式执行,从底层彻底的支持热更新。其他热更方案是独立的VM,与il2cpp关系本质上相当于mono中嵌入lua的关系。因此类型系统不统一,为了让热更新类型能够继承AOT部分类型,需要写适配器,并且解释器中的类型不能为主工程的类型系统所识别。特性不完整 ,开发麻烦,运行效率低下。 链接: HybridCLR热更新 原理及示例分析 huatuo之AOT泛型限制及原理介绍 huatuo热更框架安装 GameFramework框架接入HybridCLR热更框架 下载: gitee/HybridCLR hybridclr_trial工程 关于作者: walon :Code Philosophy(代码哲学官网) 创始人 毕业于清华大学物理系,2006年CMO金牌,奥数国家集训队成员,保送清华基科班。专注于游戏技术,擅长开发架构和基础技术设施。 现在已经是比较稳定的beta版本,预计正式版在8月份。目前已经支持pc和安卓及ios。已知有十几个项目在移动平台完整运行起来了。 yoyo工程位置: 百度网盘>工作>me>HybridCLR>My projecthuatuo.zip unity2020.3.31f1c1 快速上手 报错 报错1: No ‘git‘ executable was found. Please install Git on your system then restart 问题搜索,重启电脑就可以了 Git下载地址 Project has invalid dependencies No git executable was found 解决1: 未安装点击安装hybridclr hybridclr->generate->all hybridclr->build->buildassetscopytostreamingassets 点击windows上的hybridclr-》build->win64 报错2: Building Library\Bee\artifacts\WinPlayerBuildProgram\mpmc6\bt9a_o_vm6.lump.obj failed with output: xg9o_vm6.lump.cpp原因是vs2022的问题

nvm安装使用及全局配置node

一、nvm是什么? nvm是一个node的版本管理工具,可以简单操作node版本的切换、安装、查看。。。等等,与npm不同的是,npm是依赖包的管理工具。 二、nvm的安装。 1.windows包下载地址: 下载nvm安装包,下载地址:https://github.com/coreybutler/nvm-windows/releases 2. 双击安装文件 nvm-setup.exe文件进行安装: (1)安装 (注意这里:默认安装到C盘,可以修改地址,之后就不用配置环境变量了) 之后finish就完成安装了。完成可以以下方式检测 ⚪如果安装到D盘,则需要配置相对应的环境,如图:(输入相对应的文件位置) 注意:选择的地址不能含有中文或者空格 (2)配置 找到nvm文件位置,点开setting 然后在它后面输入以下代码:(这是配置镜像源) node_mirror: https://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/ 三、使用 1.先卸载之前的node.js,保证卸干净 2.在刚刚的nvm文件位置打开cmd 3.输入以下代码查看nvm可安装的node版本 nvm ls // 看安装的所有node.js的版本 nvm list available // 查显示可以安装的所有node.js的版本 4.安装所对应的版本。 nvm install 版本号 // 例如:nvm install 14.19.0 5.切换到安装的版本 nvm use 版本号 // 切换到使用指定的nodejs版本 6.检测是否切换完成,新开一个cmd node -v 四、nvm的一些命令 nvm命令行操作命令 1,nvm nvm list 是查找本电脑上所有的node版本 - nvm list 查看已经安装的版本 - nvm list installed 查看已经安装的版本 - nvm list available 查看网络可以安装的版本

linux磁盘清理

目录 排查过程1、查看磁盘占用情况2. 按照占用大小进行倒排-当前目录及其子目录3.当前目录磁盘占用情况 清理命令 排查过程 1、查看磁盘占用情况 df -h df -h 命令用于显示磁盘空间的使用情况,以人类可读的方式呈现,其中:df 是 “disk free” 的缩写,用于查看文件系统的磁盘空间使用情况。-h 是 “human-readable” 的缩写,它让 df 命令以人类可读的方式显示磁盘空间信息,即将磁盘大小以适当的单位(如 GB、MB、KB)进行转换,以便更容易理解。 df -h 命令通常会列出以下信息: Filesystem: 文件系统的名称或挂载点。Size: 文件系统的总大小,以人类可读的单位显示,如 GB、MB、KB。Used: 文件系统已使用的空间,以人类可读的单位显示。Used: 文件系统已使用的空间,以人类可读的单位显示。Avail: 文件系统剩余可用的空间,以人类可读的单位显示。Use%: 文件系统已使用空间的百分比。Mounted on: 文件系统的挂载点,即文件系统连接到的目录路径。 通过运行 df -h 命令,您可以快速了解系统中各个文件系统的磁盘使用情况,以便及时采取必要的管理或清理措施,以防止磁盘空间不足的问题。 2. 按照占用大小进行倒排-当前目录及其子目录 du -ah|sort -rn|head -10 用于查找并列出当前目录及其子目录下占用磁盘空间最大的文件或目录。下面是对命令的解释: du -a: 这个部分是 du 命令,它用于计算目录及其子目录的磁盘使用情况。-a 选项表示列出每个文件和目录的详细信息,而不仅仅是目录的总大小。sort -rn: 这个部分是 sort 命令,它用于对 du 命令输出的结果进行排序。-r 选项表示按照逆序(从大到小)排序,-n 选项表示按照数值大小排序,而不是按照字母顺序。head -5: 这个部分是 head 命令,它用于显示排序后的结果的前几行。-5 选项表示显示前 5 行,即磁盘使用情况最大的前 5 个文件或目录 3.当前目录磁盘占用情况 du -hd 1|sort -rh|head -10 以下是对命令 du -h -d 1 | sort -rh 的解释:

基于javaweb+mysql的springboot校园报修管理系统(java+springboot+bootstrap+jsp+maven+mysql)

基于javaweb+mysql的springboot校园报修管理系统(java+springboot+bootstrap+jsp+maven+mysql) 私信源码获取及调试交流 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功能说明 基于javaweb+mysql的SpringBoot校园报修管理系统(java+springboot+bootstrap+jsp+maven+mysql) 项目介绍 本项目为后台管理系统,包括管理员与学生两种角色; 学生包含以下功能: 学生提交报修,添加维修,催单,水电缴费,登录页面等功能。 管理员包含以下功能: 查看所有报修单,催单,维修安排,学生管理,添加学生,维修人员管理等功能。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 4.数据库:MySql 5.7版本; 技术栈 后端:SpringBoot 2. 前端:JSP+CSS+JavaScript+jquery+bootstrap 使用说明 运行项目,输入localhost:8080/ 登录 repair = repairService.getRepairById(maintenance.getRepairId()); // 以下状态的报修单对应的维修记录就没必要显示了 // 1. 被学生删除 // 2. 学生同意取消 // 3. 已经验收 if (repair.getStatus() == RepairEnum.DELETED_BY_STUDENT.getState() || repair.getStatus() == RepairEnum.CANCELED_AGREE.getState() || repair.getStatus() == RepairEnum.CONFIRM.getState()) { continue; } technician = technicianService.getById(maintenance.getTechnicianId()); maintenanceResults.add( new MaintenanceResult( maintenance.

〔004〕虚幻 UE5 像素流部署

✨ 目录 ▷ 启用像素流插件▷ 打包项目▷ 下载环境包▷ 手动下载▷ 安装信令服务器环境▷ 启动信令服务器▷ 设置启动参数▷ 启动程序▷ 网页运行▷ 开启触控界面 ▷ 启用像素流插件 打开虚幻启动程序,选择 编辑 后点击 插件在插件列表中搜索 pixel streaming 关键字,勾选后重启软件即可 ▷ 打包项目 点击 平台 选择 Windows,然后选择 打包项目选择打包的目录,路径中不要存在中文,不然打包大概率会出现各种各样的问题打包的时候配置,如果是测试,就选择默认,如果是上线,就选择 发行 ▷ 下载环境包 打包成功后,会在文件夹中生成一个 Windows 目录,进入 \Windows\project_001\Samples\PixelStreaming\WebServers 下可以看到其中有 get_ps_servers 名称的两个运行脚本,bat 是 windows 中运行的,如果是 linux 就运行 sh 文件运行时,可以看到其实就是从 github 上下载一个压缩包文件 ▷ 手动下载 如果直接运行脚本下载不了,最好就推荐手动下载了,打开 https://github.com/EpicGames/PixelStreamingInfrastructure/releases/选择正确的 UE版本,然后点击下面的 Assets ,根据系统下载即可,然后将压缩包放到\Windows\project_001\Samples\PixelStreaming\WebServers 下,解压即可 ▷ 安装信令服务器环境 将压缩包下载解压好后,进去压缩包的中 SignallingWebServer\platform_scripts 目录下如果是 windows 系统就选择 cmd 下的 setup.bat 双击运行安装环境如果是 linux 系统就选择 bash 下的 setup.

物联网毕设 -- 智能拐杖(APP+GPS)

前言 本款拐杖利用超声波传感器、心率监测传感器、GPS定位传感器,实时监测前方是否有障碍物阻挡、心率变化以及老人的具体位置。可以设置心率的阈值,在不正常区间内发送报警信号,并将检测到的数据实时联网上传看护人员可以通过手机App端实时查看老人生理状态与位置信息,也可以查看近期内的心率的数据变化,老人也可以通过按键主动发送报警信号。老人正前方有障碍物时,拐杖启动蜂鸣器进行提醒。 ⚠️⚠️(本文章仅提供思路和实现方法,并不包含代码,需要代码的同学请自行联系博主) ⚠️⚠️(有疑问或需要定制或者技术支持等,也请自行联系博主)⚠️⚠️ 前言 一 连线图 1. 原理图 2. PCB效果 3. 实物效果 4. 功能概括 (1)硬件端 (2)APP端 (3)云平台端: 演示视频 二 底层代码使用方式 1. 使用说明 2. 下载程序 3. 查看云平台 三 APP使用方式 四 程序修改部分 1.硬件代码 2.软件代码 一 连线图 1. 原理图 2. 开发板上有一个内置LED灯,用于指示网络连接状态和数据获取状态。 (1) 当开发板成功连接至云平台时,LED灯和蜂鸣器会在启动时闪烁一下,OLED显示屏自动显示联网状态。 (2) 硬件设备每隔8秒会自动向云平台传输一次数据,同时LED灯的状态也会相应改变,以示意数据的传输。 2. PCB效果 3. 实物效果 注意:我们根据实际情况将激光测距改为了超声波测距,实际不影响程序程序的正常运行 4. 功能概括 (1)硬件端 1. GPS定位模块:通过该模块可以获取老人的时间和位置信息,并将老人的实时位置显示在App端的地图上。此外,还可以通过Wi-Fi模块将老人的信息上传到收集端和OneNet云平台。 2. 开关距离报警:老人可以通过一键操作来关闭或者启动拐杖的距离报警功能。 3. 超声波检测模块:当拐杖前方3米范围内检测到有人时,超声波传感器会自动触发拐杖的震动和声音提醒,以避免老人发生碰撞等事故。 4. 心率检测模块:该模块可以实时检测老人的心率变化,如果心率超过设定的阈值,则会触发警报,并将相关信息上传至App端和OneNet云平台。 5. 一键报警模块:老人可以通过按下一键报警模块来发出紧急警报,并将实时位置和心率信息上传至App端和OneNet云平台。 6. 无线传输模块:通过ESP 8266 Wi-Fi模块,可以实现数据的无线传输,并将子节点传递过来的信息上传至App端和OneNet云平台。 (2)APP端 (3)云平台端: 获取经纬度和心率数据显示到平台中 演示视频 链接:https://pan.

解决Android13上读取本地文件权限错误记录

Android13 WRITE_EXTERNAL_STORAGE 权限失效 1. 需求及问题 需求是读取sdcard上txt文件 Android13(targetSDK = 33)上取消了WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE权限。 取而代之的是READ_MEDIA_VIDEO,READ_MEDIA_AUDIO,READ_MEDIA_IMAGES权限 测试发现,即便动态申请上面三个权限,仍旧无法读取本地txt文件 2. 解决方案 AndroidManifest.xml中增加android.permission.MANAGE_EXTERNAL_STORAGE权限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.LocationDemo" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> Activity中新增代码 // 方案一:跳转到系统文件访问页面,手动赋予 Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(Uri.parse("package:" + this.getPackageName())); startActivity(intent); // 方案二:跳转到系统所有需要文件访问页面,选择你的APP,手动赋予权限 Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); startActivity(intent); 作者:OpenGL 链接:https://juejin.cn/post/7283152332622610492 关注我获取更多知识或者投稿

工具类-封装通用编程式事务

前言 大家都知道,spring为我们提供了编程式事务、声明式事务 一、编程式事务 声明式事务是大家使用得比较多的一种方式,这里就不再多说。 主要说下编程式事务,编程式事务的主要目的是减小事务粒度,使回滚数据可以是由开发人员手动控制,代码看起来更清晰些。同时在回滚时可以根据自己需求再处理点业务或记录些信息,当然开发起来也比声明式要多点步骤。 下面写一个简单的编程式事务实例。 1、有返回结果 public void manual() { AccountCycleDo accountCycleDo = AccountCycleDo.create(); //第一次执行新增数据 dataSourceDao.insertTest(accountCycleDo); //第二次执行新增数据,在下面因为唯一键冲突后回滚的只是第二次执行的新增数据 Integer num = transactionTemplate.execute(transactionStatus -> { try { //执行业务 return dataSourceDao.insertTest(accountCycleDo); } catch (Exception e) { log.error("有返回值,Exception,{}", e); //回滚 transactionStatus.setRollbackOnly(); return -1; } }); } 2、无返回结果 public void manual() { AccountCycleDo accountCycleDo = AccountCycleDo.create(); //第一次执行新增数据 dataSourceDao.insertTest(accountCycleDo); //第二次执行新增数据,在下面因为唯一键冲突后回滚的只是第二次执行的新增数据 transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { try { //业务代码 dataSourceDao.insertTest(accountCycleDo); } catch (Exception e) { log.

微信小程序scroll-view真机出现滚动条如何隐藏

微信小程序scroll-view真机出现滚动条如何隐藏 scroll-view{ height:170rpx; overflow-y: hidden; overflow-x: auto; } ::-webkit-scrollbar{ width: 0; height: 0; color: transparent; } 注:在小程序开发者工具上测试和IOS上都是完美的,由于别人的手机是安卓,所以出现此bug 注:仅记录,便于查找

ssh远程连接不了虚拟机ubuntu

直奔主题 1. 确保linux安装了ssh2.查看网络适配器是否启用3.连接成功 1. 确保linux安装了ssh sudo apt-get install openssh-server 2.查看网络适配器是否启用 3.连接成功

LeetCode热题100——动态规划

动态规划 1. 爬楼梯2. 杨辉三角3. 打家劫舍 1. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? // 题解:每次都有两种选择,1或者2 int climbStairs(int n) { if (n <= 0) return 0; vector<int> dp(n+1, 0); dp[0] = 1; dp[1] = 1; for (int i = 2; i <= n; ++i) { dp[i] = dp[i-1] + dp[i-2]; } return dp[n]; } 2. 杨辉三角 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 // 题解:从第三层开始,累计和 vector<vector<int>> generate(int numRows) { vector<vector<int>> result(numRows); for (int i = 0; i < numRows; ++i) { result[i].

idea中的sout、psvm快捷键输入,不要太好用了

目录 一、操作环境 二、psvm、sout 操作介绍 2.1 psvm,快捷生成main方法 2.2 sout,快捷生成打印方法 三、探索 psvm、sout 底层逻辑 一、操作环境 语言:Java 工具: 二、psvm、sout 操作介绍 2.1 psvm,快捷生成main方法 第一,输入psvm 注:只要有 psvm ,即使没有图中的提示,进行下面的操作,都能自动生成main方法。 第二,点【Tab】键 第三,自动出现main方法 2.2 sout,快捷生成打印方法 第一,输入sout 注:只要有 sout ,即使没有图中的提示,进行下面的操作,都能自动生成打印方法。 第二,点【Tab】键 第三,自动出现打印方法 三、探索 psvm、sout 底层逻辑 【File】→【Settings】 【Settings】→【Editor】→【Live Templates】 psvm 默认配置 sout 默认配置 我是程序员娟娟, 致力将工作中遇到的问题和解决方案记录下来, 分享给更多需要的同行。 如果对你有帮助,不妨点个关注吧!

如何挖掘xss漏洞

漏洞描述 跨站脚本(XSS)漏洞是一种常见的 Web 应用程序安全漏洞,攻击者利用该漏洞可以向网页中插入恶意脚本代码,当用户访问包含恶意脚本的网页时,这些脚本就会在用户的浏览器中执行,从而导致攻击者能够窃取用户的会话信息、篡改页面内容、甚至获取用户的敏感信息。 漏洞原理 XSS漏洞通常是由于应用程序未对用户输入进行充分的过滤和验证导致的。攻击者可以通过在包含用户输入的网页中插入恶意的脚本代码,比如JavaScript代码,然后等待用户访问包含恶意脚本的页面,从而触发恶意脚本的执行。 漏洞场景 XSS漏洞通常出现在需要用户输入的地方,比如评论框、搜索框、用户注册等地方。如果应用程序未对用户输入进行充分的验证和过滤,就容易受到XSS攻击。 漏洞场景 Windows操作系统下的DVWA靶场 用DVWA中的xss来进行漏洞验证 可以使用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做 POC(Proof of Concept)。验证 XSS 漏洞存在的 POC 如下: <script>alert(/xss/);</script> <script>confirm(/xss/);</script> <script>confirm('xss');</script> <script>prompt('xss');</script> 如果页面弹窗,浏览器把用户提交的字符串当做 JS 来执行,并且执行成功,说明 XSS 漏洞存在。 开始验证 在dvwa靶场打开xss漏洞 提交之后出现xss弹窗 证明存在xss漏洞 但是这种测试太明显,容易被waf 等防御措施发现 XSS 攻击的特征。 可以测试一下代码是否可以原样返回 输入<lyy> 测试一下 这里测试用最高等级发现关键字符被 HTML 实体编码,说明此 XSS 漏洞不可利用 漏洞防御 输入验证和过滤:对用户输入进行严格的验证和过滤,确保输入的数据符合预期的格式和范围。转义输出数据:在输出用户输入数据到网页时,需要对数据进行适当的转义,以防止恶意脚本的执行。使用CSP(内容安全策略):CSP是一种可以限制网页中脚本执行的安全策略,可以有效防御XSS攻击。使用HttpOnly标记:将Cookie标记为HttpOnly,可以防止被XSS攻击窃取。

路线规划问题

文章目录 1、问题描述2、节点类设置3、设置节点之间的关系4、路线规划5、完整类6、结果7、优化 1、问题描述 如下图,存在A~F六个地点,已知所有地点的相关关系(每个地点能到达的下一节点名称以及对应的路程); 计算某个起点(A~F)到某个终点(A~F)所需要的路程以及经过的地点顺序 2、节点类设置 public class Node { // 当前节点名称 public String name; // 记录当前节点所能能到达的节点路程 节点名称:对应的路程 public Map<String,Integer> map = new HashMap<String,Integer>(); // 存储所有能到达节点的对象 public List<Node> nodeList = new ArrayList<Node>(); public Node(){} public Node(String name){ this.name = name; } public void setValue(String key,Integer value) { map.put(key,value); } public void setNode(Node node) { nodeList.add(node); } } 3、设置节点之间的关系 public static Node setRoute() { Node nodeA = new Node("A"); Node nodeB = new Node("

聊一聊这些年用过的网盘/云盘工具

今天来聊一聊团队协作工具中的网盘(或者叫云盘)。随着业务与团队的发展,大量的文档需要归档、需要分享,既是知识沉淀、也是团队协作。FTP算是我用过的最早的文件服务,不过放在当下来看,大可用“古老”一词来形容。所以,今天就不再拿来啰嗦了。 百度网盘 说到百度网盘,最早是从个人网盘使用开始的。而说到网盘,就不得不提到2016年,那一年绝大部分网盘服务都关停了,包括UC、新浪、迅雷、华为、腾讯、360等等。至于为什么,不是今天的重点,就省略了。基本就只剩下百度坚持没关。后来这些年,网盘服务又逐渐复苏起来了。但是,经历过了这一波折腾之后,也不再用于团队协作了。此外,还需要在会员费和限速之间找到合适的平衡或者取舍。 钉钉云盘 用钉钉云盘的好处就是与钉钉的整合。对于日常工作沟通与协作中主要使用钉钉的团队来说,会方便一些。除了有团队文件与个人文件,聊天群也有群文件夹。 但是,令人糟心的,也是放弃它的直接原因,就是文档超过一定天数不使用,就自动清除了,需要管理员到管理后台找回来。 可道云(KodExplorer) 在探索第三方软件搭建私有的网盘系统的过程中,KodExplorer是使用得最久的。没有选择名气更大的Seafile等,主要考虑的点是Kod的文件是完整存储,不分块的,而且目录结构也是一目了然的。万一网盘系统出问题,或者需要迁移数据,更方便。 KodExplorer的系统搭建比较简单,环境也就是LAMP。需要注意的是,默认配置对大文件上传支持不好,必须得修改。 另外,免费版/个人版只适用于几个人的小团队,所以稍大一点的团队,费用是一个需要考虑的问题。 立码(Risma.Cloud) 除了自己搭建私有网盘系统,又发现risma.cloud公有云的云盘服务也支持挂载第三方存储(阿里云OSS、华为云OBS、腾讯云COS),而且文件也是完整存储的,包括目录结构。这个的优点就是,既节省了自己部署私有系统的成本(包括经济上的和时间上的),又提供了数据备份或迁移的便利性。 Risma默认已经集成了Office文档的在线预览功能,不知道未来会不会开放在线编辑功能。除了云盘,Risma还提供了一些其他的团队协作功能,这里就不展开了。有点不足的是,没有找到risma有App。好在网站适配了手机浏览器,功能也挺完整,也可以开启通知提醒。最值得强调的就是,人家是完全免费的。 结尾 网盘系统可以说是团队协作中最基础的,也是最必不可少的。针对不同的团队、不同的场景,也可能是需要不同的网盘系统来适合的。实际上,目前我们团队就是多个系统并存的,有的主要用于团队内部归档的,有的主要用于团队内部沟通与协作更频繁,有的主要用于外部文件导入的...... 今后,还将继续补充与更新。

BOA-SVM算法学习

使用BOA算法来找到SVM的最优超参数 这段代码使用了蝴蝶优化算法(BOA)来优化支持向量机(SVM)的超参数(C和gamma),以提高SVM在分类问题上的性能。以下是主要步骤和作用: 定义优化函数 fun(X): fun 函数包括了SVM分类器的训练和性能评估。SVM的超参数C和gamma由优化算法进行调整。优化的目标是最小化错误率,即最大化准确率。 数据预处理: 通过ovs_preprocess函数对数据集进行预处理,包括标准化、划分训练集、验证集和测试集等。 使用蝴蝶优化算法进行超参数优化: 设置蝴蝶算法的参数,如种群数量、最大迭代次数、维度、上下界等。调用BOA.BOA函数进行蝴蝶算法的优化,得到最优适应度值和最优解。 训练SVM分类器: 利用蝴蝶算法得到的最优超参数,实例化SVM分类器,并使用训练数据进行训练。 性能评估: 使用训练好的SVM分类器对训练集和测试集进行预测,并计算准确率。 绘制适应度曲线: 将蝴蝶算法的适应度曲线绘制出来,以观察算法在迭代过程中的性能变化。 总体而言,这段代码的主要作用是利用蝴蝶优化算法来寻找最优的SVM超参数,以提高在给定数据集上的分类性能。 学习测试代码 import warnings import BOA_SVM.BOA as BOA import numpy as np from matplotlib import pyplot as plt from sklearn import svm from sklearn.metrics import accuracy_score from OriginalVibrationSignal import ovs_preprocess warnings.filterwarnings("ignore") '''优化函数 使用了蝴蝶优化算法(BOA)来优化支持向量机(SVM)的超参数(C和gamma),以提高SVM在分类问题上的性能 ''' def fun(X): classifier = svm.SVC(C=X[0], kernel='rbf', gamma=X[1]) classifier.fit(x_train, y_train) tes_label = classifier.predict(x_test) # 测试集的预测标签 train_labelout = classifier.predict(x_train) # 测试集的预测标签 output = 2 - accuracy_score(y_test, tes_label) - accuracy_score(y_train, train_labelout) # 计算错误率,如果错误率越小,结果越优 return output ''' =================================读取数据集,进行数据预处理操作==================================================== ''' num_classes = 10 # 样本类别 length = 784 # 样本长度 number = 200 # 每类样本的数量 normal = True # 是否标准化 rate = [0.