视频地址: https://ke.qq.com/course/3136585
笔记参考: https://www.it235.com/实用工具/持续集成/jenkins.html
资源下载地址 链接:https://pan.baidu.com/s/1OFVRzCySbrzLs-P37Iw9gg 提取码:wiih
- 下载IOS文件
- 安装vmware
- 安装虚拟机
- 终端连接
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,
GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发
,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。
1. 安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
2. 启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
3. 设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
4. 开放ssh以及http服务,然后重新加载防火墙列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
如果关闭防火墙就不需要做以上配置
5. 下载gitlab包,并且安装
在线下载安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x
86_64.rpm 或者
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
安装:
rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm 或者
rpm -i gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
6. 修改gitlab配置
vi /etc/gitlab/gitlab.rb
修改gitlab访问地址和端口,默认为80,我们改为82
external_url 'http://192.168.224.100:82'
nginx['listen_port'] = 82
7. 重载配置及启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
8. 把端口添加到防火墙
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
启动成功后,看到以下修改管理员root密码的页面,修改密码后,然后登录即可
使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理
创建用户的时候,可以选择Regular或Admin类型。
创建完用户后,立即修改密码
选择某个用户组,进行Members管理组的成员
Gitlab用户在组里面有5种不同权限:
- Guest:可以创建issue、发表评论,不能读写版本库
- Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
- Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
- Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限
- Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组
长可以赋予这个权限
以刚才创建的新用户身份登录到Gitlab,然后在用户组中创建新的项目
下面来到IDEA开发工具,我们已经准备好一个简单的Web应用准备到集成部署。
我们要把源码上传到Gitlab的项目仓库中。
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。
#配置增加chentf用户组
groupadd chentf
#创建jenkins用户,并指定刚才创建的用户组
useradd jenkins -g chentf
#给已经存在的用户jenkins指定组chentf
usermod -G chentf jenkins
#给用户设置密码
passwd jenkins
#删除用户
userdel jenkins
#删除用户组
groupdel chentf
#创建存放jenkins工具的目录,并指定权限,因jenkins后期构建比较占用磁盘,此处建议先挂载磁盘
mkdir -p /data/software #创建目录
chown -R jenkins:chentf /data/sofware #给创建的用户赋权限
# 切换jenkins用户,进入到software目录,并下载jenkins.war
$ su jenkins
$ cd /data/software/
# 如果下载较慢,建议采用迅雷下载,然后上传
$ wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
- 下载jdk,上传至linux并解压
链接: https://pan.baidu.com/s/1Xd-zDEQDMc6Q0kwZ6o3PAA
提取码: bq6s
#解压下载的jdk文件
$ tar -zxvf jdk8u181.tar.gz
- 配置/etc/profile的内容
#编辑环境配置文件
$ vim /etc/profile
# 在最底部加入以下内容后保存并退出
# JDK 注意usr/local/java/路径根据自己实际安装路径进行修改
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 使配置生效
#刷新环境配置文件
$ source /etc/profile
- 检测java环境信息
#检查jdk是否安装成功
$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
# 使用nohup命令启动,并指定日志文件
$ nohup java -jar /data/software/jenkins.war --httpPort=8777 --httpsPort=8778 > /data/software/jenkins.log 2>&1 &
使用tail命令查看启动日志,日志中会输出jenkins密码
#查看jenkins启动日志
$ tail -222f jenkins.log
如果是云服务器,开放安全组即可,如果是虚拟机在防火墙中加入8777端口并重载配置
阿里云服务器开发安全组
虚拟机在防火墙中加入8777端口并重载配置
# 开启防火墙8777端口
$ firewall-cmd --zone=public --add-port=8777/tcp --permanent
# 使配置生效
$ firewall-cmd --reload
# 防火墙扩展命令如下(云服务直接操作阿里云安全组即可)
(1)设置开机启用防火墙:systemctl enable firewalld.service
(2)设置开机禁用防火墙:systemctl disable firewalld.service
(3)启动防火墙:systemctl start firewalld
(4)关闭防火墙:systemctl stop firewalld
(5)检查防火墙状态:systemctl status firewalld
(1)查看防火墙状态:firewall-cmd --state
(2)重新加载配置:firewall-cmd --reload
(3)查看开放的端口:firewall-cmd --list-ports
(4)开启防火墙端口:firewall-cmd --zone=public --add-port=9200/tcp --permanent
命令含义:
–zone #作用域
–add-port=9200/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
注意:添加端口后,必须用命令firewall-cmd --reload重新加载一遍才会生效
(5)关闭防火墙端口:firewall-cmd --zone=public --remove-port=9200/tcp --permanent
外网或宿主机访问浏览器地址http://ip地址:8777/
- 进入Manage Jenkins中,点击Manage Plugins
- 安装插件 Locale plugin , Localization: Chinese (Simplified) , Localization Support Plugin,如果失败就再安装一次
- 设置中文,如果没有Locale,可能是上一步中插件未安装
- 如果出现部分翻译,部分没翻译的现象,则删除插件。重启Jenkins(http://域名/jenkins/restart),再次安装插件(第一次安装只有部分翻译了)
- 如果安装新的插件,重启了服务,又变成部分汉化了
- 将语言设定为zh_US,Jenkins切换为英文。
- 调用restart重启Jenkins:http://域名/jenkins/restart。
- 再次语言设定为zh_CN,刷新即可
- 进入到jenkins的工作目录,找到config.xml,我这里是/home/jenkins/.jenkins/config.xml
修改该配置文件useSecurity的节点值为false
<useSecurity>true</useSecurity>
- 重启jenkins项目后,再次访问jenkins站点
- 进入到系统管理
- 进入到用户列表,找到admin用户
- 使用新密码登录即
Jenkins需要依赖JDK,所以先安装JDK1.8
yum install java-1.8.0-openjdk* -y
安装目录为:/usr/lib/jvm
安装文件:jenkins-2.190.3-1.1.noarch.rpm
1. 把安装包上传到192.168.66.101服务器,进行安装
rpm -ivh jenkins-2.190.3-1.1.noarch.rpm
2. 修改Jenkins配置
vi /etc/syscofig/jenkins
修改内容如下:
JENKINS_USER="root" # 注意该账号和linux管理员账号名称一致
JENKINS_PORT="8888"
3. 启动Jenkins
systemctl start jenkins
4. 打开浏览器访问
http://192.168.224.129:8888
注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口
5. 获取并输入admin账户密码
cat /var/lib/jenkins/secrets/initialAdminPassword
6. 跳过插件安装
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装
7. 添加一个管理员账户,并进入Jenkins后台
8. 开始使用Jenkins
如何干净的卸载jenkins
这里使用一种最方便的卸载方法,因为我这里jenkins安装也是使用rpm命令安装的
1、rpm形式卸载
rpm -e jenkins
2、检查是否卸载成功
rpm -ql jenkins
3、彻底删除残留文件
find / -iname jenkins | xargs -n 1000 rm -rf
jenkins的所有插件安装后需要重启才能生效,由于Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址(清华大学源)
cd /root/.jenkins/updates
# 修改之前建议做下备份,养成备份好习惯,大家在公屏上输入 备份大法好
sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
将打开后的内容,拷贝至主题配置中。系统设置 -> Theme,转到Manage Jenkins–> Configure并搜索Theme配置,然后点击新增:
CSS URL:在CSS字段中输入以下URL并保存,可以查看到效果(如果断网样式会失效)
http://afonsof.com/jenkins-material-theme/dist/material-teal.css
Extra CSS:在文本框内贴上CSS样式,在浏览器中打开上述样式的链接,并复制内容到文本框内一样能看到效果,而这种方式更加推荐,适用于没有网络的环境。
- Git Parameter Plug-In , 安装后可以选择按照 git tag 或者 branch 发布版本。
- NodeJS Plugin 安装后可以执行 npm 指令,打包和发布前端代码。
- SonarQube Scanner for Jenkins 安装后可以执行 sonar scanner 指令,跑 CI 时检查代码质量。
- Maven Integration plugin 设置 maven 指令的 classpath 和指令路径。
- Workspace Cleanup Plugin 可以指定 workspace 最多保留多少个历史任务。
- Credentials Binding用户凭证插件安装
凭据就是用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便 Jenkins可以和这些第三方的应用进行交互。
该插件默认在一开始就会被安装,安装后在jenkins ->系统管理 -> 安全栏目会出现Manage Credentials选项,若没有需要安装插件并重启。
凭证类型
- Username with password常用:用户名和密码
- GitHub APP新加入
- SSH Username with private key常用: 使用SSH用户和密钥
- Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径 设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
- Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
- Certificate:通过上传证书文件的方式
接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。
Jenkins->系统管理->系统->全局凭证->添加凭证
- Username with password类型
- SSH Username with private key
为了jenkins能够拉取代码,需要安装Git环境和jenkins对应的Git插件
# 安装
$ yum install git -y
# 查看版本
$ git --version
此处无需在jenkins中配置Git环境,采用默认生成的即可,jenkins会默认识别所在环境安装的git路径.
Jenkins->系统管理->系统->全局凭证->添加凭证
jenkins -> 新建任务 -> 自由风格项目
进入jenkins的工作空间查看文件是否拉取下来,所有拉取的文件都会存放在jenkins工作空间中
到此用户名密码方式的凭证已经打通Git
在jenkins上发布Java项目时需要使用Maven来进行构建打包(Gradle项目则需要安装配置Gradle)
# 切换到root用户
$ su root
Password:
# 找一个目录存放maven
$ cd /root/java/jdk/
# 从阿里云上下载maven安装包
$ wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
# 解压
$ tar -zxvf apache-maven-3.6.3-bin.tar.gz
# 当前maven的安装目录为:/root/java/jdk/apache-maven-3.6.3
$ vim /etc/profile
在最后面JDK配置上作出一些更改
export JAVA_HOME=/root/java/jdk/jdk1.8
export MAVEN_HOME=/root/java/jdk/apache-maven-3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
#刷新配置文件
$ souce /etc/profile
$ mvn -version
$ cd /data/software
$ mkdir repository
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!--本地仓库-->
<localRepository>/data/software/repository</localRepository>
<mirrors>
<!--阿里云镜像-->
<mirror>
<id>aliyun-maven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven mirror</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
...
...
</settings>
Maven测试项目构建
保存后,点击立即构建,然后进入日志控制台查看日志.
从日志可以看到代码已经拉取下来了,而且走的是阿里云镜像,第一次拉取过程会比较长.
通过查看/data/software/repository 可以看到有存放拉取的jar包,通过这两个证明settings.xml文件配置成功且生效.
jenkins发布项目的过程可以总结为4个步骤
- 拉取代码
- 编译打包mvn或npm
- 部署至应用服务器scp
- 启动应用
思考,这里我们需要执行的shell内容是什么?
是不是把当前编译好的jar包拷贝到应用服务器取启动
由于jenkins构建消耗内存极大,一般jenkins是一台单独的工具机器,Java项目一般在其他的机器上,这里重新安装一台虚拟机,也可以直接开通阿里云的ECS
应用服务器信息
- IP:101.200.192.105
- JDK: 1.8
- 用户: admin
- 部署路径: /data/app/springboot
-端口: 8089
免密登录主要是方便jenkins服务器39.105.61.8的jenkins用户 -->应用服务器101.200.192.105的admin用户上的jar包拷贝,部署本就是jar包拷贝的过程.
在jenkins机器上使用jenkins用户生产密钥,注意此处是jenkins用户.
$ su jenkins
$ ssh-keygen -t rsa
# 3次回车
运行后会在当前用户的根目录生产一个.ssh文件夹
.ssh文件夹描述如下:
- id_rsa: 生成的私钥文件
- id_rsa.pub: 生成的公钥文件
-: know_hosts: 刚开始没有,接下来会配置,已知的主机公钥清单.
接下来需要将公钥导入到认证文件中
$ su jenkins
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
如果希望ssh公钥生效需要满足至少下面两个条件:
- .ssh目录的权限必须是700
- .ssh/authorized_keys文件权限必须是600
给对应文件授权
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
将authorized_keys 文件拷贝到应用服务器的admin用户.ssh目录下.
# 在应用服务器(101.200.192.105)上用admin用户创建/home/admin/.ssh文件夹
# 在jenkins服务器(39.105.61.8)上将pub公钥文件拷贝到应用服务器的.ssh目录下,并命名为authorized_keys
# scp -p ~/.ssh/id_rsa.pub [email protected]:/home/admin/.ssh/authorized_keys
scp -p ~/.ssh/id_rsa.pub [email protected]:/home/admin/.ssh/authorized_keys
在jenkins (39.105.61.8)服务商进行免密连接测试.
# 在jenkins服务器的/home/admin目录下创建filetest文件,并拷贝到应用服务器
$ cd ~/
$ touch filetest
$ scp -p filetest [email protected]:/home/admin/filetest
# 进入到应用服务器(101.200.192.105),检查/home/admin目录下是否出现filetest
# 在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
$ ssh [email protected]
Last login: Sun Sep 20 21:53:03 2020
$ exit
到此免密登录和拷贝实现成功,接下来jar包部署提供了快捷的帮助.
#!/bin/bash
echo "部署的目录和项目名称"
DIR="/data/app" #部署路径
projectName="springboot" #项目名称
echo "待部署的应用服务器,可多台"
server_ips="192.168.1.2" #多台用,号隔开
for server_ip in ${server_ips[@]}
do
echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no admin@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar
fi
EOF
echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar admin@${server_ip}:/tmp/${projectName}.jar
echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no admin@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
EOF
done
echo "success"
$ touch start.sh
$ vim start.sh
# 将下面代码粘贴到start.sh中
#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail
APP_ID=it235-boot
APP_DIR="/data/app"
nohup java -Dspring.profiles.active=dev -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
sleep 3
tail -n 10 release_out.log
sleep 5
tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
echo "Application started ok"
exit 0
else
echo "Application started error"
exit 1
fi
在/data/app/springboot目录下创建停止脚本stop.sh
$ touch stop.sh
$ vim stop.sh
# 将下面代码粘贴到stop.sh中
#!/bin/bash
APP_ID=it235-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh
并进行启动和停止测试,查看日期输出是否正常
将下述启动代码配置到jenkins中
sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh
$ su root
# 开启防火墙9010端口
$ firewall-cmd --zone=public --add-port=9010/tcp --permanent
# 使配置生效
$ firewall-cmd --reload
如果是ECS则需要在安全组中开放9010端口此处省略
此外也可以采用Nginx映射此处省略
到此一个简单的SpringBoot项目发布完成,但企业中的发布往往比这要复杂很多,在参数化构建章节再为您详细讲解,比如:
- 自动构建
-按分支发布
-Tag发布
-节点发布
-流水线发布等等,
复杂发布场景概述
在企业中,要实现敏捷开发,必须结合jenkins的众多插件来实现更牛逼的特性。
思考一个问题:企业中究竟如何进行管理项目发布的?代码的回滚怎么做?
- 开发环境:一般在本地机房,前后端开发联调,后端改动代码后即可实时在开发调试环境更新,供前端自行调试
- 测试环境:一般在本地机房,不同迭代对应不同的测试环境,如何保证环境不冲突,交付测试后如何最快通知相关人员跟进
- 离线/灰度/UAT环境:目前大部分在云环境上构建
- 生产环境:云服务器环境,如何快速备份发布多个节点,发布成功的通知
- 移动端:安卓、IOS打包后通知相关人员下载
- Docker的构建、K8S构建等
背景:每次构建项目时都需要去修改一下配置,然后保存,再去立即构建。这样修改容易修改出错误,影响到执行脚本,且每次都要去修改配置,不容易修改,操作也比较麻烦。就像我们写固定代码一样,但有了参数后,代码的复用性大大提高,我们可以根据具体的参数做不同的操作,比如1是发布,2是回滚。
插件:Build with Parameters和Extended Choice Parameter,默认已经安装
感谢大家的关注点赞,文章持续更新中…
文章浏览阅读2.3k次。01.类的成员变量:\n设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计算并输出立方体的体积和表面积答:java.util.Scanner; public class Box { double length; double width; double height; //求体积 double volume(double length,double width,doubl..._编写一个立方体类,包含这样的属性:长度、宽度、高度等信息,通过方法来计算它的体
文章浏览阅读1.3k次。org.apache.ibatis.binding.BindingException: Type interface com.itheima.mapper.UserMapper is not known to the MapperRegistry.该问题属于核心配置文件,加载映射文件报名写错,_org.apache.ibatis.binding.bindingexception: type interface com.itheima.mappe
文章浏览阅读2.2k次,点赞4次,收藏9次。一,原因1,没有响应到css等文件2,响应类型是由文件的后缀名决定(1)html的请求头Content-Type : text/html ; charset=utf-8(2) CSS的请求头content-type:text/css; charset=utf-8(3)JavaScript的请求头content-type:text/javascrpt; charset=utf-8二,解决方法:(一)..._node.js打开网页不显示css,本地能显示
文章浏览阅读384次,点赞7次,收藏9次。智慧校园全场景解决方案是借助AIoT智能物联能力打造智慧绿色校园,助力实现校园周界安防、智慧通行、设备运维、能耗管理等场景功能智慧校园全场景解决方案,打造安全、便捷、绿色的智慧校园。_智慧校园中控架构开发软件有哪些
文章浏览阅读82次。库,我们可以编写代码来模拟按键和鼠标操作,从而实现自动设置Windows 10的输入法。这种方法可以节省时间和精力,尤其是在需要频繁更改输入法设置的情况下。运行代码后,您将看到Windows 10的设置窗口打开,并自动导航到语言设置,然后将输入法更改为中文简体拼音。在本文中,我将向您展示如何使用编程方式来设置Windows 10的输入法。现在,我们已经编写了设置输入法的代码。保存代码文件,并在命令提示符或终端中运行它。库来模拟按下键盘快捷键,以设置输入法。一旦安装完成,我们可以开始编写代码。_win10 输入法 中英文模式api
文章浏览阅读1.5k次。每个人都有属于自己的手相,有些人的手相是属于典型的、一般的手相特征,没有太多值得说的地方;而另一些人,他们的手相之中,却有一些别人所没有的手相特征,但却真实的出现在了自己的手掌中。比如说,对于手心里有一条竖线的人,他们的命格会是怎样的呢?一起来手相图解看看吧!1、事业发展:前途坎坷对于手心有一条竖线的人,他们的事业线一定会因此而出现中断,与此相交。而在事业发展方面,事业线的分叉代表了遇到的困难程度..._女生右手手掌中间的竖线代表什么
文章浏览阅读3.8k次。ndk开发bug问题记录_ndk did not have a source.properties file
文章浏览阅读566次。Cookie、WebStorage(localStorage,sessuonStorage)、Session、Token_web存储
文章浏览阅读2k次。所以我的配置在ja-netfilter-all/dea64.exe.vmoptions。我尝试把值改成默认值后。我记得我最近一次的正常打开,是因为使用IDEA的help重新设置了VM的内存大小。按照道理来说,修改idea64.exe.vmoptions的内容应该就可以还原回去了哈。3、打开idea64.exe.vmoptions文件,找个网上的配置,然后替换下重新启动。1、找到idea64.exe.vmoptions文件,然后删除,重启动。分析当前这个问题,应该是把值调的太大了,导致启动不起来的问题。..._edit you jvm failed to jvm
文章浏览阅读803次。Java 内存可以粗糙的区分为堆内存(Heap)和栈内存 (Stack),其中栈就是现在说的虚拟机栈,或者说是虚拟机栈中局部变量表部分。new了一个class类的过程:往栈里丢了一个英文的名字,在堆里实例化了一个类,名字指向这个类。与程序计数器一样,Java 虚拟机栈也是线程私有的,它的生命周期和线程相同,描述的是。栈:栈内存,主管程序的运行,生命周期与线程同步。Java 栈可用类比数据结构中栈,Java 栈中保存的主要内容是栈帧,栈:8大基本数据类型,对象的引用,实例的方法。栈运行的原理:栈帧。_本地方法栈存放什么数据
文章浏览阅读5.9k次。这里发现报错,关闭vscode重启也还是有问题。后面发现其实是typescript定义类型的语法,是因为我将代码写在<script></script>里面,使用ts语法需要表明lang="ts"即将代码写在<script lang="ts"></script>将不会报错..._ts1109: expression expected.
文章浏览阅读1k次,点赞23次,收藏22次。在数字通信系统中,幅度键控(ASK)是一种通过改变载波信号的幅度来传输数字信息的调制方式。8ASK,即8幅度键控,是ASK的一种变体,它使用8个不同的幅度级别来表示数字信息。8ASK (Amplitude Shift Keying) 调制是一种幅度移键调制技术,它通过改变载波信号的幅度来传输数据,同时保持频率和相位不变。在8ASK中,有8个不同的幅度级别,每个级别代表3比特的信息(因为2^3=8)。这种调制方式能够在相同的带宽条件下传输更多的数据,但与此同时,它对信号的幅度噪声也更加敏感。_matlab ask