当前位置: 首页 > news >正文

JAVA面经整理(5)

创建线程池不是说现用先创建,而是要是可以复用线程池中的线程,就很好地避免了大量用户态和内核态的交互,不需要频繁的创建和销毁线程

一)什么是池化技术?什么是线程池? 

1)池化技术是提前准备好一些资源,在需要的时候可以重复使用这些准备好的资源,池化技术的优点主要有两个:提前使用和重复利用

2)线程池会先启动若干数量的线程,这些线程都会处于睡眠状态,当有一个新的任务到来的时候,线程池就会唤醒某一个睡眠的线程,让他来进行处理客户端的请求,当处理完整个请求之后,线程又处于睡眠的状态,线程池可以很好地提高程序执行的性能,因为频繁的创建和销毁线程是很浪费时间的;

3)现在假设有一个大型的网络中心,高峰期每一秒的客户端请求的并发数超过100,如果为每一个客户端都创建一个线程,那么耗费的CPU资源和内存资源都是非常惊人的,假设如果现在拥有一个数量是200的线程池,那么将会节约大量的系统资源和内存资源,使得有更多的CPU资源和内存资源来处理实际的业务,而不是把这些资源放在创建和销毁线程上;

1)复用线程:降低资源消耗

咱们的线程创建是需要开辟虚拟机栈,本地方法栈,程序计数器等一些私有的线程的内存空间,而销毁的时候又要回收这些私有空间资源,线程就可以重复的进行使用了,使得有更多的CPU资源和内存资源放在实际的业务处理上

2)提高响应速度

咱们的线程池使用已有线程来进行执行任务的,而线程当有人来的时候,现使用现创建,涉及到大量用户态和内核态的交互,所以说线程池可以更快的响应,就已经有PCB了;

3)管理线程数和任务数:线程池提供了更多的管理功能

3.1)控制最大并发数:控制最大并发线程数,线程池可以创建固定的线程数,从而避免了无限创建线程的问题,当线程创建过多的时候,会出现系统执行变慢,因为CPU核数是固定的,能够处理的任务数量也是一定的,但是当线程过多的时候,就会造成线程恶意争抢和线程频繁切换的问题,从而导致程序执行效率变慢,所以合适数量的线程才是高性能运行的关键

3.2)控制任务最大数:如果任务无限多,而内存又不足,就会导致程序执行报错,所以我们采用拒绝策略来进行处理多出的任务,从而保证系统可以健康的运行;

4)提供定期执行的功能

其他的常见的池化技术:

1)内存池:

1.1)内存池在进行创建的过程中,首先在程序启动的过程中,会向操作系统申请一大块内存

1.2)然后每次用户请求内存的时候,就会返回内存池中的一块空闲的内存,并将这块内存的标志置为true,标记为已经使用;

1.3)当内存使用完毕释放内存的时候,也不是真正地调用 free 或 delete 的过程,而是把内存放回内存池的过程,且放回的过程要把标志置为false;

1.4)最后,应用程序结束就会将内存池销毁,将内存池中的每一块内存释放

优点:减少了内存碎片的产生,提高了内存的使用频率

缺点:会造成内存的浪费,因为要使用内存池需要在一开始分配一大块闲置的内存,而这些内存不一定全部被用到

2)数据库连接池:

2.1)数据库连接池的基本思想是在系统初始化的时候将数据库连接作为对象存储在内存中,当用户需要访问数据库的时候,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象;

2.2)在使用完毕后,用户也不是将连接关闭,而是将连接放回到连接池中,以供下一个请求访问使用,而这些连接的建立、断开都是由连接池自身来管理的

2.3)同时还可以设置连接池的参数来控制连接池中的初始连接数、连接的上下限数和每个连接的最大使用次数、最大空闲时间等。当然,也可以通过连接池自身的管理机制来监视连接的数量、使用情况等

二)谈谈线程池的参数:

1)这个核心线程数如果设置成0,那么表示没有任务的时候销毁线程池,如果核心线程数大于0表示线程池即使没有任务的时候最少的线程池的数量等于这个值,如果设置比较小,那么会频繁的创建和销毁线程,如果创建的值比较大,那么会浪费大量的系统资源
2)如果线程池空闲的时间超过了此时间,那么多余的线程就会被销毁,直到线程池中的线程的销毁数量等于corepoolsize,如果本身corepoolsize等于maxmunsize,那么线程池在空闲的时候也不会销毁任何线程

三)如何设置corePoolsize maximumpoolsize之间的关系呢?

1)如果解决的任务和任务量比较稳定,我们会把corePoolsize和maximumpoolsize

之间的关系设得会比较接近,让临时工尽量少一些;

2)但是如果解决的任务场景,任务量波动比较大,可以让corePoolsize和maximumpoolsize之间的差值大一些,多多的进行招临时工,让临时工的数量多一些;

3)这个题太开放了,和机器,执行任务的类型有关,还是要通过实验来进行,从节省资源和执行效率的角度进行权衡,通过实验的方式来进行测试比较合适;

4)为什么线程池里面还要销毁线程?

1)这是在性能和资源之间在做平衡,线程完全不销毁,相当于是性能最大化,创建线程销毁线程的次数最少,但是吃的资源也是最多的,尤其是内存资源;

2)线程不消毁,线程越多,只是把性能跳到了最大限度,但是这些线程也会占用一定的资源,如果任务量更少,进程不干活,拜拜,把内存资源节省出来给其他工作去使用

3)其中的keepAlivetime,的时间越短,希望吃的资源越少,时间越短,就可以更快地释放资源,临时工线程就可以早早得进行走人,线程就可以及时地释放,把系统资源让出来;

进行使用多线程,不就是说为了让程序跑得更快吗?但是咱们为啥不让CPU占用率太高呢?

对于线上服务器来说,要对CPU资源留有一定的冗余,随时应对一些可能的突发情况,如果说请求已经本身已经快把CPU占用完了,这个时候突然来了一波请求的峰值,请求暴涨,此时我们的服务器很有可能就会挂

5)如何设置线程池中线程的个数? 

有一个程序,这个程序要进行并发的,多线程来进行处理一些任务,如果使用线程池的话,这里面的线程数我们进行设置成多少是比较合适的呢?

1)针对这个问题,不能给出一个具体的值,只要是能够回答出一个具体的数字,那么一定是错误的

2)我们只能通过一系列的方法来找到一个具体的值,而不是说直接再进行测试之前,就直接进行拍板子一定就行的

正确的方式:要通过性能测试的方式,来找到合适的值

1)比如说可以写一个服务器程序,服务器里面通过线程池,多线程的处理用户请求

我们就可以针对这个服务器进行性能测试,比如说构造一些请求,发送给服务器,因为是要要进行测试性能,所以这里面的构造请求就需要构造很多,比如说每秒构造500/1000/2000请求,根据实际的业务场景,来进行构建一个合适的值;

2)我们再进行性能测试的时候,我们就可以根据不同的线程池中的线程数,来进行观察两个指标,程序处理任务的速度,程序持有的CPU的占用率

2.1)当我们的线程数多了,整体的速度会变快,但是CPU的占用率也会变高

2.2)当我们的线程数少了,整体的速度会变慢,但是CPU的占有率也会下降

我们需要在合适的情况下找到一个平衡点,所以说应该需要找到一个让程序速度可以接受,并且CPU占用也合理的这样一个平衡点,这才是我们正确的做法

2.2)因为不同类型的程序,因为单个任务,里面CPU的计算的时间和阻塞的时间分布是不相同的,因此光去拍脑门进行设置是不可以的,一定要进行性能测试

6)在JAVA中创建线程池有哪几种方式? 

大体上创建线程池一共有两种方式,要么通过ThreadPoolExcutor创建线程池,要么通过Excutors执行器创建线程池

1)Executors.newFixedThreadPool:创建一个固定数量的线程池,可控制并发的线程数,超出的任务会在队列中等待,建出一个固定线程数量的线程池,完全没有零时工的版本,参数指定了线程的个数

  //1.创建一个固定大小的线程池,可以控制并发线程数ExecutorService threadPool= Executors.newFixedThreadPool(2);Runnable runnable=new Runnable() {@Overridepublic void run() {System.out.println("任务被执行"+Thread.currentThread().getName());}};threadPool.submit(runnable);threadPool.submit(runnable);threadPool.submit(runnable);threadPool.submit(runnable);
//打印结果:
任务被执行pool-1-thread-2
任务被执行pool-1-thread-1
任务被执行pool-1-thread-2
任务被执行pool-1-thread-1
//先执行两个任务,剩余的任务直接进行排队执行

2)Exectors.newCatchedThreadPool:创建出了一个数量可变的线程池,完全没有正式员工,全是临时工,是一个自动扩容的线程池,会根据任务量来自动进行扩容,如果线程数超过处理所需,那么多余的线程会进行缓存一会被回收,如果线程数不够就新创建线程

创建出了一个数量可变的线程池,完全没有正式员工,全是临时工,是一个自动扩容的线程池,会根据短时间内的任务量来自动进行扩容,适合短时间内有大量突发任务的场景

package OperateNode;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ExectorOperator {public static void main(String[] args) {ExecutorService service=Executors.newCachedThreadPool();for(int i=0;i<10;i++){service.submit(new Runnable() {@Overridepublic void run() {System.out.println("线程池正在创建任务"+Thread.currentThread().getName());}});}}
}
打印结果:
线程池正在创建任务pool-1-thread-2
线程池正在创建任务pool-1-thread-1
线程池正在创建任务pool-1-thread-4
线程池正在创建任务pool-1-thread-3
线程池正在创建任务pool-1-thread-7
线程池正在创建任务pool-1-thread-5
线程池正在创建任务pool-1-thread-9
线程池正在创建任务pool-1-thread-6
线程池正在创建任务pool-1-thread-10
线程池正在创建任务pool-1-thread-8
从上面可以看出线程池创建了10个线程来进行执行相应的任务

3)ScheduleExecutorServiceservice=Exectors.ScheduledThreadPool

newScheduleThreadPool:能够设定延长时间的线程池,插入的任务能够过一会再执行,相当于进阶版的定时器,带有定时器功能的线程池;

   ScheduledExecutorService service=Executors.newScheduledThreadPool(5);//添加定时任务1s后执行System.out.println(new Timestamp(System.currentTimeMillis()));service.schedule(new Runnable() {@Overridepublic void run() {System.out.println("我是大佬");}},1,TimeUnit.SECONDS);System.out.println(new Timestamp(System.currentTimeMillis()));}
}

4)Exectors.newSingleThreadScheduledExector

创建一个单线程并且可以执行延迟任务的线程池;

  ScheduledExecutorService service =Executors.newSingleThreadScheduledExecutor();service.schedule(new Runnable() {@Overridepublic void run() {System.out.println("大佬");}},2, TimeUnit.SECONDS);}

5)Exectors.newSingleThreadExecutor:创建一个单个线程数的线程池,拥有任务队列,保证任务先进先出的执行顺序

package OperateNode;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;public class ExectorOperator {public static void main(String[] args) {ExecutorService service= Executors.newSingleThreadExecutor();for(int i=0;i<10;i++){final int index=i;service.submit(new Runnable() {@Overridepublic void run() {System.out.println("当前任务"+index+"正在被执行"+Thread.currentThread().getName());try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}}});}}
}
打印结果为:
当前任务0正在被执行pool-1-thread-1
当前任务1正在被执行pool-1-thread-1
当前任务2正在被执行pool-1-thread-1
当前任务3正在被执行pool-1-thread-1
当前任务4正在被执行pool-1-thread-1
当前任务5正在被执行pool-1-thread-1
当前任务6正在被执行pool-1-thread-1
当前任务7正在被执行pool-1-thread-1
当前任务8正在被执行pool-1-thread-1
当前任务9正在被执行pool-1-thread-1
public static void main(String[] args) {ExecutorService service= Executors.newSingleThreadExecutor();for(int i=0;i<10;i++){final int index=i;service.submit(new Runnable() {@Overridepublic void run() {System.out.println("当前线程池正在运行第"+index+"个任务");try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}});}}
}

那么单个线程的线程池有什么意义呢?

1)可以进行复用线程,即使是单个线程池也可以进行复用线程

2)提供了任务管理功能,单个线程池也有任务队列,在任务队列可以进行存储多个任务,并且当任务队列满了之后,保证任务顺序执行,可以执行拒绝策略,这些都是线程所不会具备的;

6)创建一个抢占式执行的线程池:Exectors.newWorkStealingPool:创建一个抢占式执行的线程池,就是任务执行顺序不确定,在JDK1.8中才可以进行使用

public class ExectorOperator {public static void main(String[] args) {ExecutorService service=Executors.newWorkStealingPool();//下面是执行流程for(int i=0;i<10;i++){final int index=i;service.submit(new Runnable() {@Overridepublic void run() {System.out.println(index+"被"+Thread.currentThread().getName()+"执行");}});}while(!service.isTerminated()){
//确保任务完成}}}
7)为什么创建线程池一定要使用ThreadPoolExecutor?

ThreadPool是最原始也是最推荐的手动创建线程池的方式,可以通过参数来进行控制最大任务数和最大线程数和拒绝策略,让线程池的执行更加透明和可控,明确线程池的运行规则,规避资源耗尽的风险

1)FixedThreadPool 和 SingleThreadPool:允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM

2)CachedThreadPool:允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM

8)手动创建线程池
9)谈谈工厂模式: 

相关文章:

JAVA面经整理(5)

创建线程池不是说现用先创建&#xff0c;而是要是可以复用线程池中的线程&#xff0c;就很好地避免了大量用户态和内核态的交互&#xff0c;不需要频繁的创建和销毁线程 一)什么是池化技术&#xff1f;什么是线程池&#xff1f; 1)池化技术是提前准备好一些资源&#xff0c;在…...

【牛客网-面试必刷TOP101】二分查找题目

目录 二维数组中的查找_牛客题霸_牛客网 (nowcoder.com) 寻找峰值_牛客题霸_牛客网 (nowcoder.com) 数组中的逆序对_牛客题霸_牛客网 (nowcoder.com) 旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com) 二维数组中的查找_牛客题霸_牛客网 (nowcoder.com) 题意&#xff1a…...

【QT】自定义组件ui类添加到主ui界面方法

1.添加自定义组件到项目中 add new选择如下 写好类方法&#xff0c;确定即可 2.将新创建的ui类加入到主ui界面 选中新创建ui类的父类空块&#xff0c;右键选择提升为 选择并添加新创建的类...

FFmpeg 多图片合成视频带字幕和音乐+特效(淡入淡出,圆圈黑色淡出)

FFmpeg 多图片合成视频带字幕和音乐+特效(淡入淡出,圆圈黑色淡出) 效果图1. 报错及解决2. xfade、xfade_opeccl 特效切换3. ffmpeg命令行详解4. 源码4.1 auto.bash4.2 geneFade.py4.3 python moviepy合并视频及音频按照(视频长度截取对应的音频在合并)4.4 命令行记录参考这…...

上网Tips: Linux截取动态效果图工具_byzanz

链接1 链接2 安装&#xff1a; sudo apt-get install byzanz 查看指令 说明 byzanz-record --help日常操作 xwininfo点击 待录制窗口 左上角 byzanz-record -x 72 -y 64 -w 1848 -h 893 -d 10 --delay5 -c /home/xixi/myGIF/test.gif小工具 获取鼠标坐标 xdotool getm…...

下载盗版网站视频并将.ts视频文件合并

. 1.分析视频请求123 2.数据获取和拼接 1.分析视频请求 1 通过抓包观察我们发现视频是由.ts文件拼接成的每一个.ts文件代表一小段2 通过观察0.ts和1.ts的url我们发现他们只有最后一段不同我们网上找到url获取的包3 我们发现index.m3u8中储存着所有的.ts文件名在拼接上前面固定…...

ElasticSearch - 基于 拼音分词器 和 IK分词器 模拟实现“百度”搜索框自动补全功能

目录 一、自动补全 1.1、效果说明 1.2、安装拼音分词器 1.3、自定义分词器 1.3.1、为什么要自定义分词器 1.3.2、分词器的构成 1.3.3、自定义分词器 1.3.4、面临的问题和解决办法 问题 解决方案 1.4、completion suggester 查询 1.4.1、基本概念和语法 1.4.2、示例…...

【kubernetes】kubernetes中的调度

1 调度过程 调度的本来含义是指决定某个任务交给某人来做的过程&#xff0c;kubernetes中的调度是指决定Pod在哪个Node上运行。 k8s的调度分为2个过程&#xff1a; 预选&#xff1a;去掉不满足条件的节点优选&#xff1a;对剩下符合条件的节点按照一些策略进行排序&#xff…...

java读取csv文件或者java读取字符串,找出引号内容,采用正则表达式书写

将一个csv文件复制出来将后缀改变为txt,我们就得到了一个文件文件打开这个txt文件&#xff0c;可以看到每一个字段之间都是用英文逗号隔开 正常的内容形似 20,C4,Pm,tem,tion,21,A4,E,H,"1,2,3,NA,aaa,bbbb,cccc,ddd,N/A,aaa,bbbb,cccc,ddd,tttttt对于这种我们只需要进行…...

【寻找关键钥匙】python实现-附ChatGPT解析

1.题目 寻找关键钥匙 知识点字符串、编程基础、正则表达式、排序 时间限制:1s 空间限制: 256MB 限定语言:不限 题目描述: 小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成)的箱子,并给出箱子编号,箱子编号为1~N。 每个箱子中都有一个…...

基于 QT 实现一个 Ikun 专属桌面宠物

Step0、实现思路 想到的思路有两种&#xff1a; 1、使用 QT 的状态机模式&#xff0c;参考官网文档&#xff0c;这个模式的解耦最佳 2、使用原生 Wigets&#xff0c;将窗口设置为透明无框&#xff0c;循环播放桌面宠物的状态 本文采用第二种思路&#xff0c;实现一个极简版…...

新闻报道的未来:自动化新闻生成与爬虫技术

概述 自动化新闻生成是一种利用自然语言处理和机器学习技术&#xff0c;从结构化数据中提取信息并生成新闻文章的方法。它可以实现大规模、高效、多样的新闻内容生产。然而&#xff0c;要实现自动化新闻生成&#xff0c;首先需要获取可靠的数据源。这就需要使用爬虫技术&#…...

C++ 并发编程实战 第八章 设计并发代码 二

目录 8.3 设计数据结构以提升多线程程序的性能 8.3.1 针对复杂操作的数据划分 8.3.2 其他数据结构的访问模式 8.4 设计并发代码时要额外考虑的因素 8.4.1 并行算法代码中的异常安全 8.4.2 可扩展性和Amdahl定律 8.4.3 利用多线程隐藏等待行为 8.4.4 借并发特性改进响应…...

list(链表)

文章目录 功能迭代器的分类sort函数&#xff08;排序&#xff09;merage&#xff08;归并&#xff09;unique(去重&#xff09;removesplice&#xff08;转移&#xff09; 功能 这里没有“[]"的实现&#xff1b;原因&#xff1a;实现较麻烦&#xff1b;这里使用迭代器来实…...

使用代理IP进行安全高效的竞争情报收集,为企业赢得竞争优势

在激烈的市场竞争中&#xff0c;知己知彼方能百战百胜。竞争对手的信息对于企业来说至关重要&#xff0c;它提供了洞察竞争环境和市场的窗口。在这个信息时代&#xff0c;代理IP是一种实用的工具&#xff0c;可以帮助企业收集竞争对手的产品信息和营销活动数据&#xff0c;为企…...

【数学知识】一些数学知识,以供学习

矩阵的特征值和特征向量 https://zhuanlan.zhihu.com/p/104980382 矩阵的逆 https://zhuanlan.zhihu.com/p/163748569 对数似然方程(log-likelihood equation)&#xff0c;简称“似然方程”: https://baike.baidu.com/item/%E5%AF%B9%E6%95%B0%E4%BC%BC%E7%84%B6%E6%96%B9%E7…...

JKChangeCapture swift 版本的捕捉属性变化的工具

在OC的时代里&#xff0c;大家捕捉属性的变化通常是通过KVO机制来实现的&#xff0c;KVO把所有的属性变化都放在了一个方法进行相应处理&#xff0c;并不友好&#xff0c;之前基于KVO的机制实现了一套属性变化工具JKKVOHelper,这里不就在过多介绍这个了&#xff0c;在swift的时…...

RISC-V 指令

RISC-V指令都是32位长。 文章目录 R-Type指令格式:I-Type指令格式:S-Type指令格式:B-Type指令格式:U-Type指令格式:UJ-Type指令格式:J-Type指令格式:R4-Type指令格式:F-Type指令格式:vC-Type指令格式:CB-Type指令格式:CIW-Type指令格式:CL-Type指令格式:R-Type指…...

[NOIP2011 提高组] 选择客栈

[NOIP2011 提高组] 选择客栈 题目描述 丽江河边有 n n n 家很有特色的客栈&#xff0c;客栈按照其位置顺序从 1 1 1 到 n n n 编号。每家客栈都按照某一种色调进行装饰&#xff08;总共 k k k 种&#xff0c;用整数 0 ∼ k − 1 0 \sim k-1 0∼k−1 表示&#xff09;&am…...

桂院校园导航 静态项目 二次开发教程 1.2

Gitee代码仓库&#xff1a;桂院校园导航小程序 GitHub代码仓库&#xff1a;GLU-Campus-Guide 先 假装 大伙都成功安装了静态项目&#xff0c;并能在 微信开发者工具 和 手机 上正确运行。 接着就是 将项目 改成自己的学校。 代码里的注释我就不说明了&#xff0c;有提到 我…...

private static final long serialVersionUID = 1L的作用是什么?

1.作用是什么&#xff1f; 当一个类被序列化后&#xff0c;存储在文件或通过网络传输时&#xff0c;这些序列化数据会包含该类的结构信息。当反序列化操作发生时&#xff0c;Java虚拟机会根据序列化数据中的结构信息来还原对象。 但是&#xff0c;如果在序列化之后&#xff0c…...

leetCode 122.买卖股票的最佳时机 II 贪心算法

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&…...

阿里云ACP知识点(三)

1、弹性伸缩不仅提供了在业务需求高峰或低谷时自动调节ECS实例数量的能力&#xff0c;而且提供了ECS实例上自动部署应用的能力。弹性伸缩的伸缩配置支持多种特性&#xff0c;例如______,帮助您高效、灵活地自定义ECS实例配置&#xff0c;满足业务需求。 标签、密钥对、 实例RAM…...

nmap 扫描内网IP, 系统, 端口

nmap 扫描内网IP, 系统, 端口 扫描内网ip 对内网进行ARP扫描 .\nmap.exe -sn 192.168.110.0/24 # 全网段 .\nmap.exe -sn 192.168.110.100-200 # 100-200范围 扫描端口 .\nmap.exe -sT 192.168.110.130 # 三次握手连接 较慢, 但更有效 .\nmap.exe -sS 192.168.110.130 # 发…...

Llama2-Chinese项目:4-量化模型

一.量化模型调用方式   下面是一个调用FlagAlpha/Llama2-Chinese-13b-Chat[1]的4bit压缩版本FlagAlpha/Llama2-Chinese-13b-Chat-4bit[2]的例子&#xff1a; from transformers import AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model AutoGPTQForCausalLM…...

【深度学习实验】卷积神经网络(六):自定义卷积神经网络模型(VGG)实现图片多分类任务

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 构建数据集&#xff08;CIFAR10Dataset&#xff09; a. read_csv_labels&#xff08;&#xff09; b. CIFAR10Dataset 2. 构建模型&#xff08;FeedForward&…...

Git/GitHub/Idea的搭配使用

目录 1. Git 下载安装1.1. 下载安装1.2. 配置 GitHub 秘钥 2. Idea 配置 Git3. Idea 配置 GitHub3.1. 获取 GitHub Token3.2. Idea 根据 Token 登录 GitHub3.3. Idea 提交代码到远程仓库3.3.1. 配置本地仓库3.3.2. GitHub 创建远程仓库1. 创建单层目录2. 创建多层目录3. 删除目…...

Android的GNSS功能,搜索卫星数量、并获取每颗卫星的信噪比

一、信噪比概念 信噪比&#xff0c;英文名称叫做SNR或S/N&#xff08;SIGNAL-NOISE RATIO)&#xff0c;又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。 信噪比越大&#xff0c;此颗卫星越有效&#xff08;也就是说可以定位&#xff09;。也就是说&#xff0…...

23-properties文件和xml文件以及dom4j的基本使用操作

特殊文件 我们利用这些特殊文件来存放我们 java 中的数据信息&#xff0c;当数据量比较大的时候&#xff0c;我们可以利用这个文件对数据进行快速的赋值 对于多个用户数据的存储的时候我们要用这个XML来进行存储 关于这些特殊文件&#xff0c;我们主要学什么 了解他们的特点&…...

新型信息基础设施IP追溯:保护隐私与网络安全的平衡

随着信息技术的飞速发展&#xff0c;新型信息基础设施在全球范围内日益普及&#xff0c;互联网已经成为我们社会和经济生活中不可或缺的一部分。然而&#xff0c;随着网络使用的增加&#xff0c;隐私和网络安全问题也引发了广泛关注。在这个背景下&#xff0c;IP&#xff08;In…...

动态网站如何做登录界面/搜狗推广登陆

流程  使用springMVC也可以代替struts2&#xff0c;当然只是代替业务分发的功能&#xff0c;struts2的一些其他功能它是没有的&#xff0c;不然要struts2有什么用。   下面我用springMVC代替struts2去整合hibernate实现简单的员工查询功能。    使用springMVC有两个配置文…...

wordpress如何上传图片/石家庄最新疫情

文字加工常用于模具标记、零件装饰、简单文字雕刻等&#xff0c;如图6.1所示。文字加工一般在零件精加工之后进行。由于加工的刀具直径很小&#xff0c;很容易折断。因此文字加工切削量少&#xff0c;需要在转速高达10000~30000r/min的高速机或雕刻机上才能以较短的时间完成。文…...

海外公司注册在哪里比较好/我是seo关键词

print([x*11 for x in range(10)]) 转载于:https://www.cnblogs.com/sea-stream/p/11192554.html...

flash网站的优点和缺点/深圳优化公司

python脚本为敏捷开发脚本,在zabbix监控也起到重要作用,以下是使用python脚本发送告警邮件配置方法。 脚本如下: #!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_host = smtp.126.com mail_user = username mail…...

wordpress https 301/深圳搜索排名优化

几乎每次在代码中发现flag变量&#xff0c;我总是能嗅到一股馊味。不管你闻没闻到&#xff0c;反正我闻到了。 在代码中&#xff0c;flag通常作为标志变量的名字。但问题在于&#xff0c;不是所有的问题或代码都需要使用这种标志变量&#xff0c;更不是使用标志变量一定要用fla…...

哪几个小说网站做网编拿的钱多/服务营销

用上getline()之后就发现&#xff0c;这道题水啊&#xff0c;还真的得多积累&#xff0c;留着以后看洛谷&#xff1a;P1598#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #include<set> #…...