驼峰工具类

import org.apache.commons.lang3.StringUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 字符串转为驼峰格式 构建工具类 * @author: wenyong.wang@kuwo.cn * @version: v1.0 * @description: cn.kuwo.added.service.ui * @date:2023/2/20 */ public class CaseFormat { private static Pattern UNDERLINE_PATTERN = Pattern.compile("_([a-z])"); public static String conver(String str){ if (StringUtils.isBlank(str)) { return str; } return underlineToHump(str.toLowerCase()); } public static String underlineToHump (String str){ //正则匹配下划线及后一个字符,删除下划线并将匹配的字符转成大写 Matcher matcher = UNDERLINE_PATTERN.matcher(str); StringBuffer sb = new StringBuffer(str); if (matcher.find()) { sb = new StringBuffer(); //将当前匹配的子串替换成指定字符串,并且将替换后的子串及之前到上次匹配的子串之后的字符串添加到StringBuffer对象中 //正则之前的字符和被替换的字符 matcher.

ASP .NET(基于.NET 6.0)源码解读

这几天一直在琢磨在我现有技术认知基础上,未来如何做技术提升。 日思夜想,我整理出了我自己的一套学习规划方案,并希望在实施过程中能够不断调整学习方案与方式,以接近自我提升的效率最大化。 从以下几个大的方面来得到提升: 看源码算法与数据结构经典书籍 如果我切实能从以上方面有所收获并不断深入遇到瓶颈时,我可以考虑: 看基础(操作系统,计算机组成原理...)数学... 一切看起来都是那么庞大...,每一个点都可以琢磨三五年,成长是需要从长计议的,上面的方案也需要在一个合适的时间(初版先体验,感受)写出细节。人是矛盾的,有时候我总担心过度思考,最终得不到一个好的执行;有时候直接拿起来做又担心战略方向错误,这又需要不断磨练精进自我的思维能力。不过现在来说,我最需要拿出执行力。 如果是看源码的话,我能够得到的了解/提升: 扎实语言基础知识,所以我在看源码过程中,如果涉及到比较生疏的知识点,我也会动手coding并做记录某个概念的底层实现(如依赖倒置、并发模型)某个组件的工作流优秀的代码设计 我会怎么做: 带着问题看记录看的过程了解源码后,能够在此源码基础上添加新功能 看源码过程中涉及到的比较生疏的知识点 => lambdaget属性的简写 _age == _age01: 使用_age => a * b 而不是 _age = a * b的好处是:前者可以在被调用前再计算右边的算式,后者需要在全局变量被加载时,就计算出右边的算式。换句话说,前者是懒加载,后者是预加载。前者可以做到比较好的性能管理。 using语句在哪里? .net6默认采用的c#语法版本是c# 10,所以在asp .net 6 mvc的program.cs中看不到using语句。c#支持global using,意思是可以将可能在多个类文件中同时引用的程序集写在一个地方,如using.cs。但是我看了每一个文件,都没看到我想看到的那个“using.cs”,其实是asp .net 6把这个配置写在了项目模版中(.csproj) 启用此配置,global using默认会有: 看源码实现时,方法内容全是throw null? 这是因为微软在C# 7.1开始,引入了“引用程序集”的概念,源码有具体实现说项目引用的是实现程序集。引用程序集更轻量化、兼容性更强。微软对引用程序集的说明:引用程序集。微软就不能给个配置方式,可以让我们引用实现程序集,方便调试与代码理解.. 那么如果我们想看源码应该怎么破? 找到对应的dll,反编译 .net的反编译工具:ILSpy.net core为开源项目,可以从github获取源码 源码地址:aspnetcore(注意通过切换分支/tag的方式切换到当前框架版本) new(): new关键字可以作为运算符、修饰符以及约束。 作为运算符时,可以创建对象。 C# 9之前和c# 9之后的写法: //c# 9 before private List<int> ints01 => new List<int>(); //C# 9 later private List<int> ints02 => new(); 新的写法可以达到简化代码的目的。

Python数据结构详解(一)

学习一门语言,了解其数据结构是基础。由于Python是动态编程语言,所以在定义变量时并不需要事先指定变量的数据类型,变量的声明和初始化是同时进行的。 Python有如下五大数据结构类型: 1、Number类型 2、字符串类型 3、列表,元组 4、字典 5、集合 下面我们逐一来了解一下~ 本篇详细介绍Number类型 一、Number类型 Number类型,又叫数字类型,是Python中最基本的数据结构类型,分为整数类型(如 1、2)、浮点类型(1.1、2.2)、复合类型(1+2j)及布尔类型(True、False)。 1.1 整数类型 1.1.1 整数类型表达方式 整数类型表达方式有二进制、八进制、十进制与十六进制 二进制:以“0B”或“0b”开头(比如0b101)八进制:以 “0o”或“0O”开头(比如0o510)十进制:比如10、29、40十六进制 :以“0x”或“0X”开头(比如0xA7A) 不同进制的转换函数如下: x = 10 # 十进制转换为二进制,输出形式是字符串 y = bin(x) print(y, type(y)) # 十进制转换为八进制,输出形式是字符串 z = oct(x) print(z, type(z)) # 十进制转换为十六进制,输出形式是字符串 w = hex(x) print(w, type(w)) # 接收一个符合整型规范的字符串,并将字符串转换为整型 s = "111" r = int(s) print(r, type(r)) 输出结果: 1.1.2 大整数 Python语言非常牛X的一个特点就是可以处理大整数,别的语言可能需要通过字符串来转换(面试经常考),而Python不需要,因此Python基本不用担心数字溢出问题,这也是Python广泛应用在科学计算的主要原因。 输出超过32位的整数,伸手就来 print(2**40) 再也不用考虑数字溢出问题了,人生苦短,我用Python! 1.1.3 数字中支持下划线 Python 3.6中引入的新特性,数字中支持使用下划线,方便阅读,字符串format方法也支持了 ‘_’ 选项,当格式化为浮点数或整数时,以3位分隔,当格式化为 ’b’ , ’o’ , ’x’ 和 ’X’ 时,以4位分隔

记一次KindEditor表格修改无效问题

项目说明 项目是由UmiJS创建的(React+Ant Design4.2),项目需求是富文本编辑器录入多样内容,可供查看。 通过各方探索以及客户的沟通,选定了KindEditor编辑器,通过iframe嵌入。但仍有很多不符合要求的地方,所以要进行很多魔改。 同时伴随着客户的使用体验,针对问题进行修复。 起因及详细说明 客户提出一个问题:表格整体由居左修改为居中后,点击保存,在显示区域里仍是居左,修改无效。 项目页面中,编辑器所在位置是一个弹窗里,编辑器通过子组件里iframe嵌入,通信是props和postMessage/onMessage // 父页面 <Modal onOk={handleOk}> ... <KindEditor initValue={initValue} setContent={setValueList} ></KindEditor> ... </Modal> const handleOk = () =>{ // 参数校验 // 接口请求 } // 子组件 const KindEditor = (props) =>{ ... const setContent = props.setContent; window.onmessage = (e)=>{ setContent(e.data) } useEffect(()=>{ ... editorDOM.contentWindow.postMessage( { initValue: props.initValue } ); ... },[props.initValue]) } 探查原因 编辑器问题 由于之前客户有提出过文字选中内容加粗偶尔无效问题,而且我在测试环境点击操作几次后,发现表格修改后保存是成功的,所以这一次最初怀疑是编辑器功能不稳定。 但细想下又觉得不对,加粗偶尔失效是在编辑器内操作时候内容文字效果就没有变成加粗效果,而这次对表格修改之后确实是成为了居中。 只是保存之后再查看时候还是和没修改一样,所以应该不是编辑器功能不稳定。 当在本地把代码运行后,在本地环境中终于复现了该问题。 经过几次操作的对比测试,发现有两种情况下结果不同: 修改完之后,马上点击提交,结果是不成功的修改完之后,稍等一会儿,做下其他操作(比如:点击下页面或者滑动下滚动条…),点击提交按钮,结果是成功的。 所以觉得是编辑器通过postMessage/onMessage传值因为网速问题导致传值速度慢,所以在提交按钮中触发方法handleOk中加了延时, // 参数校验 ... setTimout(()=>{ // loading处理和接口请求 .

安全漏洞-linux漏洞修复命令

1、漏洞名称:RHSA-2019:1880: curl 安全和BUG修复更新 修复命令:yum update curl -y && yum update libcurl -y cve编号:CVE-2018-14618 2、漏洞名称:RHSA-2019:2181: curl 安全和BUG修复更新 修复命令:yum update curl -y && yum update libcurl -y cve编号:CVE-2018-16842 3、漏洞名称:RHSA-2020:1020: curl 安全和BUG修复更新 修复命令:yum update curl -y && yum update libcurl -y cve编号:CVE-2019-5436 4、漏洞名称:RHSA-2020:3916: curl 安全更新 修复命令:yum update curl -y && yum update libcurl -y cve编号:CVE-2019-5482 5、漏洞名称:RHSA-2020:1020: curl 安全和BUG修复更新 修复命令:yum update curl -y && yum update libcurl -y cve编号:CVE-2019-5436 这是本次更新的漏洞修复命令,后序会一直更新 免责声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。禁止任何人转载到其他站点,禁止用于任何非法用途。如有任何人凭此做何非法事情,均于笔者无关,特此声明。

解决The dependencies of some of the beans in the application context form a cycle

The dependencies of some of the beans in the application context form a cycle 应用程序上下文中某些 Bean 的依赖关系形成一个循环 Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. 不鼓励依赖循环引用,默认情况下禁止使用循环引用。更新应用程序以删除 Bean 之间的依赖循环。作为最后的手段,可以通过将spring.main.allow-circular-references设置为true来自动打破循环。 解决方法 设置配置文件spring.main.allow-circular-references = true

Redis之分布式锁

随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的 Java API并不能提供分布式锁的能力。为了解决这个问题就需要一种跨 JVM 的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题! 分布式锁主流的实现方案: 1.基于数据库实现分布式锁. 2.基于缓存( Redis等) 3基于 Zookeeper* 每一种分布式锁解决方案都有各自的优缺点: 下面简单记录一下redis的简单方法。 1.redis设置锁 //设置锁 setnx [key] [value] //删除 del [key] 再次设置对应值会设置失败 2.避免锁长时间未释放,设置过期时间 expire [key] [second] 3.同时上锁和设置过期时间 set [key] [value] nx ex [s] 4.解决redis原子性的问题,可以使用lua脚本进行锁的释放。 代码简单实现如下 package com.chd.jot.jothot.modules.system.controller; import com.chd.jot.jothot.modules.system.utils.R; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Arrays; import java.util.UUID; import java.util.concurrent.TimeUnit; @RestController @RequestMapping("/redis") public class RedisController { @Autowired private RedisTemplate redisTemplate; @RequestMapping("/testRedis") public R getUserList(){ //声明一个uuid,将作为一个value 放入我们的key所对应的值中 String uuid = UUID.

【vue-seamless-scroll bug问题记录以及解决】

vue-seamless-scroll bug问题记录以及解决 vue-seamless-scroll 的使用方式,请查看网站链接: 组件官方示例。 问题1:无法自动滚动 解决方案: ①排查limitMoveNum 函数(开始无缝滚动的数据量) 不管动态数据还是静态数据,limitMoveNum 必须小于等于 数据数组长度。若大于则不会自动滚动。 option() { return { step: 0.4, // 数值越大速度滚动越快 limitMoveNum: 2, // 开始无缝滚动的数据量 hoverStop: true, // 是否开启鼠标悬停stop direction: 0, // 0向下 1向上 2向左 3向右 openWatch: true, // 开启数据实时监控刷新dom( 用于计算属性中computed) singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) waitTime: 1000 // 单步运动停止的时间(默认值1000ms) } } ②排查动态数据问题。 后端返回展示数据,前端若要进行业务逻辑的处理,必须一次性将一个数组赋值给vue-seamless-scroll中展示数据。不能一个个push进去。采用的方法定义新数组一次性赋值。 // list 后端传过来数组 var newList = [ ] // 定义新数组 for (var i in list) { newList.

k8s-kubeadm部署

文章目录 一、准备环境二、安装docker三、安装kubeadm,kubelet和kubectl四、部署容器网络五、部署UI 一、准备环境 1.安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64;硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多;集群中所有机器之间网络互通;可以访问外网,需要拉取镜像;禁止swap分区。 2.服务器 k8s-master 192.168.80.81 k8s-node1 192.168.80.82 k8s-node2 192.168.80.83 3、基础环境 #关闭防火墙: systemctl stop firewalld systemctl disable firewalld #关闭selinux: sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭swap: swapoff -a # 临时 sed -ir 's/.*swap.*/#&/' /etc/fstab # 永久 cat /etc/fstab #设置主机名: #hostnamectl set-hostname <hostname> #hostnamectl set-hostname k8s-master #hostnamectl set-hostname k8s-node1 #hostnamectl set-hostname k8s-node2 #在master添加hosts: cat >> /etc/hosts << EOF 192.168.80.81 k8s-master 192.168.80.82 k8s-node1 192.

ansible 命令执行模块和其他常见模块

目录 ansible 命令执行模块和其他常见模块 Ad-hoc 简介命令说明用户说明命令执行模块 shell模块command模块raw模块Ansible常用模块 script模块file模块copy模块yum模块管理服务模块user模块与group模块cron模块synchronize模块filesystem模块mount模块get_url 模块unarchive模块文章转自 ansible 命令执行模块和其他常见模块 Ad-hoc 简介 Ad-Hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令会使用playbook。Ad-hoc的执行依赖于模块,ansible官方提供了大量的模块。 如:command、raw、shell、file、cron等,具体可以通过ansible-doc -l 进行查看 。可以使用ansible-doc -s module来查看某个模块的参数,也可以使用ansible-doc help module来查看该模块更详细的信息。 命令说明 一个ad-hoc命令的执行,需要按以下格式进行执行: ansible 主机或组 -m 模块名 -a '模块参数' ansible参数 主机和组,是在/etc/ansible/hosts 里进行指定的部分,当然动态Inventory 使用的是脚本从外部应用里获取的主机;模块名,可以通过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块可以在该配置文件中进行修改;模块参数,可以通过 “ansible-doc -s 模块名” 查看具体的用法及后面的参数;ansible参数,可以通过ansible命令的帮助信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、是否sudo等。 用户说明 ansible在执行ad-hoc的时候,需要使用远程管理机上的一个用户身份,默认这个用户是root,而在实际生产环境中,不建议直接使用root,而推荐使用一个普通用户,需要配置该普通用户可通过sudo提权。 需要说明的是,通过上面的操作,需要为ansible用户先创建密码,在实际生产当中,不建议为该用户设置密码。可在安装系统时,提前将管理端公钥直接写入到被管理节点的ansible用户下 命令执行模块 命令执行模块包含如下 四个模块: command模块:该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有如下字符部分则执行不成功 “ "<", ">", "|", "&" ;shell 模块:用法基本和command一样,不过其是通过/bin/sh进行执行,所以shell 模块可以执行任何命令,就像在本机执行一样;raw模块:用法和shell模块一样,也可以执行任意命令,就像在本机执行一样;script模块:将管理端的shell 在被管理主机上执行,其原理是先将shell 复制到远程主机,再在远程主机上执行,原理类似于raw模块。 raw模块和comand、shell 模块不同的是其没有chdir、creates、removes参数,chdir参数的作用就是先切到chdir指定的目录后,再执行后面的命令,这在后面很多模块里都会有该参数 。 shell模块 root@node1 ansible]# ansible web -m shell -a "

JVM—并发垃圾收集器CMS

前言 当GC时需要枚举的GC根节点需要极短的停顿(STW) 而在遍历GC引用链时,如果用户线程是停顿的,那么不会改变引用,GC线程遍历标识即可 但随着堆内存中对象的增多,引用链会越来越长,如果持续让用户线程停顿,在某些需要低延迟的场景是不理想的 因此希望能在这个环节让用户线程和GC线程能够并发执行,并发执行就会存在改变对象引用,可能导致对象消失问题,其中可以使用增量更新和原始快照的方式解决,而CMS使用的就是增量更新 Concurrent Mark Sweep CMS全称Concurrent Mark Sweep 并发标记清除收集器 CMS是老年代收集器,采用标记-清除算法,年轻代常用ParNew收集器,以最短停顿时间(低延迟)为目标的收集器 CMS并没有使用标记-整理算法,因为标记、清理阶段是和用户线程并发执行的,如果使用标记-整理算法可能会导致移动引用的位置导致出错 执行步骤 初始标记: 标记GC Roots直接关联的对象(STW时间极短) 并发标记: 从GC Roots直接关联对象开始遍历整个引用链的过程(耗时长,不需要停顿用户线程,用户线程与GC线程并发执行) 重新标记: 使用增量更新避免对象消失问题,修正并发标记期间改动的对象(需要STW,耗时比步骤1长,比步骤2短) 并发清除: 清理标记阶段判断已死亡的对象、重置状态等(该阶段也是并发执行) 执行图 参数设置 -XX:UseConcMarkSweepGC 老年代使用CMS垃圾收集器,新生代使用ParNew收集器 -XX:CMSInitiatingOccupancyFraction 设置老年代使用多少空间时开始垃圾回收 如果设置的太高,不够内存分配,不能满足并发执行,就会冻结用户线程启动Serial Old收集器,停顿时间就会变长如果内存增长缓慢可以设置高一些,如果内存增长很快就要设置低一些 默认92% -XX:+UseCMSCompactAtFullCollection 指定在FULL GC后是否对内存进行压缩整理开启后,通过-XX:CMSFullGCsBeforeCompaction设置执行多少次FULL GC后进行内存压缩整理 -XX:ParallelCMSThreads 设置GC线程数量 特点 优点: 停顿时间短 只在初始标记,重新标记时STW 并发执行 时间长的并发标记和并发清理与用户线程,加快响应速度,提升用户体验 缺点: 吞吐量降低 在处理器核数少时,GC线程与用户线程并发执行(使用i-CMS解决:减少GC线程独占时间,垃圾回收时间变长,对用户线程执行影响变小) 无法处理浮动垃圾 增量更新通过记录新增引用来避免对象消失问题,可能出现浮动垃圾(不能在这一次的GC中被回收,只能下一次GC时被回收) CMS不能等老年代满了再垃圾回收,因为与用户线程并发执行,所以需要留一部分内存 内存碎片多 多次垃圾回收后进行一次标记-整理算法,采用替补方案Serial Old 总结 本文根据并发垃圾收集器CMS深入浅出的解析CMS执行流程、优缺点以及配置参数等 CMS是一款主打低延迟、使用标记-清除算法的老年代并发垃圾收集器,年轻代常使用ParNew CMS在初始标记时进行STW,接下来遍历引用链时与用户线程并发执行,然后让用户线程短暂STW使用增量更新进行重新标记,最后在并发进行清理、重置等工作 CMS的特点是在遍历引用链、清理时并发执行,能够使用户线程的停顿时间变短;但是带来吞吐量的降低,并且增量更新会导致浮动垃圾的出现,由于老年代使用标记-清除算法,不整理内存将会导致大对象无法存储,替补方案是使用Serial Old单线程标记-整理 如果老年代内存不足或需要整理内存时,会使用Serial Old 单线程处理,这可能导致延迟更高,在高版本中已经有G1等其他垃圾收集器代替CMS,CMS在JDK14时被移除

数字IC设计随笔之七(TCL脚本编程入门)

TCL简介 TCL是Tool Command Language的缩写,主要应用在芯片设计领域中。TCL脚本程序是一系列命令构成的集合,在芯片设计工具中,便于流程化执行,提高效率。 TCL语言与其它脚本语言perl、python类似,作为一种解释型语言,逐行解释执行,出错时将停止运行。TCL语言处理的最基本的对象是字符串,因此,不可以直接进行数学表达式的计算,但可以通过命令进行数学计算,同时可以通过命令创建特殊的数据类型,例如列表(List),数组(Array)等。 TCL语言语法结构为:Command Arg1 Arg2,Command为待执行的命令,Arg1和Arg2为后面跟随的参数,参数的个数根据命令不同而定,对于set命令而言,定义一个变量,其后跟随的第一个参数为变量名,第二个参数为变量的值。在TCL中,命令后跟随的参数可以是其它命令执行的结果,比如Command1 [Command2 Arg1 Arg2],简化编程操作。 特殊符号 特殊符号使用含义$变量引用[ ]嵌套命令“ ”变量引用替换,字符串中的变量引用将会替换为变量值{ }字符串中变量引用不做值替换\续行符或转义符 脚本示例 puts "hello xiongdei" #Variable,Mathematical Expressions set var1 10 set var2 20 puts [expr $var1+$var2] #string set x 100 set str1 "print special char : $x" set str2 {print special char : $x} puts $str1 puts $str2 set num [llength $str1] puts [format "%s has %d elements" $str1 $num] scan $str1 "print special %s : %d"

怎么让图片变清晰?分享3个能把图片变清晰的方法

Photoshop 操作步骤: ①打开Adobe Photoshop,把图片拖进来直接打开,再按“Ctrl+J”复制图层; ②在上方菜单栏找到并点击“滤镜—其它—高反差保留”,按照图片实际情况设置1~2个像素; ③保存设置后,在左方图层面板里将该图层模式改为“叠加”模式,这时能看到图片有清晰些的变化; ④视图片清晰程度而定,可以再重复以上步骤,多覆盖几个图层;或是点击“滤镜—锐化—智能锐化”,按需调整各个参数; ⑤调整好后在上方菜单栏点击“文件—存储为”,在“文件类型”一栏中选择“TIFF”格式,在弹出的窗口中勾选“LZW”的图像压缩模式,在勾选窗口右下方“扔掉图层并储存拷贝”的图层压缩模式,再点击“确定”完成整个操作步骤。 2.专业工具:迅捷图片转换器 操作十分简便,仅需打开软件,在左侧菜单栏中找到【照片修复】,在【模糊人脸修复】一栏中点击【添加图片】,将需修复的图片上传后等待个几秒,就能收获一张修复好的清晰图片啦。 给大家看看这修复前后对比图 3.使用记灵工具 我们搜索:记灵在线工具 记灵在线工具是一款强大的图片处理工具,可用于将模糊或低分辨率的图片转换为更清晰的图像。可以使用它来处理各种图片格式,如JPEG、PNG、BMP等。使用该工具,您无需安装任何软件或应用程序,只需访问官方网站,即可开始使用。 步骤1:搜索记灵在线工具 步骤2:在我的工具里面点击图片变清晰 步骤3:上传图片,等待完成即可 总之,记灵在线工具是一个功能强大、易于使用的在线图片处理工具,可帮助您将模糊或低分辨率的图像转换为高质量的图像。使用该工具,您可以轻松地对图片进行各种调整和修改,以满足您的需求。

java中xml文件中的foreach循环sql语句

实体类 @Data public class BatChSysUserDTO { private List<Long> id; private List<String> name; private List<String> sex; private List<String> remark; } 查询 mapper层 List<SysUser> selectbatch (@Param("list") BatChSysUserDTO batChSysUserDTO); xml层 <select id="selectbatch" resultType="com.example.demo.entity.SysUser"> SELECT * FROM sys_user where name in <foreach item="item" collection="list.name" open="(" separator="," close=")"> #{item} </foreach> </select> 新增 实体类为 public class CheckComentEntity { /*t_check_coment*/ private Long id; @JsonSerialize(using = ToStringSerializer.class) private Long checkId; private String checkCategory; private String checkType; private String checkConment; private String riskLevel; private String description; private String remark; private String isInput; private String business; private String itemName; private Date createTime; private Date updateTime; private Integer checkResult; private String questionDescription; } mapper 层

Vue3使用Echarts实现自定义地图(使用阿里云数据可视化平台)

Vue3使用Echarts实现自定义地图 1.获取地图JSON文件 推荐使用 阿里云数据可视化平台 选择你想要使用地图区域并下载JSON文件 2.把地图JSON文件引入Vue3项目中 放在src/assets中 引入你想要使用地图的组件中 3.使用Echarts创建地图 准备地图容器 <template> <div id="user_region"> </div> </template> Echarts代码如下 //创建用户地域分布 const createRegion = () => { let mapChartInstance = null; // 获取地图容器 let mapChart = document.getElementById("user_region"); mapChartInstance = markRaw( echarts.init(mapChart, undefined, { devicePixelRatio: 2, renderer: "svg" }) ); // 注册地图 echarts.registerMap("China", China); mapChartInstance.setOption({ title: { text: "用户地域分布", left: 10, top: 10, textStyle: { color: "#000", fontSize: 16, }, }, visualMap: { show: true, min: 0, max: 10000, type: "

激光点云系列之一:详解激光雷达点云数据的处理过程

交流群 | 进“传感器群/滑板底盘群”请加微信号:xsh041388 交流群 | 进“汽车基础软件群”请加微信号:Faye_chloe 备注信息:群名称 + 真实姓名、公司、岗位 作者 | 奚少华 随着激光雷达的上车数量的不断攀升,如何用好激光雷达成为了重中之重,而用好激光雷达的关键点之一就在于处理好点云数据。 激光点云指的是由三维激光雷达设备扫描得到的空间点的数据集,每一个点云都包含了三维坐标(XYZ)和激光反射强度(Intensity),其中强度信息会与目标物表面材质与粗糙度、激光入射角度、激光波长以及激光雷达的能量密度有关。 为了更进一步解释清楚点云,笔者梳理了点云的相关参数和特点。 表:激光雷达点云的相关参数 表:点云的特点 从点云的采集原理来看,以ToF路线的激光雷达为例,激光点云是由车载激光扫描系统向周围发射激光信号,然后收集反射回来的激光信号得来的,并通过光速、激光从发射到返回的时间等信息来测得目标物的距离信息,再结合IMU、里程计、GNSS等信息计算出前方目标物的三维坐标信息和距离信息。 此外,在点云的采集和分析过程中,感知算法人员需要根据车载激光雷达的特点与工作原理,并结合激光雷达的角分辨率、视场角等相关参数,才能更好地利用点云。 那么,激光雷达点云在车端的处理环节中,具体有哪些处理过程和方法?又如何优化? 此后,为了验证这些问题,笔者先后访谈了图达通算法负责人许建博士和系统及应用负责人Leon、上汽高级经理殷玮、纵目科技感知算法工程师汤强、禾赛科技的专家等。在此,笔者感谢各路专家给予的支持,并整理出如下系列的文章,以供读者参阅。 以下为激光点云处理系列文章的第一篇内容。 激光雷达点云处理的具体流程 聊完何谓点云及其特征后,下文将继续分析激光雷达点云在自动驾驶中的处理流程。在此之前,有两点需要说明。 其一,激光雷达点云被用于感知和定位时,点云会先完成预处理,然后按照不同用途进行不同的处理,并在点云的应用细节上也会不同。 汤强说:“激光雷达用于定位的话,算法模型会要求点云的数据量尽可能多,并且区别于感知,定位还需要道路数据。如车道线或地标,它们对于激光的反射率和普通路面的反射率是不同的,激光雷达通过这种方式来获取路面信息的数据。激光雷达用于感知的话,它会有一个预处理的过程,会确定一个ROI范围,随后用这一区域的点云数据来完成后续的检测。” 其二,每家企业在点云的具体应用过程中,还会根据各自技术方案与应用场景不同,会存在些许处理流程上的差异,但大部分处理流程皆相同。 为了更详细地阐述点云的处理流程,笔者结合专家访谈的内容与公开信息,梳理出激光雷达点云在自动驾驶应用中的普遍流程。 图:激光点云的处理流程 01 点云预处理层面 1.1 原始点云数据的接收与解析 (1)点云数据的接收 激光雷达的原始点云数据都会被存放在一个数据包里(pcap),此时数据包里面的数据都是一连串的字节符号,无法直接使用。 以Velodyne的16线激光雷达为例,原始点云数据的接收主要是通过UDP(用户数据报协议)的形式向网络发送数据。具体来说,在激光雷达的web端进行设置或通过命令行进行设置后,技术人员会在接收端匹配激光雷达的IP地址与自身的UDP端口号,从而即可接收原始点云数据。 从数据的内容来看,该型号的激光雷达在垂直方向上(-15°到+15°)有16线的激光束,其每帧的数据长度固定为1248字节,这些字节包括前42字节的前数据包标识、12组数据包、4字节时间戳和最后两字节雷达型号参数。 图:Velodyne-16激光雷达每一帧的点云数据情况 (数据来源:《Velodyne VLP-16激光雷达数据格式解析》) 每个数据包中的数据都包含了激光光束的旋转角度、距离值、反射强度的信息。例如,“B6 07”代表了激光雷达的探测距离,“2A”代表了激光的反射强度,但这些信息都是以两字节表示,需要进一步解析这些数据。 图:Velodyne-16激光雷达数据包的一部分数据 (数据来源:《Velodyne VLP-16激光雷达数据格式解析》) (2)点云数据(pcd)的解析 数据包(pcap)中的原始数据需要进一步转换为可被感知技术人员使用的pcd格式的数据集。 点云数据的pcd格式文件是激光点云的一种存储格式,pcd文件主要是由笛卡尔坐标(x,y,z)和强度值i组成的列表,即每个点云都会附带独有的三维坐标系和能量反射强度。 在这个坐标系中,x轴指向汽车的前部,y轴指向汽车的左侧。由于这个坐标系采用右手定则,坐标系z轴指向汽车上方。 图:点云pcd坐标 (数据来源:《学习笔记:点云库PCL介绍》) 为了阐述点云数据的解析过程,笔者还是以上文Velodyne-16激光雷达的某帧点云数据包为例,并根据公开信息梳理如下。 第一步,计算激光线的旋转角度值。 例如,上图数据包前一部分的第一行的旋转角度为0xE0、0x63。 a) 反转两个字节变成十六进制63 E0 b) 把63 E0变成无符号的十进制为25568 c) 再把25568除以100得到255.68,那么得到的值255.68就是当前的旋转角度值 第二步,计算16线激光分别测得的距离。 例如,上图数据包前一部分的第一个激光线的距离,其值为“B6 07 2A”,其中“ B6 07”为距离“2A”为反射强度。 a) 反转两个距离字节“ B6 07”,将其变成“07 B6”

(附源码)基于PHP下的大学生校园交流论坛的设计与实现 毕业设计101634

大学生校园交流论坛 摘 要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品,从而也带动了一系列与此相关产业,是人们的生活发生了翻天覆地的变化,而网络化的出现也在改变着人们传统的生活方式,包括工作,学习,社交等,网络的出现使地球上居住的陌生人不再像以前一样遥不可及,它拉近了人与人之间的距离,使我们的地球变成了一个村。随着我国的高等教育的普及,大学生的队伍也正在不断壮大,为了方便大学生对学校、老师以及同学之间相互了解相互交流,建设一个互动的校园交流论坛成为了首当其冲的重要任务。与此同时,这将给学校以及在校生的工作和学习生活带来了极大的便利。 众所周知,我们所见的大多数的校园交流论坛都是用PHP 技术实现的,而基于Thinkphp的论坛较少。Redis所开发的PHP为平台,利用PHP跨平台型一次编译处处运行的巨大优势,给我们的动态网页设计提供了的更为快捷的设计理念。 本系统利用Thinkphp + mysq1 实现了“大学生校园交流论坛建设:本文对系统的需求分析、总体设计及详细设计进行了详细地阐述,主要实现了以下功能:.首页、用户注册、用户登录、校园论坛、论坛板块管理、校园动态、动态分类列表。最终实现完成了该论坛的设计。 关键词:大学生校园交流论坛;PHP语言; College students campus exchange forum Abstract With the rapid development of computer science and technology, computer has become a necessity of people's daily life, which has also driven a series of related industries. People's life has undergone earth shaking changes, and the emergence of networking is also changing people's traditional way of life, including work, study, social networking, etc, The emergence of the Internet makes the strangers living on the earth no longer as far away as before.

数据管道&ETL

无状态的转换 map() 一对一转换flatmap()可以输出任意数量的元素,也可以一个都不发 Keyed Streams keyBy()根据特定的键分区,会有shuffle,设计网络通信、序列化和反序列化maxBy涉及到聚合,就要考虑状态 有状态的转换 flink状态的特性 本地性: Flink 状态是存储在使用它的机器本地的,并且可以以内存访问速度来获取持久性: Flink 状态是容错的,例如,它可以自动按一定的时间间隔产生 checkpoint,并且在任务失败后进行恢复纵向可扩展性: Flink 状态可以存储在集成的 RocksDB 实例中,这种方式下可以通过增加本地磁盘来扩展空间横向可扩展性: Flink 状态可以随着集群的扩缩容重新分布可查询性: Flink 状态可以通过使用 状态查询 API 从外部进行查询。 Rich Functions 对于flink的几种函数接口,例如FilterFunction, MapFunction,和 FlatMapFunction。flink为每个接口提供了一个'rich'变体,其中增加了以下三个方法 open(Configuration c) 仅在算子初始化的时候调用一次,用来加载一些静态数据,建立外部服务的链接等 close() getRuntimeContext() 我的理解就是通过新增加的方法来丰富对于算子的功能,做一些定制化扩充 使用状态和清理状态 使用状态:状态写入->状态读取,要理解这个代表的不仅仅是一个单独的布尔类型变量,而是一个分布式的共享键值存储 /*状态写入*/ public static class Deduplicator extends RichFlatMapFunction<Event, Event> { ValueState<Boolean> keyHasBeenSeen; @Override public void open(Configuration conf) { ValueStateDescriptor<Boolean> desc = new ValueStateDescriptor<>("keyHasBeenSeen", Types.BOOLEAN); keyHasBeenSeen = getRuntimeContext().getState(desc); } @Override public void flatMap(Event event, Collector<Event> out) throws Exception { if (keyHasBeenSeen.

Android P的限制的原理和解决方案

Android P的限制的原理和解决方案 背景解决方案引用 背景 Google官方在Android P(Android9.0版本)开始针对非 SDK 接口的限制。也就是说,以前你系统的接口通过反射就能调用,现在都不能通过反射获取。 解决方案 https://github.com/tiann/FreeReflection/blob/master/library/src/main/java/me/weishu/reflection/Reflection.java package me.weishu.reflection; import android.content.Context; import android.text.TextUtils; import android.util.Base64; import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Method; import dalvik.system.DexFile; import static android.os.Build.VERSION.SDK_INT; import static me.weishu.reflection.BootstrapClass.exemptAll; /** * @author weishu * @date 2018/6/7. */ public class Reflection { private static final String TAG = "Reflection"; private static final String DEX = "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TGFuZHJvaWQvdXRpbC9Mb2c7ABFMamF2YS9sYW5nL0NsYXNzOwAUTGphdmEvbGFuZy9DbGFzczwqPjsAEkxqYXZhL2xhbmcvT2JqZWN0OwASTGphdmEvbGFuZy9TdHJpbmc7ABJMamF2YS9sYW5nL1N5c3RlbTsAFUxqYXZhL2xhbmcvVGhyb3dhYmxlOwAaTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsAJkxtZS93ZWlzaHUvZnJlZXJlZmxlY3Rpb24vQnVpbGRDb25maWc7ACVMbWUvd2Vpc2h1L3JlZmxlY3Rpb24vQm9vdHN0cmFwQ2xhc3M7ACFMbWUvd2Vpc2h1L3JlZmxlY3Rpb24vUmVmbGVjdGlvbjsAClJlZmxlY3Rpb24AD1JlZmxlY3Rpb24uamF2YQAHU0RLX0lOVAADVEFHAAFWAAxWRVJTSU9OX0NPREUADFZFUlNJT05fTkFNRQACVkwAAVoAAlpMABJbTGphdmEvbGFuZy9DbGFzczsAE1tMamF2YS9sYW5nL09iamVjdDsAE1tMamF2YS9sYW5nL1N0cmluZzsAB2NvbnRleHQAF2RhbHZpay5zeXN0ZW0uVk1SdW50aW1lAAFlAAZleGVtcHQACWV4ZW1wdEFsbAAHZm9yTmFtZQAPZnJlZS1yZWZsZWN0aW9uABJnZXRBcHBsaWNhdGlvbkluZm8AEWdldERlY2xhcmVkTWV0aG9kAApnZXRSdW50aW1lAAZpbnZva2UAC2xvYWRMaWJyYXJ5ABhtZS53ZWlzaHUuZnJlZXJlZmxlY3Rpb24ABm1ldGhvZAAHbWV0aG9kcwAZcmVmbGVjdCBib290c3RyYXAgZmFpbGVkOgAHcmVsZWFzZQAKc1ZtUnVudGltZQAWc2V0SGlkZGVuQXBpRXhlbXB0aW9ucwAQdGFyZ2V0U2RrVmVyc2lvbgAEdGhpcwAGdW5zZWFsAAx1bnNlYWxOYXRpdmUADnZtUnVudGltZUNsYXNzAAYABw4AFgAHDmr/AwEyCwEVEAMCNQvwBAREBhcBEg8DAzYLARsPqQUCBQMFBBkeAwAvCgAOAAcOACwBOgcOADYBOwcsnRriAQEDAC8KHgBIAAcOAA0ABw4AEwEtBx1yGWtaAAYXOBc8HxcABAEXAQEXBgEXHwYAAQACGQEZARkBGQEZARkGgYAEiAcDAAUACBoBCgEKB4iABKAHAYGABLQJAQnMCQGJAfQJAQnMCgEAAwALGgyBgAT4CgEJkAsBigIAAAAADgAAAAAAAAABAAAAAAAAAAEAAABEAAAAcAAAAAIAAAATAAAAgAEAAAMAAAALAAAAzAEAAAQAAAAMAAAAUAIAAAUAAAAPAAAAsAIAAAYAAAADAAAAKAMAAAEgAAAIAAAAiAMAAAEQAAAHAAAA3AUAAAIgAABEAAAAFgYAAAMgAAAIAAAAAwoAAAUgAAADAAAAZgoAAAAgAAADAAAAeAoAAAAQAAABAAAAyAoAAA=="; private static native int unsealNative(int targetSdkVersion); public static int unseal(Context context) { if (SDK_INT < 28) { // Below Android P, ignore return 0; } // try exempt API first.

5. JCTree相关知识学习

1. 絮絮叨叨 1.1. AST 1.1.1 Java编译的三个阶段 之前的博客(3. 自定义Java编译时注解处理器),在讲解编译时注解处理器的process()方法时,给过这样一张图以说明注解的处理是多轮的 这张图清晰地展示了Java源码编译的三个阶段 Parse and Enter: Java源文件被解析成抽象语法树(Abstract syntax tree,AST)Annotation Processing: 扫描注解,调用对应的编译时注解处理器处理注解。这个过程可能会修改已有的源文件或者产生新的源文件,这些源文件将再次进入Parse and Enter阶段进行处理Analyse and Generate: 分析AST并转化为class文件 上述描述可能不是很准确,能确定地是:(1)Parse阶段会将源代码解析成AST,(2)注解处理阶段可能会产生新的源代码,注解处理是多轮的 1.1.2 AST AST这个术语,对很多IT领域的小伙伴来说并不陌生比如,从事分布式SQL开发工作的同事(接近组件底层的开发人员),经常会说SQL的执行过程: SQL语句通过词法分析、语法分析后,被解析成ASTAST转化成逻辑查询计划,逻辑查询计划转化成分布式查询计划分布式查询计划转化成物理查询计划,这些查询计划将被下发到执行节点(worker)进行执行worker上的执行结果经过汇总后,被返回给client 编译原理是本科时学习的,对于词法分析、语法分析之类的细节都不知道了最深的印象是:以树形结构表示源代码,源代码中的元素将被映射到AST中的一个节点或一棵子树例如,5 + (12 * 1)最终对应的AST如下。感兴趣的,可以继续深入阅读:AST系列(一): 抽象语法树为什么抽象 博客安卓AOP之AST: 抽象语法树,给出了一段代码的AST示例。 上面的很多节点,在JDK中都有对应的类:例如,ClassDecl对应JCTree.JCClassDecl,Literal对应JCTree.JCLiteral 1.2 JSR 269 JSR 269是JDK 6中对注解增强的一套规范,全称为Pluggable Annotation Processing API,插件化注解处理器接口JSR 269有两组基本API,一组用于编写注解处理器,一组用于对java语言的建模 javax.annotation.processing.*:自定义编译时注解处理器的APIjavax.lang.model.*:将成员方法、变量、构造函数、接口等Java元素映射为Element和Type(TypeMirror) JSR 269规范实现的注解处理器,可以在编译期间处理注解此时,注解处理器相当于编译器的一个插件,所以称为插件化注解处理器。参考链接: 自动化编程技术------JSR269相关概念及实战Javac黑客指南 2. JCTree JDK的tools.jar中,有一个com.sun.tools.javac.tree包,里面有很多跟Java编译时AST有关的类,如JCTree、TreeMaker、TreeTranslator等如果你也使用Intellij IDEA,但是发现JCTree无法查看源码,请参考本人之前的博客:配置Intellij IDEA以查看tools.jar源码如果使用Intellij IDEA,可以通过顶部菜单的Navigate → \rightarrow →Type Hierarchy查看的子类或接口的子接口 具体参考文档:idea 查看一个类的所有子类以及子类的子类并以层级关系显示本人使用的是有账号的旗舰版IDEA,社区版IDEA是否能展示,尚待验证 2.1 Tree 在介绍JCTree之前,应该先介绍下com.sun.source.tree包中的各种Tree接口 Tree与JCTree之间的关系 Tree接口是AST中所有节点的公共接口,Tree及其子接口对应了AST中的具体节点Tree接口及其子接口由JDK编译器(javac)实现,不应该被其他应用程序直接或间接实现所谓的javac实现,就是本文介绍的重点com.sun.tools.javac.tree包中的JCTree及其子类 Tree接口 Tree接口非常简单

C# 初级教程(三) 封装与访问修饰符

参考文章 C# 中的类、结构和记录 | Microsoft Learn C# 封装 | 菜鸟教程 (runoob.com) 访问修饰符 - C# 参考 | Microsoft Learn 1 前提回顾-抽象 C# 初级教程(二) 面向对象的编程1_theifWhoStealsMoon的博客-CSDN博客 上一节讲到了面向对象的四个原则(微软官方认为是三个原则),其中的第一个原则 抽象,描绘的是如何将现实中的问题和事物转化为面向对象程序中的 类Class,通过一定的方法,我们将Dog 做成了一个模板,成功的描绘了现实世界中一类狗狗的特征属性。 而这里提到的 将Dog 做成模板的一定的方法就是今天要讲的内容 封装。 2 面向对象-封装 在微软官方文档中,封装被称为面向对象的i第一支柱或者原则。可见封装这个概念在面向对象编程中多么重要。 封装非常好理解,我们将某些东西做成了一个数据+方法的集合,这个过程可以叫做分类,类似于在整理文件时,将不同类型的文件放在同一个文件夹内。封装在分类的基础上,又增加了一项功能,就是访问权限的设置。 看以下示例: public class Phones { public double screenSize;//屏幕尺寸 public double Weight;//重量 public Colors color;//颜色 private string data;//手机的内部资料 private string passWord;//手机的密码 protected double costPrice = "2000";//手机的成本价格 protected string keyTechnology;//手机的核心技术 } 这个例子给出的是一个phone的抽象模板,包含6个字段/属性。这7个字段属性是所有手机都共有的,是一个合格的模板。 但是我们注意到这7个字段/属性最前的修饰符却不相同,有3种修饰符,分别是 public、private、protected,这3种修饰符就代表了所分类出的集合中的元素的访问权限,同时体现了封装的思想。 对于某一个特定的phone 对象来说,作为顾客,我们希望能够知道手机的屏幕尺寸、重量、颜色等在内的一些参数;作为手机的使用者,我们希望访问手机的内部资料和密码;作为手机的开发者,我们希望知道手机的成本以及核心技术。很明显这三种类中的字段具有不同的 访问权限 。因此就引出 访问修饰符 。

Java控制台模拟抢红包

现实中,我们在微信中都有抢过红包,每个人抢的金额都不一致,在这里,我通过控制台使用java实现抢红包程序。 实现代码如下: import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class GetRedEnvelope { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.err.println("这是一段抢红包的程序"); int num; double money; System.err.println("请输入人数"); num=sc.nextInt(); System.err.println("请输入金额"); money=sc.nextDouble(); doubleMeanMethod(money, num); } /** * 生成范围内的随机浮点数 * @param min * @param max * @return */ public static double nextDouble(final double min,final double max) { return min+(max-min)*Math.random(); } public static String format(double value) { return new DecimalFormat("0.00").format(value); // 保留两位小数 } public static List<Double> doubleMeanMethod(double money,int number){ List<Double> result=new ArrayList<Double>(); if(money<0||number<1) { return null; } double amount,sum=0; int remainNum=number; int i=1; while(remainNum>1) { amount=nextDouble(0.

游戏思考30:技能碰撞检测分类枚举及逆水寒魔兽老兵服副本攻略(英雄武林风云录,后续更新舞阳城、扬州、清明等副本攻略)

文章目录 一、技能碰撞检测方式分类讲解1)AABB2)OBB3)像素检测碰撞4)矩阵变换检测碰撞(打住,略)5)Tile地形检测碰撞(其实就是九方格遍历查找攻击对象) 二、武林风云录1)老一:陈斩槐(只有四个机制,dps压力不大,留爆发打影子就行)(1)点名红色扇形区域(2)点名红色长条,注意最后还有一段大劈(3)BOSS在百分之80 、50、20血量时会击退玩家,会刷新三个输出位置(4)BOSS在百分之35血时会吸玩家到其周围,释放旋风斩,得交解控技能。但是不要着急回去,还有一个圆圈的下坠伤害 2)老二:醉仙(1)红圈和点名略过(2)输出记得喝酒(龙吟内功,铁衣外功等)(3)每一个奉茶小厮都有名字,得按照诗词来按照顺序击杀小二 3)老三:楚相玉(1)boss有狂暴机制,冰火玄功达到极致,倒数360s,将直接团灭(人均得有1.2Wdps)(2)地上出现红圈,0.5s后将冒出冰柱,击飞造成一段伤害,落地造成二段伤害(估计代码是设计成击飞后掉落下来还在圆圈内)(3)点名T红色长条,多段伤害(4)烈焰焚身,需要交减伤或无敌规避伤害(5)冰风火凤融合产生圆形爆炸区域(6)赤炎寒光破(7)暴风雪 4)老四:刀狂(1)略过半圆斩、三段长条大劈、落地红圈、黑水机制不在赘述(2)达到百分之90血时,地上出现追忆碎片,分内外场地(血河上马溜boss,需要奶妈往返内网场用追忆碎片奶安抚boss并奶白剑)(3)刀狂有怒气机制,到百分之100时增加移速和攻击力(4)内场讲解 三、舞阳城1)老一:黑天尊使(1)攻击BOSS会叠加debuff原理及解决方法(2)BOSS怒气机制1、一阶段2、二阶段3、三阶段4、四阶段 2)老二:火焰围攻(机制说明)3)老三:药人战4)老四:红衣尊使5)老五:雷音尊使6)老六:薛魔主 一、技能碰撞检测方式分类讲解 1)AABB 定义 采用一个长方体将物体包裹起来,进行两个物体的相交性检测时仅检测物体对应包围盒(包裹物体的长方体)的相交性。长方体每一个面都是与某个坐标轴平面平行的,因此,AABB 包围盒又称了 轴对齐包围盒 。 备注 确定 AABB 包围盒就简单多了,仅需要记录 6 个值即可,这 6 个值分别代表包围盒在每个坐标轴上的最小值与最大值,即 xmin、xmax、ymin、ymax、zmin、zmax。也就是说,实际物体上所有的点都必须满足以下条件: 代码计算 1)C++版本检测AABB碰撞 法一:(1)包围盒 struct stBoundingBox { stBoundingBox () { min[0] = min[1] = min[2] = max[0] = max[1] = max[2] = 0; } float min[3]; float max[3]; }; //检测点是否在包围盒内 // Point inside box. bool OnCollision(stBoundingBox bb, float x, float y, float z) { if(bb.max[0] <= x) return false; if(bb.

Linux 4G模块开发例程

Linux 内核的 4G 模块的开发是一个比较复杂的过程。常见的步骤包括: 安装所需的开发工具,如编译器和内核开发工具。 学习内核编程基础知识,了解内核的架构和工作原理。 参考 Linux 内核文档,了解 4G 模块开发的要求和注意事项。 编写 4G 模块的代码,并使用内核编译工具将其编译成内核模块。 在目标系统上加载 4G 模块,并使用内核调试工具进行测试。 调试和优化 4G 模块的代码,完善模块的功能。 将 4G 模块的代码和文档提交给 Linux 内核社区,获得审核和发布。 这是一个大致的开发流程。更多细节内容可以参考 Linux

cv2.HoughLines怎么使用

使用cv2.HoughLines可以检测图像中的直线。使用它的方法如下:首先,将图像转换为灰度图像,然后使用霍夫变换检测图像中的直线。可以使用cv2.HoughLinesP()来检测更复杂的直线,它会返回直线的端点坐标。

如何了解springboot

Spring Boot是一个基于Java的框架,旨在简化创建独立,可执行的Spring应用程序。它提供了一组可以快速应用于大多数企业场景的功能,几乎可以摆脱XML配置的繁琐任务。您可以通过以下几种方式了解Spring Boot:1.阅读Spring Boot官方文档;2.观看相关视频教程;3.参加社区活动并与其他Spring Boot开发者交流;4.尝试编写一些Spring Boot示例项目。

JAVA线程池的基本原理是什么?

Java线程池的基本原理是:线程池是一个用于管理线程的组件,它可以创建一个线程队列,并将请求的任务放入队列中,然后在线程空闲时将任务取出并执行。这样做的好处是可以避免频繁的线程创建和销毁对系统造成的性能开销,并且可以很方便地控制线程数量,从而保证系统在可控制的范围内达到最佳性能。

写一个python的登录界面的代码

登录界面 username = input("请输入用户名:") password = input("请输入密码:") if username == "admin" and password == "123456": print("欢迎登录!") else: print("用户名或密码错误!")

flask搭建网站,字数1000字以上

Flask是一个Python框架,可以帮助开发者快速搭建网站。它提供了一组工具,可以让开发者更轻松地编写网站,提高工作效率。Flask可以帮助开发者快速搭建各种类型的网站,例如博客、论坛、电子商务网站、社交网络等。它能够完美地结合HTML、CSS、JavaScript和其他编程语言,使开发者可以轻松创建自己想要的网站。它提供了一系列友好的开发工具,可以让开发者轻松地搭建和管理网站,而不需要太多的技术细节。此外,Flask还提供了一系列安全功能,可以帮助开发者保护网站免受恶意攻击和网络安全威胁,提高网站安全性。总之,Flask是一个优秀的框架,可以帮助开发者快速搭建网站,提升开发效率,并且具备

RISC-V指令集是一种精简的、可编程的指令集,它主要用于实现各种复杂的数据处理与控制任务。它提供了一系列简单的、可编程的指令,可以用来实现复杂的操作,比如addi指令,它可以将一个常数(如0x1)加...

RISC-V指令集是一种精简可编程的指令集,可以用来实现复杂的数据处理和控制操作。它提供了一系列简单可编程的指令,例如addi指令,它可以将一个常数加到寄存器中,并将结果存储到另一个寄存器中,从而实现特定的操作。

如何学习mysqldba

学习MySQL DBA需要一系列的步骤。首先,你需要了解MySQL的基础知识,包括数据库结构、SQL查询、数据库设计和数据库管理。其次,你需要学习如何使用MySQL的开发工具,学习如何安装和配置MySQL服务器以及其他实用工具。最后,你需要学习如何管理MySQL服务器,包括性能监控、安全管理和可用性管理。

列出一个健康饮食小程序设计的方案代码

答:健康饮食小程序设计方案代码可以这样:1. 设置一个每日饮食计划,记录每日摄入的热量、营养素和营养素的比例。2. 建立健康饮食的搭配规则,按照不同的营养素搭配,以便于消费者更好地掌握饮食的比例。3. 基于现有的健康饮食资源,构建饮食计划,加入促进健康的食材,比如新鲜蔬菜、水果、豆类、谷物等。4. 通过每日热量摄入量和比例,指导消费者合理安排饮食,避免过量摄入营养物质。

写一个贪吃蛇 python 代码

好的,下面是一个简单的贪吃蛇代码: import turtle import time # 设置画布大小 turtle.setup(width=600, height=600) # 设置画笔速度 turtle.speed(8) # 画蛇的身体 def draw_snake(snake_list): for x, y in snake_list: turtle.penup() turtle.goto(x, y) turtle.pendown() turtle.circle(20) # 设置蛇头初

请用c++写一个大数相加的算法

#include <stdio.h>int main() { int a, b, sum; printf("请输入第一个数字: "); scanf("%d", &a); printf("请输入第二个数字: "); scanf("%d", &b); sum = a + b; printf("它们之和为: %d", sum); return 0; }

学习Python的资料

如果您想学习Python,以下是一些有用的资源: 官方文档:https://docs.python.org/zh-cn/3/ 书籍:《Python编程从入门到实践》、《Python基础教程》等 在线课程:Udemy、Coursera、edX等平台上都有很多Python课程可供选择 在线教程:如菜鸟教程(https://www.runoob.com/python/python-tutorial.html) 开源项目:参与一些开源项目能够让您更快地熟悉Python的编程思想和实践。 以上只是其中几个学习Python的途径,您可以根据自己的学习方式、兴趣爱好

使用html实现实时获取GPS位置并每隔5秒生成完整的轨迹图的全部代码,显示轨迹图并把轨迹图保存至云端服务器:https://4147093qp2.imdo.co/upload,使用中国境内的服务商地...

要使用HTML实现实时获取GPS位置并每隔5秒生成完整的轨迹图,可以使用支持HTML5的JavaScript API,例如Geolocation API。可以使用这个API来获取实时的GPS位置,并使用它来创建完整的轨迹图。可以使用JavaScript库,如Leaflet或OpenLayers,显示轨迹图,同时可以使用将轨迹图保存至云端服务器,例如使用中国境内的服务商地图服务。

把迁移学习的进展详细描述一下

迁移学习是一种机器学习技术,它允许模型从一个任务中学习知识,并将其应用到另一个任务上。通常,迁移学习通过使用深度学习算法来建立一个模型,该模型可以从一个任务中获得知识,并将其应用于另一个任务。它也可以用于缩短学习时间,减少计算资源的消耗,并使模型更加准确和可靠。

关于CSS的基础知识

CSS的基本介绍 css(Cascading style sheets):层叠样式表 作用:给页面中的html标签设置样式 css标签写在style标签中,style标签一般写在head标签里面,title标签下面 css常见引入方式 <title>引入方式一(内嵌式)</title> <style> p{ /* 文字颜色 */ color: red; /* 文字大小 */ font-size: 30px; /* 背景颜色 */ background-color: aqua; /* 宽度 */ width: 500px; /* 高度 */ height: 500px; } </style> </head> <body> <p>css标签认识</p> </body> 内嵌式:css写在style里,作用在当前页面(小案例) 外联式:css写在单独的css文件中,通过link引入,作用多个页面(项目中) 行内式:css写在标签的style属性中,作用在当前页面(配合js使用) 基本选择器 结构:标签名{css属性名:css属性值;} 作用:通过标签名,找到页面中所有这类标签,设置样式 注意点: 标签选择器选择的是一类标签,而不是单独的一个 标签选择器无论嵌套关系有多深,都能找到相应的标签 类选择器 结构:.类名{css属性名:css属性值;} 作用:通过类名,找到页面中所有带有这个类名的标签,设置样式 注意点: 所有标签上都有class属性,class属性的属性值成为类名 类名可以由数字、字母、下划线、中划线组成,但不能以数字或者中划线开头 一个标签可以同时有多个类名,类名之间以空格隔开 类名可以重复,一个类选择器可以同时选中多个标签 id选择器 结构:#id属性值{css属性名:css属性值;} 作用:通过id属性值,找到页面中带有这个id属性值的标签,设置样式 注意点: 所有标签上都有id属性 id属性值类似于身份证号码,在一个页面中是惟一的,不可重复 一个标签只能与一个id属性值 一个id选择器只能选中一个标签 类与id的区别 class类名与id属性值的区别 class类名相当于姓名,可以重复,一个标签可以同时有多个class类名

python自动化之基于Arcgis10.2.2中Arcpy编译环境下实现arcgis应用内要素与Web网页联动功能探索--Arcgis高级超链接功能(脚本超链接的使用)

目录 1.项目背景阐述2.常规操作3.新的玩法4.启发与思路4.1.简述4.2.启发 5.环境搭建6.实现步骤7.代码8.小结 1.项目背景阐述 为强化自然资源统一调查监测,准确掌握全省国土利用变化情况,满足各项自然资源管理工作需要,2022年度全省国土变更调查工作开始了。 近期国家下发遥感监测图斑、地理国情监测变化图斑及自主提取变化图斑,要求按照规定时间点上报核查初报数据。同时,城乡建设用地增减挂钩、土地综合整治、高标准农田建设等项目涉及地类变化的,要及时纳入当年国土变更调查。国家下发图斑、地方自主提取图斑需要逐一现场查看核实,分析变化原因,对变化后的土地利用现状地类开展认定。我们单位负责外业调查的技术人员坚持走到、看到、问到“三到”原则,顶风冒雨实地拍照举证,并充分利用“互联网+”的信息化手段并将拍摄照片上传到省级国土变更调查在线举证与核查云平台(后面简称为“外业核查云平台”)。面对这一紧迫艰巨的任务,既要保证质量,还得准时上报调查成果。因此亟需优化工作步骤,提升效率。 就现阶段的工作流程来讲,我发现在做内业的过程中,存在提升效率的地方。在查看外业平台同时再进行内业修改的过程中可以进一步优化工作步骤,做一些效率上的提升。 2.常规操作 具体工作内容描述 我在工作过程中,首先需要在arcgis软件内找到当前范围内监测图斑的编号,然后把图斑的编号复制到“外业核查云平台”上,找到外业举证的详情,再决定是否要进行内业修改。工作倒不是很难,就是来回的切换窗口操作很不方便(多屏显示的除外)。就意味着在外业后举证平台与arcgis应用之间来回切换,操作很是不方便,为提高工作效率,现做arcgis内图层要素与网页搜索的联动研究。 效果演示 3.新的玩法 效果演示 4.启发与思路 4.1.简述 已知条件1 Arcgis可以使用超链接。超链接[^1]可用于访问与要素关联的文档或网页。使用工具条上的超链接工具(如下图红框内所示) : 使用超链接工具之前,您需要先进行定义,超链接可定义为以下三种类型中的任一种: Hyperlink类型说明文档使用超链接工具单击要素时,将在相应的应用程序(例如 Microsoft Excel)中打开关联的文档或文件。URL使用超链接工具单击要素时,将在 web 浏览器中启动一个 web 页面。脚本使用超链接工具单击要素时,要素值将发送到脚本。此选项可启用对自定义行为的使用。 可访问各要素的超链接。本文将主要介绍如何使用脚本实现Arcgis应用与网页间的联动跳转。 已知条件2 Arcgis可以使用Python编写的脚本程序。已知条件3 python可以使用Selenium实现网页操作的自动化。 4.2.启发 能否利用python将selenium的自动化功能应用到arcgis中,实现半自动化的操作?为了解决这个问题,由此我才写出这篇文章。 5.环境搭建 ArcGIS10.2.2Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32(ArcGIS10.2.2自带的python版本)IDLE:用于测试编译的环境(ArcGIS10.2.2自带的python版本)PyScripter3.6.1(32bit) :IDLE和PyScripter二选一就行Chrome 版本 109.0.5414.120(正式版本) (64 位)chromedriver(与Chrome浏览器的版本号保持一致) 6.实现步骤 Mon 06 Mon 13 安装所需的扩展库 安装Chrome浏览器 编写脚本 测试 最终成果 在进行编码测试的过程中有出现了两种思路: 说明优点缺点思路1点击要素后,打开浏览器,需要先登录账户,然后再进行后续联动的操作一步到位耗时,每次都重新登录思路2提前打开浏览器登录账户,然后获取已登录的窗口,进行后续操作。省时,效率明显提升提前做好准备(这不算缺点) 经过分析后,直接选择思路2,后续实现的代码也是依据思路2编写。 7.代码 代码为测试代码,非脚本代码,脚本代码个人资源中。 # encoding=utf8 import sys #import time from selenium import webdriver from selenium.

8 Flutter UI 之 路由

一 基本路由 路由就是页面的跳转,通过Navigator组件管理路由导航 Flutter 提供了两种方式 基本路由和命名路由 Container( child: Center( child: Column( children: [ ElevatedButton( onPressed: () { // 跳转到购物车界面 Navigator.of(context) .push(MaterialPageRoute(builder: (BuildContext context) { return SearchPage(); })); }, child: Text("Jump to Search Page")), ElevatedButton( onPressed: () { // 跳转到购物车界面并且传值 Navigator.of(context) .push(MaterialPageRoute(builder: (BuildContext context) { return FormPage(title: "title from home"); })); }, child: Text("Jump to Search Page with Parameters")) ], )), ) import 'package:flutter/material.dart'; class SearchPage extends StatelessWidget { const SearchPage({super.

【git】图形化git管理工具SourceTree

命令行操作确实很方便快捷,但图形化工具看起来更直观,在git仓库管理中也是这样。 这一节来介绍使用git图形化管理工具SourceTree。 1. 安装 地址:https://www.sourcetreeapp.com/ 目前还只支持Windows和Mac OS。 2. 使用 在我们掌握git命令行的提交和分支管理后,再使用GUI工具,会发现更高效。 添加仓库 git config user.name git config user.email 提交 git add . git commit -m "update" 分支 git branch -a git checkout xxx git merge 推送 git pull git push 3. 小结 SourceTree GUI工具对于常用的提交、分支、推送等操作来说非常方便,但也保留了终端工具,是一款git管理利器。 参考: https://www.liaoxuefeng.com/wiki/896043488029600/1317161920364578 https://www.runoob.com/git/source-tree-intro.html 以上。

C# 初级教程(一)手把手教你创建程序

1 使用VisualStudio 创建第一个C#程序 在初学者的角度,Visual Studio这个相对比较复杂的IDE(Integrated Development Environment 集成开发环境)就已经吓退了很多人。 当年做为初学者的我,打开VS真的是一脸迷茫,而当时的网络上很少会有完整的代码教学,大部分都是某个片段,某个函数,某个功能,导致我打开VS创建项目就花了两天时间。 当然现在随着网络发展越来越快,各种信息资料都已经丰富起来,但我还是想从最基本的地方教学一下。 笔者所使用的 Visual Studio 版本如下图所示: 因为平时使用Unity进行开发,所以一直使用2019版本。 1.1 创建新项目 首先打开VS,出现以下的窗口,点击如下所示的 控制台应用程序 ,选择完成后点击下一步。 点击下一步之后出现配置窗口,更改项目的名称,尽量能够描述项目的具体功能和效果;更改一下目录,放在你想要管理和存储的位置,完成后继续点击下一步。 选择控制台应用的目标框架,一般高版本比较好。可以参阅微软官方文档 SDK 样式项目中的目标框架 - .NET | Microsoft Learn。 创建之后,会自动生成一个项目窗口,主要包含解决方案资源管理器,包含解决方案和项目资源;项目资源包括分析器、引用集、框架等信息; 类文件 Program.cs 也在显示中,还会显示类中存在的方法;文件窗口处打开了目前的类文件,包含项目引用、命名空间、类、主函数等。 最下方的输出控制台和错误列表,可以方便快速调试程序。 1.2 了解第一个C#程序(面向对象编程) 新建项目之后,会自动创建一个程序,该程序如下所示,是一个简单的Main函数,作为主程序而启动。 using System;//引用程序集 namespace HelloWorld//命名空间 { class Program//类 { static void Main(string[] args)//主函数 { Console.WriteLine("Hello World!");//输出 Hello World } } } 运行该程序,就可以看到 2 结语 时间比较晚了,总结了很多,等待专栏再度更新,谢谢大家支持!

数字IC设计随笔之八(初识数字后端库)

概述 在使用ICC做后端流程中,需要的文件有: Verilog门级网表和时序约束文件 门级网表和时序约束文件可以由DC或Genus产生,其与工艺不相关。 技术文件(.tf)寄生参数库(tlupus/itf)逻辑库(.db)Milkyway参考库 上述库文件与所采用的工艺制程密切相关,fab厂直接提供,觉得理解其意义还是很关键的,在后端流程中,知其然,知其所以然。 技术文件(Technology File) 技术文件中的内容不够主要包含下面几个方面,具体细节的定义与fab厂相关,理解其内容,有助于理解后端的布线。 单位和值定义 Technology { name = “STD1V8” unitTimeName = “ns” timePrecision = 1000 unitLengthName =“micron” lengthPrecision = 1000 gridResolution = 1 } 颜色定义,定义多种颜色 Color color_value { name =“color_value” rgbDefined = 1 redIntensity = 255 rgreenIntensity = 255 blueIntensity = 100 } 最小单元尺寸 Tile “unit” { width = x height = y } 该参数定义在布局的时候,一般cell的高度为y,特殊的cell高度为2y,而cell的宽度为x的整数倍。 层定义 Layer “layer_name” { layerNumber = 10 maskName = “METAL2”

Mac下载EasyConnect

关于 mac下载EasyConnect 问题汇总 下载 地址: https://vpn.xhhos.com/com/installClient.html?language=zh_CN 注意:要用Safari浏览器下载,Chrome 下载会没有反应

Windows11创建&删除账户以及用户权限的相关问题

前言 之前因为安装一个程序,平时一直用的账户没有Administrator权限,导致无法安装成功,将其设置为管理员并且启用管理员账户状态后,又产生了Administrator账户。于是把账户里的文件迁移到Administrator下,因为创建本地用户会占用C盘空间,那么通常我们会把不需要的账户给删除掉,因此我也是在文件迁移完毕后删除了账户。 但是删除账户之前如果没有把账户的管理员权限给禁用,那么删除账户后有的文件会因为权限原因无法删除掉,这时我们需要分析其中的具体原因,避免运行以前并未更改设置的程序后,又产生临时文件到C:\Users路径下已删除的账户的路径下。接下来会通过以下几点来进行阐述(删除的用户用dhy表示)。 1.用户概览 1.1.用户分类介绍 首先我们可以了解用户组,对用户的权限和关系有一个更清晰的认知: 用户组分为组决定了用户的权限。计算机上 System 组的权限最高,用户中 Administrators 组的权限最高,Users 组居中,Guests 组最低。 而用户又分为Microsoft Office Email注册的电子邮件账户和本地账户。 Administrators/Users组所属用户域:BUILTIN 查看sid值 : 通过WIN+R组合键进入运行,输入cmd,在命令提示符(Command Prompt)中输入”whoami /user”。 1.2.登录名&用户名&用户文件名 登录名为登陆界面或者开始菜单所展示的名字。 用户名是系统内部的,通常出现在文件路径名或者组或用户名中。 用户文件名是在创建用户时产生的C:\Users下的默认路径,创建用户后修改用户名,用户文件名不会改变。 1.3.实际应用 1.3.1.用户权限 因为本文刚开始提到的软件安装出现的权限问题,需要修改用户权限。而现在使用的电脑是Windows11系统的,当时创建电子邮箱账户时可能没有在账户选项中改变账户类型为管理员Administrator(我也记不清当时注册界面具体什么样了,已经过了一年了)。后面才知道,一般情况下Win11的管理员账户是关闭的,不过用户可以通过开启管理员账户来进行登录,登录管理员账户以后就获得了所有管理员权限。 具体操作如下: https://office.tqzw.net.cn/computer/windows/171477.html 发现我的设置为已禁用,将其改为已启用。 查看了下账户dhy的属性,发现账户dhy不是Administrators组,之前选中的其他(这图是后面截的,这时已经改为管理员了)。 1.3.2. 创建Administrator用户 如果与我上述情况一样,没有Administrator用户,通过WIN+R组合键(或者【开始】→【运行】)打开运行后,在运行中输入” lusrmgr.msc”按回车键运行载入lusrmgr界面。双击本地用户和组(本地)下的用户→右键点击当前用户(dhy)→【属性】,去掉【帐户已禁用】前的钩。 确定后退出,并且注销当前用户,在登录界面就有了现在的Administrator账户了。 2.残留文件清理 2.1.问题描述 在我们删除一个账户后,通常会在C盘下面残留如下一些文件: 那么这些文件其实是在之前的环境变量/应用缓存或者注册表的ProfileImagePath值为Users下dhy的文件路径,然后运行程序后产生的。需要进行更改,否则下次运行还会出现这种情况。 2.1.1 产生原因 这可能与我在lusrmgr窗口直接删除用户但是没有禁用账户dhy的管理员权限有关。由于账户dhy已经具有管理员权限,该账户下文件的权限也达到了最高。那么即使在Administrator账户下,也不具备这些文件的管理权限(不知道是不是因为同为Administrators组),从而无法对其直接删除。 2.1.2 删除用户的其他办法 如果不通过lusrmgr窗口删除用户,也许能够删除得更干净。这里以Windows11为例,首先通过Win+i组合键打开设置: 点击系统→系统信息得到如下界面: 点击高级系统设置,加载出系统属性: 点击用户配置文件模块中的设置,会加载出用户配置文件对话框: 这里因为我只有一个用户,删除为灰色,如果有多余的用户选中后就可以点击删除。 参考链接: http://www.zztongyun.com/article/%E7%94%B5%E8%84%91%E6%9C%89%E4%B8%A4%E4%B8%AA%E7%94%A8%E6%88%B7%E6%80%8E%E4%B9%88%E5%88%A0%E9%99%A4%E4%B8%80%E4%B8%AA 2.2.解决方法 2.2.1.修改环境变量 这里以Windows11操作系统为例,首先通过Win+R组合键打开运行,输入“control”按回车键确定打开控制面板,也可以点击开始菜单在搜索栏搜索打开。 点击用户账户-用户账户 可以看到控制面板主页下有更改我的环境变量选项 点击更改我的环境变量,出现如下界面,发现Path的路径为之前所删除账户下的路径: 双击进入后即可进行修改,修改后到当前的Administrator路径下: 或者桌面点击右键,点击个性化-系统-系统信息-高级系统设置,出现如下界面: 最后点击环境变量也可以达到到第一张操作方法的效果。 2.2.2.修改登录名 当我们想将登陆界面的登录名设置为中文而又保持文件路径为英文时,可以仅修改登陆名为中文,避免程序安装以及环境变量配置等编程方面的问题。 前面的步骤与1.3.2.一样,首先进入lusrmgr界面,双击用户后会得到如下界面: 我们可以看到名称,全名。名称对应的就是用户名,而全名对应的是登录名。当登录名的值为空时,将默认展示用户名为登录名。再右键点击Administrator选择属性,或者双击,出现如下界面后便可进行设置: 这里我将全名(登录名)设置为logname 2.2.3. 组或用户名删除 由于这次删除账户时把桌面的文件迁移到现在的Administrator上,有的快捷方式的组和用户名还残留着之前的账户,那么以桌面的Adobe Photoshop 2021为例,右键属性,点击安全,在组和用户名会看到未知用户,这个就是之前删除的账户。

分享7个比B站更刺激的老司机网站,别轻易点开

俗话说摸鱼一时爽,一直摸一直爽,作为一个程序员老司机了,一头乌黑浓密的头发还时不时被同事调侃,就靠这10个网站让我健康生活,不建议经常性使用,因为还有一句俗话,那就是“摸鱼一时爽,没有年终奖”,记得点赞收藏! 程序员导航-CXY521 这是一个程序员学习网站,这个网站可以用牛逼两个字形容,我愿称之为救大命的网站,涉及到程序员的方方面面的资源都有,基本上一个导航网站可就可以满足,程序员工作、娱乐、查资料、看电影、摸鱼的需求了,不过据我观察,大家还是最喜欢其中的摸鱼功能。 这也是我上班摸鱼,转换心情的绝佳利器,男人至死都是少年啊!使用了的朋友都说,只恨没有早点发现这个网站。 This person does not exist 一个小众又好玩的网站,网站名叫 this person does not exist,翻译是“查无此人”,用户只要每刷新一次,该网站就会生成一幅人脸。看着好像没什么特别,但是你可能想不到,这些人脸都是假的。工作累了,不妨在这里试图生成你的梦中情人吧?传送门:https://thispersondoesnotexist.com/ 一个轻量级的低代码开发平台 JNPF,立足于低代码开发技术,采用主流的两大技术Java/.Net开发,专注低代码开发,有拖拽式的代码生成器,灵活的权限配置、SaaS服务,强大的接口对接,随心可变的工作流引擎。支持多端协同操作,100%提供源码,支持多种云环境部署、本地部署。 传送门:https://www.yinmaisoft.com/?from= 基于代码生成器,可一站式开发多端使用Web、Android、IOS、微信小程序。代码自动生成后可以下载本地,进行二次开发,有效提高整体开发效率。像“乐高”一样设计你的门户,依然是拖拽式开发,可一站式搭建:生产管理系统、项目管理系统、进销存管理系统、OA办公系统、人事财务等等。可以节省开发人员80%时间成本,并且有以构建业务流程、逻辑和数据模型等所需的功能。 LintCode 上回有个粉丝回应沸点,说想看面试题,这不是来活了吗,你们可以看看LintCode,这是一个集合了大量算法面试题和AI面试题的网站,它为全世界的码农提供了练习自我技能的良好平台,并且它的注册是免费的,收录了近2000道试题,够你练的了。 试题分为入门、简单、中等、困难、超难5个级别,内容也是非常丰富,最后两个级别适合在吃饱喝足并且对自己技能有足够自信这挑战,因为这是真的真的真的造火箭试题。相比其他的一些网站,LintCode 的编程挑战覆盖的领域更多,包括算法、数据结构,人工智能,系统设计等众多领域。 程序员客栈 摸鱼一时爽,没有年终奖,头发茂密是一回事,搞钱的脚步也不能停下。程序员客栈上汇集了众多优秀的开发项目,穷的时候可以来上面接接外包、做做私活,补贴一下自己,本身就有余钱的时候用来作为以后的保险。毕竟谁会跟钱过不去嘛,这个平台还是相当有保障的,项目靠谱,可以找到的优质项目也不少。传送门:https://www.proginn.com/ All To All 苍天啊这个文档转换网站用过都说好,免费高效,无需下载,支持文档、电子书、图片、视频、音频等多种类型文件不同格式直接的互相转换。并且转换的速度也是比较快,当然,最关键的还是免费。 boss发一些乱七八糟的东西可以快速解析了,还可以自动去背景,是一个神仙网站。传送门:https://www.alltoall.net/ 一个可以解决任何 bug 问题的网站 作为一名程序员,如果没有听过 Stack overflow,那么你最好去面壁思过一下。 程序员最痛苦的事莫过于深陷于BUG的泥潭,而stack overflow作为全球最大的技术问答网站,可以说每个搞过技术的人是必上的网站。开发过程中遇到什么 bug,上去搜一下,只要搜索的方式对,百分之 99 的问题都能搜到答案。 而且 Stackoverflow 可以看到很多经典的问题,都给我去收藏夹里吃灰!在这里能够与很多有经验的开发者交流,如果你是老司机,还可以来这儿帮助别人解决问题,积累积累功德。传送门:https://stackoverflow.com/ 由于篇幅有限,只能到这了。而且想靠一篇文章写齐这些实用的网站,显然是不可能的,如果各位对本篇内容感兴趣的话,不妨点一个赞+收藏,我再爆肝一下,把我平时用的都甩给大家,大家也别怪我标题党啦~~~

char *字符串和char[]的区别

简介 char *类型的字符串和char []类型的字符数组在 C 语言中经常用到,它们的主要区别在于如何定义和使用。char *类型的字符串是一个指向字符数组的指针,指针的值为第一个字符的地址,字符串中的每个字符都是用连续的内存单元存储的。在 C 语言中,我们通常使用双引号来定义字符串,例如: char *str = "hello"; 这里的 str 是一个指向字符数组的指针,指向以字符 'h' 开始的内存空间,后面依次存储了字符 'e'、'l'、'l' 和 'o',最后以一个 '\0' 结尾。在使用指针指向的字符串时,我们通常使用指针访问字符串的每个字符,例如: char *str = "hello"; char c = str[0]; // 访问字符串的第一个字符 char []类型的字符数组是一种定长数组,存储指定长度的字符序列,数组中的每个元素都是一个 char 类型的变量。在 C 语言中,我们通常使用中括号来定义字符数组,例如: char arr[] = {'h', 'e', 'l', 'l', 'o', '\0'}; 这里的 arr 是一个长度为 6 的字符数组,它包含了字符 'h'、'e'、'l'、'l' 和 'o',最后以一个 '\0' 结尾。在使用字符数组时,我们可以通过下标访问数组中的每个元素,例如: char arr[] = {'h', 'e', 'l', 'l', 'o', '\0'}; char c = arr[0]; // 访问数组的第一个元素 需要注意的是,char * 类型的字符串和 char [] 类型的字符数组在很多情况下可以相互转换,但它们是不同的数据类型,需要根据实际情况进行选择和使用。

Helm部署Harbor

前言 文章篇幅较长,请详细阅读,不要漏掉每一个注释,每一个细节。 文章中用到的harbor存储是hostpath,service的类型是ingress。根据harbor官网提示,需要提前创建pv和pvc,既然选择了hostpath,那么就需要将pod固定到某一个node上面,本文所有的资源副本都是1,harbor的所有pod放在同一个namespace,并且需要将namespace固定到某个node上,具体步骤见正文。 一.环境准备 1.二进制安装helm [root@k8s-master helm]# wget https://get.helm.sh/helm-v3.10.3-linux-amd64.tar.gz [root@k8s-master helm]# tar zxf helm-v3.10.3-linux-amd64.tar.gz [root@k8s-master helm]# cd linux-amd64/ [root@k8s-master helm]# cp helm /usr/local/bin/ [root@k8s-master helm]# helm version version.BuildInfo{Version:"v3.10.3", GitCommit:"835b7334cfe2e5e27870ab3ed4135f136eecc704", GitTreeState:"clean", GoVersion:"go1.18.9"} 2.创建namespace [root@k8s-master helm]# cat namespace-harbor.yaml apiVersion: v1 kind: Namespace metadata: name: harbor [root@k8s-master helm]# kubectl apply -f namespace-harbor.yaml 3.开启准入控制器 –enable-admission-plugins 添加 PodNodeSelector [root@k8s-master helm]# vim /etc/kubernetes/manifests/kube-apiserver.yaml apiVersion: v1 kind: Pod metadata: annotations: kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 192.168.0.20:6443 creationTimestamp: null labels: component: kube-apiserver tier: control-plane name: kube-apiserver namespace: kube-system spec: containers: - command: - kube-apiserver - --advertise-address=192.

el-table修改背景颜色,去掉边框,鼠标划过没变色效果

一.整个表格背景颜色及边框弧度 /deep/ .el-table{ background-color: #101d3f; color: #fff; // border-radius: 9px; } 二.标题背景颜色 /deep/ .el-table th{ background-color: #101d3f; border:none; } 三 去掉边框 /deep/ .el-table th.el-table__cell{ border: 0px; } /deep/ .el-table td{ background-color: #101d3f; } /deep/ .el-table--border{ border:none; border: 0px; } /deep/ .el-table td.el-table__cell{ border: 0px; } .el-table::before { height: 0px; } customer-table是在el-table里面定义的class类名称 .customer-table .el-table__fixed-right::before, .el-table__fixed::before { width: 0; } 四.鼠标移过表格不变色 /deep/ .el-table tbody tr:hover>td { background-color: #101d3f !important }