python作品 运动模糊图像修复算法(上)

python作品 运动模糊图像修复算法(上)-CSDN博客 python作品 运动模糊图像修复算法(下)-CSDN博客 1.1研究背景和意义 由于各种不确定因素的影响,我们通过设备采集到的图像难免会产生不同程度的失真,图像的运动模糊就是一种典型的失真现象。运动模糊是指图像中的移动效果,通常会出现在长时间曝光或被拍摄物体快速移动的情形中,由于在拍摄时相机与被拍摄物体之间发生了相对位移,图像上就会出现运动模糊。图像作为重要的信息载体,让受众得到更加直观、迅速、高效、客观的视觉化信息。鉴于图像在传播信息时的优点与重要性,图像在各行各业中都扮演着重要的角色。如今,图像识别被广泛的应用于各个领域,如智能交通中的车牌识别,车辆识别等等,运动模糊会严重的影响识别效率。 由运动模糊的原理可知,通过缩短曝光时间可以减少运动模糊,但代价是噪声更高,对成像传感器质量和光线要求更高。这种方法并不总是可行或者所需成本较大,因此在后期处理阶段进行图像去模糊是一种重要的替代方案。 目前市场上,用户在线实时提交处理展示的web端图片处理网站较少,并且目前的图片处理功能中并没有运动图像去模糊的 1.2研究现状 目前,图像去模糊领域的研究主要包括数据集的构建和去模糊算法的研究等方面。(1)在机器学习领域中,数据集质量的高低直接影响实验结果的好坏。而相较于其他图像退化复原问题,图像去模糊的数据集更难获得,在现实环境中很难拍摄到各种因素完全相同的一对清晰图像和模糊图像。在数据集方面,现有的图像去模糊数据集中有一类是通过算法合成的模糊数据集,这类数据集在已获得的清晰图像上加以不同运动模糊模拟算法,得到相应的人工合成的模糊图像。另一种合成方法是用算法模拟生成运动轨迹,根据运动轨迹生成模糊核。(2)图像去模糊中因为模糊核通常是未知的。非盲目去模糊算法指在模糊核已知的情况下恢复清晰的图像,因为模糊核已知,去模糊的工作就会非常容易,只要利用有效的反卷积算法就可以,主要的挑战就是保持细节的情况下抑制噪声。盲目去模糊则主要是基于生成对抗网络的复原方法。 1.3课题研究的主要内容 (1)运动模糊图像修复。基于WGAN模型,训练300 epochs,保存模型,基于此模型预测得到一个较好地效果。 (2)黑白图像着色。使用了名为NoGAN的新型GAN训练方法,对生成器进行 了预先训练,使其利用常规损失函数,变得更强大、更快、更可靠。 (3)背景替换。运用U2Net模型,两级的U型嵌套结构,不需要预训练,而且保持了较高的分辨率。 (4)MySql数据库。存储数据。 2.1需求分析 运动模糊图像处理:由于各种不确定因素的影响,我们通过设备采集到的图像难免会产生不同程度的失真,图像的运动模糊就是一种典型的失真现象。由于在拍摄时相机与被拍摄物体之间发生了相对位移,图像上就会出现运动模糊。如今,图像识别被广泛的应用于各个领域,如智能交通中的车牌识别,车辆识别等等,运动模糊会严重的影响识别效率。并且,在如今主流的AI图像处理平台诸如:百度AI智能云等都没有运动模糊图像处理相关的功能,目前也没有专门处理运动模糊图像的网站,修复模糊图像的方法大部分是用滤波的方法来修复模糊图像的,效果并不理想。 黑白图像修复:老照片是追溯不可复现历史的重要渠道之一,在还原历史资料、保留珍贵回忆方面有巨大应用价值,但老照片存在大量缺损、模糊、颜色消褪等问题。随着移动摄像机和扫描仪的成熟发展,人们现在可以将照片数字化后通过专家手工修复,然而手工润色通常费时费力,使得成堆的旧照片无法恢复。因此通过数字技术进行修复成为保存珍贵材料的必要条件。老照片是多种图像降级问题的复合,近年来对其进行修补、着色、画质增强的相关研究逐渐增加,但都仅针对其一方面,实际应用性不强。而图像修补、图像着色、分辨率增强等深度学习网络的快速发展使得多模型结合修复成为可能。 2.2 可行性分析 (1)数据可行性 使用了两类数据,一类是GoPro数据集,这类数据集遵循 Borac-chi 和 Foi 描述的随机轨迹生成的想法,通过将子像素插值应用于轨迹矢量来生成核。一类是公开汽车图片MIT Cars dataset数据集,该数据集包含了516张大小为128*128像素的汽车静态图片。通过改变函数参数,生成不同模糊方向、大小的模糊图像,令实验实施更全面。 (2)技术可行性 参考了图像去模糊的最新论文,依照论文中的基础模型简单地进行了初步训练,基础模型以GAN和WGAN为基础,后期的模型修改也有了思路。 (3)硬件可行性 硬件上符合实验要求,预训练模型已经在机器上训练完毕,机器完全可以承担当 前工作量的数据训练;如果后期的训练时间过长,线上GPU租用平台是备用方案,可以保证在预算内完成训练。 2.3 项目设计制约因素 本项目对原有算法进行了改进和应用,软件前端的某些ui设计参考了模板,算法改进和优化模型的训练及测试、以及软件前后端交互代码的设计实现和前端关键部位功能的展示均为原创;软件的使用无安全隐患,软件的使用负荷较小,不会导致硬件电磁污染、不涉及电路材料对人体健康的影响;软件无违法违规行为,不触及道德层面的谴责和审判,无不良信息的传播行为;本项目尊重不同国家、地区、民族的风俗习惯,不同民族生活和风俗上的差异不会对软件系统的使用产生较大的影响。 3 详细设计 基于WGAN的运动模糊图像修复算法 3.1 WGAN方法 baseline我们选取的是基于GAN的WGAN模型。Arjovsky 等提出了使用 Wasserstein 距离衡量分布差异来改进 GAN。原始GAN中采用JS散度来衡量生成数据和真实数据间的差异,但当两者的分布完全不重叠时,JS散度的值将为一个常数,反映不了分布距离,也提供不了训练所需的梯度。其判别器损失函数为: 其中fω是一个含参数 ω 且最后一层不是非线性激活层的判别器网络。限制网络 fω 中的所有参数 ω 在[-c,c]的范围内,c 为一个常数,比如 c 为 0.01 时, 参数 ω 将被限制在[-0.01,0.01],小于 -0.01 则取 -0.01,大于 0.01 则取 0.01。此时关于输入样本 x 的导数fω /x 也不会超过某个范围,即满足 Lipschitz 连续条件。然而 WGAN 使用的梯度裁剪( Gradient Clipping) 存在 2 个问题:

PostgreSQL基本使用与数据备份

前言 上篇了解了 PostgrerSQL 数据库的部署PostgreSQL关系型数据库介绍与部署-CSDN博客,本篇将继续就其基本操作、备份与还原内容做相关介绍。 目录 一、数据库的操作 1. 本机登录 2. 开启远程登录 2.1 开放远程端口 2.2 编辑配置文件 2.3 修改配置密码 2.4 重启数据库服务 2.5 远程登录 3. 创建数据库 4. 查看数据库 5. 切换当前数据库 6. 删除数据库 二、数据表的操作 1. 新建表 2. 插入数据 3. 查看表结构和内容 4. 更新表内容 5. 删除表内容 三、PostgreSQL 管理 1. 配置文件介绍 2. 数据库相关概念 2.1 数据库的结构组织 2.2 PostgreSQL 中的术语 2.3 模版数据库template0 和template1 3. Schema 模式 3.1 创建一个新的 Schema 3.2 在新的 Schema 中创建一个新的表 3.3 查看 Schema 表 3.4 删除模式 四、用户管理

eNSP防火墙配置实验(trust、DMZ、untrust)

【拓扑】 设备 接口 IP地址/子网掩码/网关 AR1 G0/0/0 10.1.3.2/24 G0/0/1 100.1.1.2/24 FW1 G0/0/0 192.168.166.254/24 G1/0/0 10.1.1.1/24,trust域 G1/0/1 10.1.2.1/24,DMZ域 G1/0/2 100.1.3.1/24,untrust域 LSW1 G0/0/1 vlan 3:172.16.1.1/24 G0/0/2 vlan 2:10.1.1.2/24 LSW2 G0/0/1 vlan 2:10.1.2.2/24 G0/0/2 vlan 3:192.168.1.1/24 PC1 e0/0/1 172.16.1.2/24/1 PC2 e0/0/1 100.1.1.2/24/1 Server1 e0/0/0 192.168.1.100/24/1 Cloud1 e0/0/1 192.168.166.1/24 【任务】 一、划分trust、untrust、dmz区域; 二、配置安全策略、静态路由或OSPF等实现两两区域之间的安全互访。 内网可以ping通服务器、外网; 服务器ping内网主机、外网不通; 外网可以ping通服务器,不可以ping通内网。 【步骤】 (1)Web页面登录配置: Cloud1相关配置:先增加一个端口,邦定信息为UDP;再加一个端口,邦定信息为配置好的虚拟网卡,端口映射设置双向通道。连接Cloud和防火墙的0/0/0端口,在防火墙上配置IP,此时IP和Cloud上绑定的网卡为同一网段。注意不要绑到公网网卡上,可以做个虚拟环回或者绑到vm1、vm8上都可以。 启动防火墙的CLI界面,默认账号为admin,密码为Admin@123,登录后需要修改密码。 <USG6000V1>sys #进入系统视图 [USG6000V1]sys FW1 #配置设备名称 [FW1]dis ip int brief #显示虚拟接口对应的IP地址与使用状态 [FW1]int g0/0/0 #进入端口GE0/0/0 [FW1-GigabitEthernet0/0/0]ip add 192.

Docker部署WebRTC-Streamer

文章目录 WebRTC-Streamer概述Docker部署WebRTC-StreamerVue使用WebRTC-Streamer一些问题 WebRTC-Streamer概述 WebRTC-Streamer是一个基于WebRTC技术的流媒体传输工具,它可以通过Web浏览器实现实时音视频流的传输和播放。它提供了一种简单而强大的方式,允许用户在不需要插件或额外软件的情况下进行实时通信和流媒体传输。 WebRTC-Streamer的主要功能包括: 实时音视频传输:使用WebRTC技术,可以在浏览器中通过实时传输音频和视频流来进行实时通信,比如语音通话、视频聊天等。网络摄像头和麦克风支持:支持从用户计算机上的摄像头和麦克风捕获音视频流,并将其传输到目标设备。流媒体播放:可以接收和播放通过WebRTC传输的音视频流,让用户可以在浏览器中实时查看和听取流媒体内容。简单易用的API:提供了一套简单易用的API,让开发者能够方便地集成WebRTC-Streamer到自己的Web应用程序中。 WebRTC-Streamer可以在不同平台和设备上运行,只要浏览器支持WebRTC技术即可。它是一个开源项目,你可以在GitHub上找到它的源代码和更多的信息。如果你有特定的问题或需求,欢迎进一步提问。 Docker部署WebRTC-Streamer 安装Docker 拉取WebRTC-Streamer镜像 sudo docker pull mpromonet/webrtc-streamer 创建容器 docker run -p 8000:8000 --name webrtc-streamer -it mpromonet/webrtc-streamer -p 8000:8000 是指定端口映射,将容器内部的 8000 端口映射到主机的 8000 端口,这样你就可以通过主机的 8000 端口访问 WebRTC-Streamer。--name webrtc-streamer 是为容器指定一个名称,方便后续管理和操作。-it 是以交互模式运行容器,可以通过终端进行交互。mpromonet/webrtc-streamer 是容器镜像的名称。这个镜像是从 Docker Hub 上获取的,它包含了 WebRTC-Streamer 的运行环境和配置。 使用浏览器访问 http://localhost:8000/(本机)或者<服务器ip>:8000 Vue使用WebRTC-Streamer 首先需要在webrtcstreamer.js文件的最后一行添加: export default WebRtcStreamer; Vue代码: <template> <div class="videoDemo shadow" ref="videoDemo"> <video id="video" style="width: 100%;height: calc(100% - 50px);" autoplay loop controls> </video> </div> </template> <script setup lang="

Android Studio使用真机调试

一、Usb驱动准备 ** 1.打开AS的SDK Manager,在SDK Tools下勾选Google Usb Driver,点击Ok。AS会自动下载Usb驱动,速度挺快。一定要记住下载驱动保存的位置,我的路径是R:\Coding\Android SDK 2.下载和真机一样版本的SDK ,我的是安卓8.1版本 二、安装Usb驱动 1.打开设备管理器,右键移动设备(手机要用数据线连接电脑才会有此选项),选择更新驱动 2.手动选择驱动,根据上述下载路径找到驱动 3.安装驱动 三、打开手机的开发者模式 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! 如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android) 结尾 最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。 首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术) 泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶 注解原理丶注解原理丶序列化 Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等) 代码框架结构优化(数据结构丶排序算法丶设计模式) APP性能优化(用户体验优化丶适配丶代码调优) 热修复丶热升级丶Hook技术丶IOC架构设计 NDK(c编程丶C++丶JNI丶LINUX) 如何提高开发效率? MVC丶MVP丶MVVM 微信小程序 Hybrid Flutter 接下来是资料清单:(敲黑板!!!) 1.数据结构和算法 2.设计模式 3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记 4.面试专题资料包(怎么能少了一份全面的面试题总结呢~) 不论遇到什么困难,都不应该成为我们放弃的理由!共勉~ 如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。 《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 13091654381)] 《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

数据结构之优先级队列 - 超详细的教程,手把手教你认识并运用优先级队列

目录 1. 优先级队列概念 2. 优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.4 堆的插入与删除 3.常用接口介绍 3.1 PriorityQueue 的特性 3.2 PriorityQueue常用接口介绍 4. 堆的应用 4.1 PriorityQueue 的实现 4.2 堆排序 4.3 Top-k问题 1. 优先级队列概念 队列是一种先进先出的结构,但是有些时候,要操作的数据带有优先级,一般出队时,优先级较高的元素先出队,这种数据结构就叫做优先级队列。 比如:你在打音游的时候,你的朋友给你打了个电话,这种时候,就应该优先处理电话,然后再来继续打音游,此时,电话就是优先级较高的。 在这种情况下,数据结构应该提供两个最基本的操作,一个是返回优先级最高的对象,一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue)。 2. 优先级队列的模拟实现 JDK1.8中的 PriorityQueue 底层使用了堆这种数据结构,而堆实际就是在完全二叉树的基础上进行了一些调整。也就是说,堆的是由完全二叉树调整而来的,可以存储到数组中。 2.1 堆的概念 如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为 小堆(或 大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。 堆的性质: 堆中某个节点的值总是不大于或不小于其父节点的值。堆总是一棵完全二叉树。 如图: 2.2 堆的存储方式 因为堆是一棵完全二叉树,所以可以采用层序遍历的方式来高效存储数据。 注意:对于非完全二叉树,则不适合使用顺序方式进行存储,因为为了能够还原二叉树,空间中必须要存储空节点,就会导致空间利用率比较低。

小程序Taro跨端框架实战总结

1 背景 1.1 项目 项目需开发移动端,需支持以图表、表格等形式展示数据,对素材进行审核审批等功能。并需支持微信、企微小程序、h5等平台使用。 2 技术选型 2.1 基础框架选择 从落地场景分析,我们需要具备,微信小程序,企微小程序,h5等平台的支持。如果采用小程序/h5等单平台框架开发,在开发效率与人力占用上的成本显然会与需要支持的平台数量成正比。同时小程序在原生开发上也无法使用工程化带来的部分提效功能,所以在选型上会优先考虑跨平台的工程化开发框架。在技术选型过程中,预研了以下几种跨平台方案。 Taro :一个基于 React 技术栈的跨平台小程序框架,支持使用 React/Vue/Nerv 等框架来开发 微信/企微/京东/百度/支付宝/字节跳动/QQ/飞书小程序 //H5// RN 等应用。 uni-app :一个使用 Vue.js 技术栈的跨平台小程序框架,目前支持iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。 mpvue :由Meituan-Dianping团队开发,基于vue.js设计的跨端框架。目前支持微信小程序 、 百度智能小程序, 头条小程序 和 支付宝小程序。 综合下来,Taro的跨技术栈、平台支持和比较完善的生态会更适合我们当前需要落地的应用。具体的入门教程等可看官方文档,这里不详细讲解。 2.2 项目规范 2.2.1 样式规范 tailwind css ,移动端上,ui要求往往比较严格,乃至到1px的偏差,而tailwind可以更灵活的满足自定义样式,同时降低样式开发管理的成本。 sass :因为后续使用到的组件库是基于sass来开发样式,所以项目中也使用sass css预处理器。对于公用组件样式,需要使用css modules模式来避免样式冲突。 2.2.2 状态管理 全局状态管理:市面上的状态管理库数不胜数,像redux, mobx, recoil等依赖库群魔乱舞,在此就不具体展开,有兴趣的可以看看这个视频 学习下,在项目中最终确定使用较轻量级、学习和使用成本也非常低的jotai 。 数据获取状态管理:对比了swr 与react-query 。相较于swr,react-query功能比较丰富,包括请求缓存、生命周期管理、请求取消、错误处理等,比较适用于复杂的应用场景,而swr则比较轻量级,API 设计简单易用,学成本相对较低,适合快速开发。鉴于小程序的场景交互较为简单,同时对于体积严格要求,最终选择轻量易用的swr。 2.2.3 开发流程规范 格式化commit:通过 commitizen来规范commit规范 sudo npm install -g commitizen // commitizen 的首选适配器,提供commit的提交标准配置 sudo npm install -g cz-conventional-changelog

【MATLAB应用】去噪算法

01.引言 图像的产生是电子和光学相互作用的结果,而图像中的噪声则是由于成像过程中的颗粒性质而客观存在的。不同类型的噪声从不同的视角产生,各自具有特点。因此,有效地去除图像中的噪声以获得更高质量的图像具有实际意义。目前存在多种图像去噪方法,包括基于空间域、变换域、偏微分方程模型和形态学等方法。通常,图像去噪的一般过程包括以下步骤: 确定噪声模型:首先根据实际图像的情况,确定噪声的数学模型,这有助于理解和建模噪声的特性。估计参数:估计噪声模型中的必要参数,这些参数将在后续步骤中用于选择合适的去噪方法。选择去噪方法:根据噪声类型选择适当的去噪方法。常见的方法包括基于空间域的方法、基于变换域的方 法、基于偏微分方程模型的方法以及基于形态学的方法。衡量评价:最后,评估图像去噪的效果。这可以通过比较去噪后的图像与原始图像之间的差异来实现。 基于常见的噪声类型,本章将重点研究基于变换域的小波分析方法进行图像去噪。小波变换具有在时频域上提供有效表示的优势,因此在图像去噪中得到了广泛应用。通过在小波域对图像进行分析和处理,可以更好地保留图像的结构信息并去除噪声。 02.模拟噪声的生成 01.引言 图像的产生是电子和光学相互作用的结果,而图像中的噪声则是由于成像过程中的颗粒性质而客观存在的。不同类型的噪声从不同的视角产生,各自具有特点。因此,有效地去除图像中的噪声以获得更高质量的图像具有实际意义。目前存在多种图像去噪方法,包括基于空间域、变换域、偏微分方程模型和形态学等方法。通常,图像去噪的一般过程包括以下步骤: 确定噪声模型:首先根据实际图像的情况,确定噪声的数学模型,这有助于理解和建模噪声的特性。 估计参数:估计噪声模型中的必要参数,这些参数将在后续步骤中用于选择合适的去噪方法。 选择去噪方法:根据噪声类型选择适当的去噪方法。常见的方法包括基于空间域的方法、基于变换域的方 法、基于偏微分方程模型的方法以及基于形态学的方法。 衡量评价:最后,评估图像去噪的效果。这可以通过比较去噪后的图像与原始图像之间的差异来实现。 基于常见的噪声类型,本章将重点研究基于变换域的小波分析方法进行图像去噪。小波变换具有在时频域上提供有效表示的优势,因此在图像去噪中得到了广泛应用。通过在小波域对图像进行分析和处理,可以更好地保留图像的结构信息并去除噪声。 02.模拟噪声的生成 clc;clear;close all; % 在原始图像中加入Gaussian白噪声,椒盐噪声和乘性噪声。图像来源为参考文献[11] f=imread('Fig4-1(a)original_pattern.tif'); m=64/255; var = 400/255^2; g_gauss=imnoise(f,'gaussian',m,var); d = 0.05;%d表示噪声强度 g_salt = imnoise(f,'salt & pepper',d); v = 0.06; g_speckle = imnoise(f,'speckle', v); % 显示加噪图像 figure subplot(2,2,1), imshow(f),title('原始图像'); subplot(2,2,2), imshow(g_gauss), title('Guassian 噪声图像'); subplot(2,2,3), imshow(g_salt), title('椒盐噪声图像'); subplot(2,2,4), imshow(g_speckle), title(' speckle 噪声图像'); %图像存储 % imwrite(g_gauss,'Fig4-1(b)Nguass.jpg','jpg'); % imwrite(g_salt,'Fig4-1(c)Nsalt.jpg','jpg'); % imwrite(g_speckle,'Fig4-1(d)Nspeckle.jpg','jpg'); %显示直方图 figure(2) subplot(2,2,1), imhist(f),title('原始图像的灰度直方图'); subplot(2,2,2), imhist(g_gauss),title('Guassian 噪声图像的直方图'); subplot(2,2,3), imhist(g_salt),title('椒盐噪声图像的直方图'); subplot(2,2,4), imhist(g_speckle),title('speckle噪声图像的直方图'); 03.

解决org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result

文章目录 问题描述:原因分析:解决方案: 问题描述: 当你使用 达梦数据库 创建数据表后,在项目中使用MyBatis-Plus尝试插入数据到新建的表中时,有时程序会报入如下错误 如下所示 完整报错信息如下 org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException: Error ; uncategorized SQLException; SQL state [null]; error code [0]; Error; nested exception is java.sql.SQLException: Error at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89) ~[spring-jdbc-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.0.7.RELEASE.jar:5.0.7.RELEASE] at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) ~[mybatis-spring-2.0.5.jar:2.0.5] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440) ~[mybatis-spring-2.0.5.jar:2.0.5] at com.sun.proxy.$Proxy108.insert(Unknown Source) ~[na:na] at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:271) ~[mybatis-spring-2.0.5.jar:2.0.5] at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:60) ~[mybatis-plus-core-3.4.1.jar:3.4.1] at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) ~[mybatis-plus-core-3.4.1.jar:3.4.1] at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.4.1.jar:3.4.1] at com.

实际开发中的有趣bug:“undefined“ is not valid JSON SyntaxError: “undefined“ is not valid JSON。

bug解读: 指出在尝试解析或序列化 JSON 数据时遇到了问题。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它要求数据必须是有效的 JSON 格式。在 JavaScript 中,undefined 是一个特殊的值,表示变量没有被赋值,它不是一个有效的 JSON 值。 场景: 在后台项目,用户登录后,通过用户的菜单权限渲染侧边栏菜单,做了持久化存储。当登出后,在登录页刷新页面,就报错了。 分析与解决: 首先知道了报错原因,所以在mutations存数据的时候,做了一下兼容: // let menu = JSON.stringify(val, (key, value) =>{ // if(value === undefined){ // return null // } // return value // }) // Cookie.set('menu', menu) 发现并没有用。 然而,如果改成在侧边栏组件中,获取menu的时候做兼容: ~computed: menu(){ // 判断当前数据,如果缓存中没有,就去当前store中获取 // 有个问题,如果把JSON.parse(Cookie.get('menu'))定义在当前store中兼容,数据是可以获取到,但是回到登录页刷新就会报错: // "undefined" is not valid JSON SyntaxError: "undefined" is not valid JSON // 而在这里做兼容,在登录页刷新时就不会报错 console.log('menu', JSON.parse(Cookie.get('menu')) ); return JSON.parse(Cookie.get('menu')) || this.

人工智能常见的分类算法

在机器学习中,分类算法是用于预测数据集中实例所属类别的重要技术。本文将详细介绍七种常见的分类算法,包括决策树、支持向量机、朴素贝叶斯、最大熵、K最近邻算法、神经网络和深度学习,并提供相应的示例。 1. 决策树(Decision Tree) 决策树是一种基于树结构的分类算法。它通过一系列规则对数据进行划分,直到达到叶子节点为止。在分类过程中,决策树会从根节点开始,根据特征值的大小或类型将数据划分到子节点,直到找到匹配的叶子节点。 示例:使用决策树进行信用评分预测。 from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier # 加载数据集 data = load_breast_cancer() X, y = data.data, data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建决策树模型 clf = DecisionTreeClassifier() # 训练模型 clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict(X_test) # 评估模型 from sklearn.metrics import accuracy_score print("Accuracy:", accuracy_score(y_test, y_pred)) 2. 支持向量机(Support Vector Machine,SVM) 支持向量机是一种基于最大间隔的分类算法。它通过找到一个最优的超平面,将不同类别的数据分离开来,使得两类数据之间的距离最大化。 示例:使用SVM进行鸢尾花品种分类。 from sklearn.

前端console用法分享

console对于前端人员来讲肯定都不陌生,相信大部分开发者都会使用console来进行调试,但它能做的绝不仅限于调试。 最常见的控制台方法 作为开发者,最常用的 console 方法如下: 控制台打印结果: 今天我分享的是一些 console 的高级用法。 首先,看一下 console 提供了哪些方法,在控制台打印一下: 在 Chrome 123 版本,可以看到有 25 个方法。这篇文章将介绍一部分比较实用的方法,了解专业的前端都怎么运用 console的。 打印时间 console.time()– 使用输入参数的名称启动计时器。在给定页面上最多可以同时运行 10,000 个计时器。console.timeEnd()– 停止指定的计时器并记录自启动以来经过的时间(以毫秒为单位)。 常见的一种场景是计算程序执行时间,以跟踪操作所需的时间。这便可以通过使用console.time()启动计时器并传入标签,然后通过相同的标签使用console.timeEnd()结束计时器来实现。甚至还可以使用console.timeLog()在长时间运行的操作中添加标记。 // 定义一个函数,模拟一个耗时的计算过程 function calculateSomething() { let sum = 0; for (let i = 0; i < 1000000000; i++) { sum += i; } return sum; } // 使用 console.time() 开始计时,并给计时器命名 console.time('Calculation Time'); // 执行耗时的函数 const result = calculateSomething(); // 使用 console.timeEnd() 结束计时,并打印经过的时间 console.timeEnd('Calculation Time'); // 如果在计算过程中想要添加额外的标记点,可以使用 console.

【C++】内联函数----inline函数的详细使用教程

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟 👏专栏:C++👏 👏专栏:Java语言👏👏专栏:Linux学习👏 👏专栏:C语言初阶👏👏专栏:数据结构👏👏专栏:备战蓝桥杯👏 文章目录 前言概念:出现动机:C语言的解决方案:宏函数新方案:C++方案---内联函数总结:内联函数替代宏函数 特性:以空间换时间内联函数只是一个请求:适用范围再举个栗子:代码膨胀 inline不建议声明和定义分离:举个栗子:正常情况(预处理-编译-链接)预处理:编译:链接: 内联情况:预处理:编译:链接: 建议:总结: 注意事项:宏的优缺点?优点:缺点: 长不用,短用内联函数。 最后​​ 前言 今天我们来学习C++中的一个比较重要的关键字–inline函数(内联函数),码字不易,希望多多支持!!! —————————————————————————————— 概念: 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 出现动机: 减少函数栈帧的开辟和销毁,如当频繁调用一个函数的时候(比如快排算法中函数多次被调用),此时消耗栈帧的比较大(不断地调用栈帧销毁栈帧)。 因此要将函数栈帧的优化掉 C语言的解决方案:宏函数 对于C语言中,可以使用宏函数。 使用宏函数为什么没有函数栈帧的消耗??? 因为在预处理阶段就被替换了----优化了,没有了函数的栈帧的消耗了 新方案:C++方案—内联函数 有些人可能会比较疑惑:C语言中已经有方案了,为什么C++为什么还要再设计一个关建字方案: 因为宏函数有很多不方便的地方: 不可以调试没有类型安全检查容易写错 比如你可以写一个ADD宏函数来验证: #define ADD(int x, int y) {return x + y;} #define ADD(x, y) x + y #define ADD(x, y) (x + y) #define ADD(x, y) (x) + (y) #define ADD(x, y) ((x) + (y)); 这五种写法都是很有可能是你写出来的(最后一个是对的,其余全是错的) 这几个宏定义的写法都是错误的,具体原因如下: #define ADD(int x, int y) {return x + y;} 该写法定义了一个带有参数列表的宏,但是参数列表应该在括号内,而不是放在宏名后面即ADD(int x, int y),正确的定义应该是:

cmu15445 2023fall project2 详细过程(上)pageguard和三级可扩展哈希

project2上 Task11 总体介绍2 头文件(page_guard.h)3 代码 Task2 Extendible Hash Table Pages1 总体要求2 Hash Table Header Page2.1变量名和方法含义2.2代码 3 Hash Table Directory Page3.1变量名和方法含义3.2 GetSplitImageIndex详解3.3代码 4 Hash Table Bucket Page4.1变量名和方法含义4.2代码 Task1 1 总体介绍 要求实现三种PageGuard类,分别是BasicPageGuard、ReadPageGuard和WritePageGuard,防止用户遗漏调用Unpin方法导致缓冲页被固定无法驱逐,与智能指针相似,当PageGuard对象生命周期结束时,在析构函数中调用Unpin方法来确保释放缓冲页;进一步的,ReadPageGuard和WritePageGuard还会保护缓存页的读写一致性,且避免死锁(若其他时候后忘记解锁,则在析构时解锁)。当然,PageGuard类也要对外提供方法用于手动释放。实现Task1中的类会为后面Task3的可扩展哈希做铺垫。 具体函数:(cmu里的) 对BasicPageGuard、ReadPageGuard和WritePageGuard实现以下函数: PageGuard(PageGuard &&that):移动构造函数。 operator=(PageGuard &&that):移动赋值运算符。 Drop():解除固定和/或释放锁。 ~PageGuard():析构函数。 为BasicPageGuard实现以下升级函数。这些函数需要保证在升级过程中,受保护的页面不会被从缓冲池中逐出。(这个写完好像没用,不写也能跑通) UpgradeRead():升级为ReadPageGuard UpgradeWrite():升级为WritePageGuard 使用新的page guard,在BufferPoolManager中实现以下包装函数: FetchPageBasic(page_id_t page_id) FetchPageRead(page_id_t page_id) FetchPageWrite(page_id_t page_id) NewPageGuarded(page_id_t *page_id) 2 头文件(page_guard.h) 里面注释写的挺好,功能实现按注释写 需要用到的变量是,BasicPageGuard类里是 private: friend class ReadPageGuard; friend class WritePageGuard; BufferPoolManager *bpm_{nullptr}; Page *page_{nullptr}; bool is_dirty_{false}; ReadPageGuard和WritePageGuard里是

《AI爆款文案 巧用AI大模型让文案变现插上翅膀》

前言 解锁AI大模型潜力,让文案创作飞跃升级 解构文案打动人的写作逻辑 掌握爆款文、时事文、干货文,AI一键式创作 借AI之力,握未来之笔,引领文案革命新浪潮 关键点 爆款文案一键式创作:通过人工智能写爆款文案,提高效率的同时,也降低了试错成本的代价。本书通过大量的实际案例,展示了AI工具在文案创作中的应用和效果,使读者能够更直观地掌握AI工具的巨大优势。解构文案变现逻辑:文案变现的市场需求度极高,无论应用在新媒体文、短视频文案脚本还是知乎小红书种草文都能带来极高收益,而当文案变现与人工智能结合在一起时,一切就变得更有意思了。本书不仅关注文案创作本身,更着眼于如何利用AI工具实现文案的变现,帮助创作者实现商业价值的最大化。握未来之笔,引领文案革命新浪潮:本书不仅涉及泛流量文案、泛商业文案和私域文案的创作技巧,还针对主流平台和社交平台详细介绍了AI在文案创作实战中的高级技巧,引领文案变革新浪潮。 内容简介 掌握人工智能辅助文案写作的方式,就可以轻松写出高质量文案,进而快速实现文案变现。本书通过对10款人工智能应用的介绍及调试,帮助读者快速掌握人工智能辅助文案变现的方式。本书共10章,分别讲解AI智能创作,AI爆款文案写作工具,人工智能辅助泛流量文案、泛商业文案、私域文案创作,利用人工智能实现文案变现的底层逻辑,以及在今日头条、百家号、小红书、知乎等平台及不同展示形式下进行文案创作的实战案例等。 本书适合希望通过文案写作实现变现的写作新人、写作爱好者以及相关培训机构使用。 作者简介 刘丙润,作家评委、丙润传媒创始人、自媒体写作导师、商业化IP向流量写作创始人,著有《结构化写作:新媒体高效写作手册》《AI高效工作一本通》《AI智能写作:巧用AI大模型让新媒体变现插上翅膀》。 9年自媒体从业经验,靠写作实现月入5万。曾进行数百次公益写作内容分享,先后担任悟空问答营、写作训练营、基础写作营、读书营、小红书写作培训导师,培训付费学员2000+,免费教学成员8000+,组织并撰写15节零基础写作专属变现课、45节零基础自媒体视频课、9节自媒体认知课等多项课程,有极专业的自媒体教学经验。 全网粉丝百万,文章累计阅读量破2亿,先后获得百家匠心计划签约作者、百家优选计划文史频道推荐官、头条营销价值榜、月度优质账号、近百篇青云奖、腾讯金企鹅奖等多项荣誉,并获得部分平台流量专属扶持激励。 京东:https://item.jd.com/14521488.html 当当:http://product.dangdang.com/29706300.html

[Android]申请成为Google Play个人开发者

1.注册Google邮箱 2.进入play.google.com选择成为“企业”或是“个人”开发者 https://play.google.com/console 3.选择成为个人开发者 这里会提示你申请的所需条件。有告诉我们,后面需要支付$25。 继续的话,要求填写一个开发者名称。 4.创建付款信息 操作说明很详细,后续按照左侧流程顺序操作就行了。 5.支付 支付时,只支持如下卡种直接支付美金。注意,不是所有全币种卡都能支付成功,办理卡时最好先在网上查询一下对应的卡能否支付。 6.信用卡选择 这种卡,是朋友推荐的,能正常支付开发者费用。 我办理的,是如下这种卡,能够正常支付。网上查询到有种说法,需要不包含银联标的卡全币种卡,不然支付时会遇到“Card type not accepted”问题。估计,这两种卡,在实际结算时有很多区别。 7.验证身份 支付完成后,邮箱会收到一封邮件,要求去“验证”个人信息。 验证个人信息后,会提示需要几天时间审核。 我这里,只等了一个工作日就通过审核。 8.Android手机设置 在Google Play Console首页,我们还会看到,要求“验证是否有权访问真实的Android设备”。 详情如下,不管这个问题也可以用模拟器进行开发了,只是上传“内部测试版本”和“正式版”需要先用真机登陆Google Play Console进行验证。 VIVO X20 在Android真机,下载Google Play,然后登陆Google账号下载安装Google Play Console。 登陆Google Play Console后,提示我设备不能使用,最低要求Android 10. 我这手机太老无法升级,需要重新换一台android手机。 Redmi 12C 花了500块, 网购了一台小米做测试机, 才发现这手机太坑了. 强烈推荐, 去买VIVO手机. 系统MIUI14, 系统限制安装Google Services Framework, 要安装GSF必须先获得root权限. 必须先申请解BL锁, 如果小米账号首次绑定手机,需要在绑定帐号后等待7天(168小时),期间不要退出小米帐号,以满足解锁条件. 也是醉了, 浪费时间, 各位避开坑. 手动安装 Google Play 服务。可以从可信的第三方网站如 APKMirror (apkmirror.com) , 下载这些文件。你需要下载并安装以下 APK 文件: Google Services Framework Google Play Services

【开发问题】IDEA新建Spring Boot项目遇到的问题:Selected version of Java 17 is not supported by the project SDK ‘1.8

目录 问题描述 问题原因 解决方案 方案一 方案二 问题描述 IntelliJ IDEA创建Spring工程时报错,报错信息:Selected version of Java 17 is not supported by the project SDK ‘1.8’. Either choose a lower version of Java, or set a higher version of the SDK. 问题原因 电脑本地安装的JDK版本与IDEA创建Spring工程时默认的JDK版本17不一致 正常情况,只需要把创建Spring工程时默认的JDK版本调整为本地版本8即可,但是发现根本没有JDK8选项 解决方案 方案一 替换spring boot项目初始化源地址,创建springboot项目时,点击server URL右侧的⚙,将https://start.spring.io/ 或者 http://start.springboot.io/ 替换为 https://start.aliyun.com/ 即可 方案二 升级JAVA版本,根据个人所需选择对应版本,JDK安装教程可参考下面这篇博客 博客链接:https://blog.csdn.net/weixin_47698656/article/details/137524808

深入理解C语言中的extern关键字:跨文件共享的全局变量和函数

目录 摘要: 第一章:extern关键字的定义和基本用法 第二章:extern关键字在不同上下文中的应用 第三章:extern关键字在性能优化中的应用 技术总结: 摘要: 本文旨在深入探讨C语言中的extern关键字,为开发者提供关于其在跨文件共享全局变量和函数方面的全面理解。文章首先概述了extern关键字的定义和基本用法,随后详细分析了它在不同上下文中的具体应用,包括全局变量和函数声明。最后,通过技术总结,强调了extern在编程中的重要性。 第一章:​​​​​​​extern关键字的定义和基本用法 extern关键字是C语言中的一个修饰符,用于声明全局变量和函数的引用。它用于告诉编译器,某个全局变量或函数的定义位于其他文件中。以下是extern关键字的基本用法: 全局变量声明:在文件中使用extern关键字声明一个全局变量,即使该变量在其他文件中定义。 函数声明:在文件中使用extern关键字声明一个函数,即使该函数在其他文件中定义。 实例解析: 假设我们有一个全局变量和一个函数,它们分别定义在两个不同的文件中。 // 文件1 #include <stdio.h> // 全局变量的定义 int global_var = 10; // 全局函数的定义 void global_func() { printf("全局函数被调用\n"); } // 文件2 #include <stdio.h> // 使用extern关键字声明全局变量 extern int global_var; // 使用extern关键字声明全局函数 extern void global_func(); int main() { printf("全局变量值: %d\n", global_var); global_func(); return 0; } 在这个例子中,我们定义了一个全局变量global_var和一个全局函数global_func,它们分别定义在file1.c和file2.c文件中。在file2.c文件中,我们使用extern关键字声明了这两个全局变量和函数。 通过本章的学习,开发者可以理解extern关键字的基本用法,并学会如何在C语言中使用它来声明和引用全局变量和函数。掌握这些知识对于编写跨文件共享的全局变量和函数的C语言程序至关重要。 第二章:extern关键字在不同上下文中的应用 extern关键字在C语言中的使用场景非常广泛,它在不同上下文中具有不同的作用和效果。本章将详细分析extern关键字在不同上下文中的应用。 全局变量声明:在文件中使用extern关键字声明一个全局变量,即使该变量在其他文件中定义。这允许我们在多个文件中访问和修改同一个全局变量。 函数声明:在文件中使用extern关键字声明一个函数,即使该函数在其他文件中定义。这允许我们在多个文件中调用同一个函数。 实例解析: 假设我们有一个全局变量和一个函数,它们分别定义在两个不同的文件中。 // 文件1 #include <stdio.h> // 全局变量的定义 int global_var = 10; // 全局函数的定义 void global_func() { printf("

(我的创作纪念日)[MySQL]数据库原理7——喵喵期末不挂科

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 ​编辑 前言 数据约束和参照完整性 背景与要求 PRIMARY KEY约束 理解PRIMARY KEY约束 表的完整性约束 复合主键 小总结 修改表的主键 UNIQUE约束 创建UNIQUE约束 总结 前言 喵子回来了,冲冲冲! 数据约束和参照完整性 背景与要求 在一个表中,通常需要某个字段或字段的组合唯一地标识一条记录,这就是主键约束。 在一个表中,有时要求某些列值不能重复,但一个表只能有一个主键,这时可以设置UNIQUE键进行约束。 在关系数据库中,表与表之间数据是有关联的。例如,成绩表中的课程号要参照课程表的课程号,成绩表的学号要参照学生表中的学号。该怎样进行约束,使表与表之间的数据保证一致呢? 本任务要求学习者理解主键约束(PRIMARY KEY)、唯一性约束(UNIQUE)、外键参照完整性约束(FOREIGN KEY)以及CHECK约束的含义。 学习创建和修改约束的方法,掌握数据约束的实际应用。 PRIMARY KEY约束 理解PRIMARY KEY约束 可指定一个字段,也可以指定二个及以上的字段作为复合主键,其值能唯一地标识表中的每一行,列不能取空值。 主键约束能确保数据唯一,所以经常用来定义标志列。 可以在创建表时创建主键,也可以对表中已有主键进行修改或者增加新的主键。 设置主键通常有两种方式:表的完整性约束、列的完整性约束。 表的完整性约束 举个例子 创建表course1,用表的完整性约束设置主键。 mysql> CREATE TABLE IF NOT EXISTS course1 (c_no char(4) NOT NULL, c_name char(10) DEFAULT NULL, t_no char(10) DEFAULT NULL, hours int(11) DEFAULT NULL, credit int(11) DEFAULT NULL, type varchar(10) DEFAULT NULL, PRIMARY KEY (c_no) )ENGINE=InnoDB DEFAULT CHARSET=gb2312; 创建表course2,用列的完整性约束设置主键。

2024年Java发展怎么样?现在学了Java技术出来是否还能找到工作?

对于了解计算机编程的同学来说,Java语言并不陌生。她诞生于1995年,应互联网而生,在TIOBE世界语言编程排行榜上曾无数次登顶第一,其他语言诞生、消亡,唯有Java连续数年荣登第一宝座,是当之无愧的王者编程语言。 而对于编程零基础的同学来说,可能在今天之前都不知道Java是什么。但是,你一定经历过“双十一”的剁手狂欢,体会过春运买票的艰难吧?!有没有想过,当数以亿计的用户同时打开一个网站,是什么保证了她能够不宕机,还能安全、有序地运行呢?这当然少不了Java的功劳。用Java语言编写的网站以性能为王的优势,让网站以不变应万变,瞬间告别用户访问量过剩出现的宕机的难题。 马云爸爸说过,未来的制造业要的不是石油,最大的能源应该是数据。不管你是上网购物,还是手机浏览咨询,甚至是政府机构,大型跨国集团系统,银行,背后的庞大的数据处理都是由Java来完成,也正是由于其简单性、可移植性、安全性、动态性等特点,Java成为了服务器端的顶梁柱,保护着网站的一方安全。 几乎90%以上的大中型互联网应用系统在服务器端开发首选Java,据2020年不完全统计全球有25亿Java服务在运行,450多万JavaEE开发者活跃在地球的每个角落。Java在编程世界的地位绝对不容小觑。 (二)10大优势奠定Java王者地位 Java从1996年第一个版本发布至今,已经跌宕起伏走过了25个年头,那么,Java语言到底有什么优势可以占据排行榜第一的位置呢? <1>当然与她的10大语言优势脱不开关系。 <2>Java在若干领域都有很强的竞争力,比如服务端编程,高性能网络程序,企业软件事务处理,分布式计算,Android 移动终端应用开发等等。 <3>符合工程学的需求,我们知道现代软件都是协同开发,那么代码可维护性,编译时检查,高效的运行效率,跨平台能力,丰富的IDE,测试,项目管理工具配合,都使得 Java 成为企业软件公司的首选,也得到很多互联网公司的青睐。 所以综合而言,Java 语言全能方面是最好的。 几大趋势告诉你现在火爆一时的Java行业会不会饱和? Java 行业现状及前景分析 时至今日,Java语言已经火爆20余载,那么,在这个瞬息万变的移动互联网时代,未来,他还能一如既往,引领开发界吗?真的像有些人说的会饱和而辉煌不再吗? Java行业前景的好坏主要从Java的应用领域来看,Java语言的应用方向主要表现在以下三个方面: 首先是企业级应用(主要指复杂的大企业的软件系统)、各种类型的网站,Java的安全机制以及它的跨平台的优势使它在分布式系统领域开发中有广泛应用;其次是桌面应用就是常说的C/S应用,主要用来开发运行于不同的操作系统上的桌面应用程序;再次是移动领域应用,主要表现在消费和嵌入式领域,是指在各种小型设备上的应用包括手机、PDA、机顶盒、汽车通信设备等。 在未来Java互联网+、Java+大数据、Java+人工智能、Java+物联网、Java+智能医疗、Java+智能金融等科技领域潜力无限。 国家政策支持 Java市场需求增速最快 近年来我国信息化发展迅速,软件工程是计算机领域发展最快的学科分支之一,国家非常重视软件行业的发展。对软件工程师人才的培养给予了非常优惠的政策。在所有软件开发类人才的需求中对Java工程师的需求达到全部需求量的60~70%,应该说Java软件工程师就业前景是非常好的。 再加上Java软件工程师不仅IT专业企业需要,广大的非IT企业也需要,前景是非常乐观的。我国目前对软件人才的需求已达20万并且以每年20%左右的速度增长,在未来5年内合格软件人才的需求将远大于供给。 全球第一编程语言Java 薪资高 Java开发工程师工资待遇高,工作一年平均薪资1万+,远高其他行业。目前Java从业人员平均年薪已逾十万元,工作1-2年的Java工程师年薪一般在12万元以上。据官方数据统计,2020年Java工程师均薪资10K/月以上,且已连续增长6年。 就业渠道广,人才缺口大,供不应求 Java自从1995年诞生以来,凭借其高人气经受住了时间和市场的双重考验。在现实生活中,金融业服务器、web领域、软件工具、交易应用、J2ME应用、嵌入式领域、大数据交易、高频率交易领域等项目都会涉及到Java语言的使用,不难看出就业领域十分广泛。 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化! 由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新! 如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取) 总结 对于面试,一定要有良好的心态,这位小伙伴面试美团的时候没有被前面阿里的面试影响到,发挥也很正常,也就能顺利拿下美团的offer。 小编还整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家, 最后感谢大家的支持,希望小编整理的资料能够帮助到大家!也祝愿大家都能够升职加薪! 《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 助到大家!也祝愿大家都能够升职加薪! 《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!