visualvm工具远程对linux服务器上的JVM虚拟机进行监控与调优方案

原创/朱季谦 最近做了一些JVM监控与调优的事情,算是第一次实践,还比较陌生,故而先把这一次经验简单记下笔记,这样,对后面学习调优方面时,不至于又想不起来了。 本文档主要总结在window本地环境远程对linux服务断的JVM虚拟机进行监控与调优的方法。 visualvm工具是JDK自带的,在java安装目录下可以找到:C:\Program Files\Java\jdk1.8.0_77\bin 打开visualvm工具,右击远程,添加远程主机—— 在弹出框上的主机名处,填写需要连接的服务器IP—— 添加成功后,右边框就出现了以下图标—— 这时,右击“42.194.xx.xx”,会看到,有两种远程连接方式,一个是JMX,一个是jstatd。 这里主要分享是以jstatd模式。在以jstatd模式连接前,需要在监控的远程服务端启动jstatd,启动步骤如下—— 找到服务端jdk的bin目录,新建jstatd.all.policy文件 [root@VM-16-4-centos bin]# whereis java java: /usr/bin/java [root@VM-16-4-centos bin]# cd /usr/bin/ [root@VM-16-4-centos bin]# vim jstatd.all.policy 将以下内容复制到jstatd.all.policy文件里—— grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; }; 保存,设置权限—— [root@VM-16-4-centos bin]# chmod 777 jstatd.all.policy 设置成功—— 在监控的远程服务端启动jstatd 执行 jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=42.194.xxx.xx & 注:42.194.xxx.xx 是我个人腾讯云机器IP。 [root@VM-16-4-centos bin]# jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=42.194.xxx.xx & [1] 52056 这时,观察visualvm工具右边栏菜单,可以看到远程连接的服务端已经自动连接上jstatd,这就意味着,可以在本地通过远程jstatd来监控开发服务器上的jvm信息了,从而进行jvm调优监控等操作。 点击其中一个进程biz-0.0.1-SNZPSHOT.jar,就可以进入到对应的监控台—— visualvm控制台有概述、监视、抽样器等菜单,同时,可以装入插件扩展功能—— 概述 可以看到jvm参数、系统属性、jdk版本与安装路径等信息; 设置的jvm参数,这里新生代分配了最小堆空间是256m,最大堆空间是256m,新生代128m,元空间是128m,堆=新生代+老年代,不包括永久代(方法区),这就意味着,这配置当中的老年代=256m。 -Xms256M -Xmx256M -Xmn128M -XX:PermSize=128M -XX:MaxPermSize=256M 这些都是指定JVM参数运行对应的jar进程,除此之外,还有其他参数可做设置。 监视

【移动端自动化】【测试辅助工具】windows+tidevice安装

之前研究Windows下如何连接IOS真机进行测试,查询到的资料都是需要依赖Mac系统。今天偶然发现只需要安装tidevice就能进行IOS真机测试了! 下面是在Windows下配置安装tidevice: 一、环境搭建 1、安装python3.6及以上 Welcome to Python.org 2、配置python系统环境变量(新版本的python已经自带pip工具啦) 3、切换pip源至阿里 在windows下找到pip.ini,修改为阿里的源:Simple Index 二、安装tidevice 1、安装 pip3 install -U "tidevice[openssl]" 2、确认安装是否成功 tidevice version 如出现以下界面显示版本号代表安装成功 3、苹果手机(iphone14)通过数据线连接电脑 4、列出连接的设备,输入以下命令 tidevice list 或 tidevice list --json 如果出现以下错误是没有打开开发者模式的原因: IOS16以上开发者模式是隐藏的,也不能通过版本号敲击显示,具体打开方式请查看 iOS16打开开发者模式的方法_哔哩哔哩_bilibili 将开发者模式打开后,再次执行命令,即可看见已能连接手机: 好啦tidevice安装大功告成! 欢迎关注公众号:

ModuleNotFoundError: No module named ‘tqdm‘

问题描述 Traceback (most recent call last): File "/home/visionx/nickle/temp/SimCLR/linear_evaluation.py", line 209, in <module> from tqdm import trange ModuleNotFoundError: No module named 'tqdm' 解决办法 pip install tqdmconda install tqdm

Linux RPM包安装、卸载和升级

我们以安装 apache 程序为例。因为后续章节还会介绍使用源码包的方式安装 apache 程序,读者可以直观地感受到源码包和 RPM 包的区别。 RPM包默认安装路径 通常情况下,RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到表 1 所示的目录中。 RPM 包的默认安装路径是可以通过命令查询的。 除此之外,RPM 包也支持手动指定安装路径,但此方式并不推荐。因为一旦手动指定安装路径,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用(需要进行手工配置才能被系统识别),得不偿失。 与 RPM 包不同,源码包的安装通常采用手动指定安装路径(习惯安装到 /usr/local/ 中)的方式。既然安装路径不同,同一 apache 程序的源码包和 RPM 包就可以安装到一台 Linux 服务器上(但同一时间只能开启一个,因为它们需要占用同一个 80 端口)。 实际情况中,一台服务器几乎不会同时包含两个 apache 程序,管理员不好管理,还会占用过多的服务器磁盘空间。 RPM 包的安装 安装 RPM 的命令格式为: [root@localhost ~]# rpm -ivh 包全名 注意一定是包全名。涉及到包全名的命令,一定要注意路径,可能软件包在光盘中,因此需提前做好设备的挂载工作。 此命令中各选项参数的含义为: -i:安装(install); -v:显示更详细的信息(verbose); -h:打印 #,显示安装进度(hash); 例如,使用此命令安装 apache 软件包,如下所示: [root@localhost ~]# rpm -ivh \ /mnt/cdrom/Packages/httpd-2.2.15-15.el6.centos.1.i686.rpm Preparing... #################### [100%] 1:httpd #################### [100%] 注意,直到出现两个 100% 才是真正的安装成功,第一个 100% 仅表示完成了安装准备工作。此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可,如下所示: [root@localhost ~]# rpm -ivh a.

Quartus II 13.0下载安装和HelloWorld

一、前言 Quartus II是Altera的FPGA设计工具, 二、安装包下载 百度云链接地址:https://pan.baidu.com/s/1VtDVKaiUDgbZI1vICS9jlw 提取码:ac9r 其他相关资料下载:http://www.corecourse.cn/forum.php?mod=viewthread&tid=27539 三、软件安装 安装包下载好后解压 点击进入【Quartus-13.0.0.156-windows】文件夹中,其中包含了开发 FPGA 所需的所有工具, 包括 Quartus II13.0 主程序、 仿真工具 modelsim-altera, Dspbuilder 以及帮助文档。然后点击【setup.bat】右键选择【以管理员身份运行】 等待一会后会出现如下安装界面,点击【Next】即可 然后勾选【I accept the agreement】后依然点击【Next】 接下来选择安装路径,默认安装在C盘,按照自己的习惯我安装在D盘 接下来选择安装的内容,第 1 项为 quartus 软件主包,为必装选项; 第 2 项为 quartus 软件 64 位系统支持包, 64 位系统需要安装此包,第 3 项为 quartus的帮助选项,建议安装。 第 4 项为 modelsim–altera 的初学者版本,基础的学习和仿真安装初学者版本即可完全满足条件,就不需要选择安装第 5 项了, 且第 5 项使用需要 license,没必要安装。 第 6 项为 dspbuilder,需要和 matlab 2012b 或更高版本配合使用,没有需求不用安装。勾选完成后,就可以点击 next 直接运行下一步了。 接下来是对安装选项的一个汇总报告,直接点击 【next】 即可开始安装, 接下来等待安装,比较漫长,可能需要 几十分钟的时间。 安装完成后点击【finish】即可

leetcode_2233. K 次增加后的最大乘积

题目链接:2233. K 次增加后的最大乘积 - 力扣(LeetCode) // 小根堆 #define INVALUE ((int)pow(10, 6) + 1) #define MOD ((int)pow(10, 9) + 7) static int cmp(const void *a, const void *b) { return (*(int*)a - *(int*)b); } int maximumProduct(int* nums, int numsSize, int k) { long long ans = 1; int heap[numsSize + 1]; heap[0] = -1; memcpy(heap + 1, nums, sizeof(int) * numsSize); qsort(heap, numsSize + 1, sizeof(int), cmp); while (k--) { int idx = 1; heap[idx] += 1; bool flag = true; while (flag && (2 * idx <= numsSize)) { int pos = 2 * idx; int left = heap[pos]; int right = (pos + 1 <= numsSize ?

python打包exe与反编译exe文件与防止反编译方式生成exe

序 最近根据公司生产需求写了个小脚本,想打包成exe文件分发给其他人使用,但又担心代码本反编译而泄露信息,所以花了一整天时间,磕磕绊绊的,终于搞定了!来之不易的“成果”需要总结和记载(毕竟耗费了生命中一天之久的时长)。 目录 一、python如何打包成exe (常规打包方法) 二、反编译exe文件 三、防止反编译方式生成exe 正文 一、python如何打包成exe (常规打包方法) 1.1首先你要先把自己的程序写好,在pycharm中运行正常。我的程序文件目录结构如下图所示: 1.2直接控制台输入命令:pyinstaller -p C:\Users\Administrator\PycharmProjects\ExportCustomerInfo\venv\Lib\site-packages -i v6.ico -F main.py 此句解释如下: 这里输入自己的第三方引用包的路径(不懂的看我上一篇文章); 这里是将要生成exe的图标设置(友情提示:非ico格式的图片会出错哦) 这里是你要发布的主程序文件 1.3运行结果如下:Building EXE from EXE-00.toc completed successfully.代表成功! 1.4新产生的文件及文件夹如下,请到dist文件夹里去找exe双击运行效果如下: 二、反编译exe文件 2.1先去网上下载一个pyinstxtractor.py的文件,将其和exe文件放到一个新文件夹里面如12345。 下载地址:https://download.csdn.net/download/hmy123cq3/16231988 2.2在电脑cmd命令行,切换到12345这个文件夹路径里并执行如下代码: python pyinstxtractor.py main.exe 执行效果如下: 2.3可以到如下路径查找文件,可见很多pyc文件,其中我们的机密代码就在这些文件内,反编译pyc文件是很容易的可以借助工具或在线反编译,这里就不详细介绍了。 三、防止反编译方式生成exe 3.1首先,清理环境,将一、二两步产生的文件,全部删除掉。我删除的文件如下图所示: 3.2然后,创建一个py文件,命名为create_pyd.py,然后在此文件中敲入如下代码: # -*- coding: utf-8 -*- """ Created on Wed Aug 29 13:33:20 2018 @author: Li Zeng hai python build_pyd.py build_ext --inplace """ from distutils.core import setup from Cython.Build import cythonize setup( name='any words.

CSDN 个性化推荐的数据治理

目录 1. 背景2. 数据治理2.1 从内容层面提升数据质量2.2 从用户层面提升数据质量2.3 增加特定数据的曝光2.4 保证数据的正确性与实效性 3. 总结 相关阅读 CSDN 个性化推荐系统的设计和演进如何支持研发对CSDN个性化推荐系统重构 1. 背景 CSDN 的个性化推荐流在主站中是一个很重要的模块,在过去半年多的时间里,AI 小组通过人工智能等相关技术,在原有数据召回源的基础上,根据用户的反馈以及内部的讨论和分析,不断优化个性化推荐流的数据质量,以达到推荐用户更感兴趣内容,提升用户阅读体验的目的。 个性化推荐流的数据源类型主要包括以下五类:博客、社区云帖子、问答提问、Blink 动态、直播,其中博客的占比最高。 数据源的召回在包含全站数据的数据仓库中使用 SQL 语句实现,并将召回的数据保存到业务库中进行混排与各种逻辑处理。以下是所有涉及到的数据源: 数据源召回数据源类型热门blink召回Blink 动态新用户冷启动白名单推荐池Blink 动态用户关注推荐池内容召回Blink 动态原力计划博客召回博客协同过滤召回博客用户个性化标签召回博客新用户冷启动白名单推荐池博客热数据博客历史上的今天召回池博客用户关注推荐池内容召回博客用户搜索历史召回源博客用户关注的社区云帖子社区云帖子等你来答问答提问正在直播的白名单召回源直播用户关注直播召回直播 2. 数据治理 基于以上提到的召回源,我们进一步加入了一系列的限制,并且调整了召回逻辑,实现数据的治理,具体如下: 2.1 从内容层面提升数据质量 过滤掉质量分小于等于 20 的博客 (质量分查询请点这里)。过滤掉标题党文章。例如: 阿里程序员写了一个新手都写不出的低级bug,被骂惨了。 见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频 mybatis 缓存的使用,看这篇就够了 鬼知道我看了几遍!Java常用集合类总结 为了帮粉丝完成毕业设计,我发现了一款私活神器!! 该买哪家二手手机呢?程序员爬取京东告诉你! 家长叫我别天天我在房间没事多看看新闻,我说我马上写个爬虫爬新闻看!!! 华为员工离职心声:菊厂15年退休,感恩,让我实现了财务自由! java扫雷游戏,触雷时学姐哭着扑向了你! 我要偷偷的学Python,然后惊呆所有人(第二天) 过滤掉封面图违规的文章。 去掉长度较短的 Blink 动态,去掉「已注销」用户的 Blink 动态。 过滤掉软文,即去掉包含广告的文章,例如: 原力计划 的博客质量分要大于等于 80 分。原力计划作为官方活动,须保证其文章的高质量。 过滤掉 毕业设计 相关的文章。毕业设计之类的文章,对于用户的参考性不大,大多是挂羊头卖狗肉。对于即将毕业正在写毕业设计的用户,建议去权威学术知识库检索已发表的论文进行参考。 对 课程设计 相关的博客进行降权。理由同上,并且更希望学生用户更好利用 CSDN 平台,自主完成课程设计,提升自身的硬实力。 2.2 从用户层面提升数据质量 引入用户黑名单机制,过滤掉 培训个人/机构账号 的文章,过滤掉 测试账号 发布的测试数据。引入用户灰名单机制,让运营对某些不合规用户对应的博客进行降权。过滤掉博客发布频率过高的用户对应的文章,此处假设高质量的博客需要花时间打磨。过滤禁言用户对应的数据。 2.

ElementUI中el-table组件中的cell-class-name属性如何传参

ElementUI中的el-table组件可以说是一个非常常用的组件,它本身也有非常多的属性和方法,是比较好用的,我们今天是阐述一下我今天遇到的属性cell-class-name官方文档阐述了它默认参数是一个对象,解构后有四个属性:function({ row, column, rowIndex, columnIndex }) ,可以使用字符串为所有单元格设置一个固定的 className,如下图: 但是我现在的情况是要生成多个表格,每个表格需要高亮的行不一样,所以是需要再额外传递一个参数,这时候该怎么办呢?这时候需要将方法改写为回调函数形式,如图:

【一】Lambda表达式

1.Lambda表达式概述 ​ Lambda表达式是现代C++在C ++ 11和更高版本中的一个新的语法糖 ,在C++11、C++14、C++17和C++20中Lambda表达的内容还在不断更新。 lambda表达式(也称为lambda函数)是在调用或作为函数参数传递的位置处定义匿名函数对象的便捷方法。通常,lambda用于封装传递给算法或异步方法的几行代码 。 2.Lambda表达式定义 2.1 Lambda表达式语法定义 1) 捕获列表。在C ++规范中也称为Lambda导入器, 捕获列表总是出现在Lambda函数的开始处。实际上,[]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数,捕获列表能够捕捉上下文中的变量以供Lambda函数使用。 []表示不捕获任何变量[var]表示值传递方式捕获变量var[=]表示值传递方式捕获所有父作用域的变量(包括this)[&var]表示引用传递捕捉变量var[&]表示引用传递方式捕捉所有父作用域的变量(包括this)[this]表示值传递方式捕捉当前的this指针[=,&a,&b]表示以引用传递的方式捕捉变量a和b,以值传递方式捕捉其它所有变量 [&,a,this]表示以值传递的方式捕捉变量a和this,引用传递方式捕捉其它所有变量。 2) 参数列表。与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号“()”一起省略。 3) 可变规格*。mutable修饰符, 默认情况下Lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。* 4)异常说明。用于Lamdba表达式内部函数抛出异常。 5)返回类型。 追踪返回类型形式声明函数的返回类型。我们可以在不需要返回值的时候也可以连同符号”->”一起省略。此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导。 6)lambda函数体。内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。 3. 应用案例 #include <iostream> using namespace std; class Test { public: void Func(int x, int y) { auto f = [this] { return m_a; }; cout << f() << endl; } private: int m_a = 10; }; int main(int argc, const char* argv[]) { //1.

vue2前端使用axios发起post请求,后端(springboot)拿不到值解决办法

一、错误回现(前后端错误演示) axios封装-我常用的请求头参数 application/json; charset=utf-8 页面登录请求-post 网络请求正常传入参数 后端代码,查看控制台发现都为null,没取到值。 二、解决 1.尝试将前端post请求改成get,其他都不用变 发现正常取到值,打印输出正常。前端页面正常跳转。 2.后端设置为post请求,前端axios要配置请求头参数 还要再对数据再进行一次格式化(qs) 然后再去验证 后端控制台正常输出。 三、结论 后来查阅资料发现,只要我们前端只要传入对象格式的参数时,axios就会对我们的数据进行JSON.stringify的操作。也就是说,将我们的 Content-Type 变成了 application/json;charset=utf-8。 axios 使用 post 发送数据时,默认是直接把 json 放到请求体中提交到后端的。 而后端接口使用@RequestParam注解就必须设置axios的请求头为 application/x-www-form-urlencoded @RequestParam接收的参数是来自HTTP请求体( Content-Type必须为 'application/x-www-form-urlencoded ) httpService.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 列出以下其他的值 httpService.defaults.headers['Content-Type'] = 'application/json; charset=utf-8'; 上传图片最好是单独封装一个 export function fileUpload(url, params = {}) { return new Promise((resolve, reject) => { httpService({ url: url, method: 'post', data: params, headers: { 'Content-Type': 'multipart/form-data' } }).then(response => { resolve(response);

大数据环境生态搭建

文章目录 大数据环境生态搭建一、通用操作1、更改三台节点的主机名2、关闭三台机器 linux 的安全模式3、关闭三台机器的防火墙4、设置三台机器的免密的登录5、创建用户组和用户 二、安装 JDK1.8三、Hadoop 完全分布式1、配置 core-site.xml2、配置 hdfs-site.xml3、配置 yarn-site.xml4、配置 mapred-site.xml5、配置 hadoop-env.sh6、进行 hadoop 初始化 四、scala2.12 版本五、Spark On Yarn1、配置 yarn-site.xml2、配置 spark-env.sh 六、Flink On Yarn1、配置 flink-conf.yaml 七、Hive1、安装mysql2、Hive 元数据配置到mysql3、配置 hive-site.xml 文件 八、zookeeper九、kafka十、flume十一、sqoop1、配置 sqoop-env.sh 大数据环境生态搭建 一、通用操作 1、更改三台节点的主机名 输入命令: hostnamectl set-hostname master 更改master节点的名字 输入命令:hostnamectl set-hostname slave1 更改 slave1 节点的名字 输入命令:hostnamectl set-hostname slave2 更改slave2 节点的名字 2、关闭三台机器 linux 的安全模式 输入命令:vim /etc/sysconfig/selinux 改为 disabled 3、关闭三台机器的防火墙 输入命令:systemctl stop firewalld 关闭防火墙 输入命令:systemctl disable firewalld 防止开机自启 输入命令:systemctl status firewalld 查看防火墙状态

spring事件监听机制Event 详解

spring事件监听机制Event 详解 一、事件监听的由来 Spring的事件(Application Event)为Bean和Bean之间的消息同步提供了支持。当一个Bean处理完成一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要让另外一个Bean监听当前Bean所发生的事件 二、如何实现事件 我们可以自定义一个事件,继承spring提供的ApplicationEvent定义一个监听器,需要实现 ApplicationListener,监听我们定义的事件使用容器发布事件 applicationContext.publishEvent(ApplicationEvent event) 三、通过实现ApplicationListener同步监听事件 我们可以先自己定义一个事件SpringTestEvent package com.zeng.spring.event; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.event.SpringApplicationEvent; import org.springframework.context.ApplicationEvent; public class SpringTestEvent extends ApplicationEvent { /** * Create a new {@code ApplicationEvent}. * * @param source the object on which the event initially occurred or with * which the event is associated (never {@code null}) */ public SpringTestEvent(String source) { super(source); } } 然后定义一个事件监听器,一般我们是在这里做逻辑处理 package com.zeng.spring.listener; import com.zeng.spring.event.SpringTestEvent; import org.

Vue3 动态组件 component:is= 失效

错误代码 用Vue3,组件无需注册,所以就会提示“注册了不不使用”的报错, 于是用了异步注册,甚至直接为了不报错就在下面使用3个组件,有异步加载,但还是实现不了预期效果 <script setup> import { ref, defineAsyncComponent, computed } from 'vue' const Son1 = defineAsyncComponent(() => import('./components/BaseSon1.vue')); const Son2 = defineAsyncComponent(() => import('./components/BaseSon2.vue')); const Son3 = defineAsyncComponent(() => import('./components/BaseSon3.vue')); const list = ref([ { id: 1, name:'Son1', active: true }, { id: 2, name:'Son2', active: false }, { id: 3, name:'Son3', active: false }, ]) let componentName = ref('Son1') const getComponentName = computed(() => { return componentName.value; }); const handleClick = (item,index) => { console.

pinia的使用

前言 最近新开了个项目,以前老项目都是vue2+vuex开发的,都说用vue3+pinia爽得多,那新项目就vue3+pinia吧。这里记录一下pinia的使用。 使用方法 安装pinia: npm i pinia main.js中引入pinia: //main.js import { createApp } from 'vue'; import { createPinia } from 'pinia'; import App from './App.vue'; const app = createApp(App); const pinia = createPinia(); app.use(pinia); app.mount('#app') 创建store仓库: 在src下创建store目录,目录下创建index.js文件: 在index.js中利用pinia的defineStore方法创建仓库,一般使用只会用到defineStore的前两个参数(第三个参数可做持久化配置),下面是setup组合式写法(你也可以改为选项式写法)。 第一个参数为一个字符串,作为仓库的唯一id;第二个参数为一个方法,内部可定义需要存储的数据,定义完成后返回即可,你可以在此处定义多个数据,也可在defineStore之外多次使用defineStore创建多个仓库。 定义的时候有几个取巧的办法:可以使用ref给数据添加响应式特性。只需定义set方法,无需定义get方法。 // /store/index.js import { defineStore } from "pinia"; import { ref } from "vue"; export const piniaStore = defineStore( "piniaStore", () => { const pageData = ref(1);//页面数据 const setPageData = () => { pageData.

rtklib的rtknavi使用

1、点击rtknavi工具 2、配置输入的数据流 采用香港基准站的实时数据流,进行验证。 输入caster的地址 landsd-gncaster.realtime.data.gov.hk 选择HKSS 和HKWS 配置Options 点击运行

可root设备复制文件到system目录或者子目录下

目标或问题: 在可root的设备中,如何将某个文件拷贝到system/xxxx/xxxx的系统目录下? 解决方法: 首先依次执行以下命令: adb root adb remount 出现如下图所示: 然后执行复制文件推送到设备的命令即可: 例如: adb -s 192.168.xx.xx push F:\temp\Download\Download\testFile.txt /system/etc/security/xxx 至此,应该就可以成功复制过去了。

java 毕业设计基于Spring Boot+Vue的就业求职招聘信息平台

很多朋友发现后期找不到文章,收藏关注不迷路 文章目录 项目介绍背景及意义国内外研究概况技术介绍项目界面关键代码目录 项目介绍 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于就业求职招聘信息平台当然也不能排除在外,随着网络技术的不断成熟,带动了就业求职招聘信息平台,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。就业求职招聘信息平台,主要的模块包括管理员;系统首页、个人中心、用户管理、企业管理、招聘类型管理、校园招聘管理、招聘信息管理、应聘信息管理、面试通知管理、求职人才管理、在线留言、系统管理,企业;系统首页、个人中心、校园招聘管理、招聘信息管理、应聘信息管理、面试通知管理,用户;系统首页、个人中心、应聘信息管理、面试通知管理、求职人才管理,前台系统首页;首页、校园招聘、招聘信息、求职人才、通知公告、在线留言、后台管理、个人中心等功能。系统中管理员主要是为了安全有效地存储和管理各类信息,还可以对系统进行管理与更新维护等操作,并且对系统管理有相应的操作权限。这种个性化的平台特别注重交互协调与管理的相互配合,激发了管理人员的创造性与主动性,对就业求职招聘信息平台而言非常有利。 本系统采用的数据库是Mysql,使用SpringBoot框架开发,运行环境使用Tomcat服务器,ECLIPSE 是本系统的开发平台。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 背景及意义 上个世纪末期,网络技术逐渐开始流行起来,互联网发展进入了起步阶段。到了新世纪初期,信息化技术开始逐渐发展,计算机应用技术逐渐体现出优势来。接着,大量的电脑进入了千家万户,企事业单位、高校、机关等部门。信息化时代逐渐来临,求职招聘管理成为互联网时代下媒体管理的核心内容。求职招聘管理是媒体中非常重要的一部分,然而由于其性质也致使它难以被实时衡量。长期来看,管理十分不便利,存在误差,查询难的现象,一旦数据过多,人工管理方式就很难维持。随着信息技术的应用拓展,逐渐引用了信息化技术管理,逐渐取代了人工管理模式,采用计算机系统来管理招聘信息,带来的好处是查询便利,信息准确率高,节省了开资,提高了工作的效率。本次系统开发,主要以求职招聘管理为对象,根据需求来完成功能设计。 国内外研究概况 随着国内经济形势的不断发展,中国互联网进入了一个难得的高峰发展时期,这使得中外资本家纷纷转向互联网市场。然而,许多管理领域的不合理结构,人员不足以及市场管理需求的增加使得更多的人具备了互联网管理的意识。 (1)国外研究现状 国外系统管理信息化起步于90年代,发展于21世纪,日前正向纵深领域扩展。另外国外就业求职招聘信息平台更加发达。工作人员专业、热情、体贴。国外的技术更加先进,尤其在就业求职招聘信息平台方面。系统软件从会员进入系统开始就实现信息化管理,用户日常的生活,招聘类型管理、校园招聘管理、招聘信息管理、应聘信息管理都可以在就业求职招聘信息平台进行管理。 (2)国内研究现状 随着国内经济形势的不断发展,中国互联网进入了一个难得的高峰发展时期,这使得中外资本家纷纷转向互联网市场。然而,许多管理领域的不合理结构,人员不足以及市场管理需求的增加使得更多的人具备了互联网管理的意识。 国内的就业求职招聘信息平台缺乏规范,随意性强,大多存在操作复杂缺陷。日前大多的系统还须有业知识的人进行操作和维护。由于现在人们对技术水平的要求逐渐提高,系统管理也越来越注意到信息化的重要性,这为就业求职招聘信息平台的推广及发展提供了良好的条件,在中国发展系统管理信息管理信息化的条件也日趋成熟。 技术介绍 1、管理员账号:abo 密码:abo 2、开发环境为Eclipse/idea,数据库为mysql 使用java语言开发。 3.配置好Tomcat并点击启动按钮即可运行 4.数据库连接src\main\resources\application.yml中修改 5.maven包版本apache-maven-3.3.9. 开发语言:Java 框架:SSM 前端框架:vue.js JDK版本:JDK1.8+ 服务器:tomcat8+ 数据库工具:Navicat 开发软件:idea 支持eclipse Springboot是当前最流向的一个框架,它的配置更加的简单,使开发变得更加的简单迅速。 Springboot的基础结构共三个文件,具体如下: src/main/java:程序开发以及主程序入口; src/main/resources:配置文件; src/test/java:测试程序。 ssm的数据库配置默认支持两种格式的配置文件 1,application.properties 2,application.yaml 项目界面 使用就业求职招聘信息平台分为管理员、企业、用户三个角色的权限子模块。 管理员所能使用的功能主要有:系统首页、个人中心、用户管理、企业管理、招聘类型管理、校园招聘管理、招聘信息管理、应聘信息管理、面试通知管理、求职人才管理、在线留言、系统管理等。 企业可以实现系统首页、个人中心、校园招聘管理、招聘信息管理、应聘信息管理、面试通知管理等。 用户可以实现系统首页、个人中心、应聘信息管理、面试通知管理、求职人才管理等。 关键代码 package com.controller; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.

Java8 Collectors.toMap():Duplicate key异常源码解析

目录 一、异常呈现 1、主代码 2、执行结果 3、ClazzDuplicateKeyInCollectMap 二、源码解读,找异常,找原因 1、第一步 2、第二步 3、第三步(关键点,一定要看) 三、解决方案 1、解决思路 2、解决方案的代码 3、执行结果 一、异常呈现 1、主代码 // 场景一:list中有重复数据,转换为map时抛异常 private static void part1() { // 这里的key 有重复 List<ClazzDuplicateKeyInCollectMap> list = Arrays.asList( new ClazzDuplicateKeyInCollectMap(1, 10), new ClazzDuplicateKeyInCollectMap(1, 20), new ClazzDuplicateKeyInCollectMap(2, 30)); // 【重点】 // 这里执行时,抛出异常 // java.lang.IllegalStateException: // Duplicate key // com.djj.zmine.collect.collect_map.ClazzDuplicateKeyInCollectMap@6e2c634b // Map<Integer, ClazzDuplicateKeyInCollectMap> map = list.stream().collect(Collectors.toMap(e -> e.getKey(), e -> e)); System.out.println(map); } 2、执行结果 运行时异常: Exception in thread "main" java.lang.IllegalStateException: Duplicate key com.