网络安全防护指南:筑牢网络安全防线(5/10)
一、网络安全的基本概念
(一)网络的定义
网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。它连接了世界各地的人们,使得信息的传递和交流变得更加便捷高效。
(二)网络安全的含义
网络安全,是指通过采取必要措施,防范对网络的攻击、入侵、干扰、破坏和非法使用以及意外事故,使网络处于稳定可靠运行的状态,以及保障网络数据的完整性、保密性、可用性的能力。
完整性意味着网络中的数据在传输和存储过程中不能被篡改或损坏。无论是个人的照片、文档,还是企业的商业机密、财务数据,都需要保证其完整性,以确保信息的真实性和可靠性。
保密性则要求网络中的数据只能被授权的用户访问。例如,个人的银行账户信息、企业的专利技术等敏感数据,必须通过加密等手段进行保护,防止被未经授权的人员获取。
可用性是指网络系统能够持续稳定地为用户提供服务。如果网络遭受攻击导致无法正常运行,将会给个人和企业带来极大的不便和损失。
(三)网络运营者
网络运营者包括网络的所有者、管理者和网络服务提供者。他们是网络安全法中的关键义务主体,承担着保障网络安全的重要责任。
网络所有者对网络拥有所有权,负责网络的建设和维护。他们需要确保网络的基础设施安全可靠,为用户提供稳定的网络服务。
网络管理者负责网络的日常管理和运营。他们需要制定网络安全管理制度,加强对网络用户的管理,防范网络安全风险。
网络服务提供者则为用户提供各种网络服务,如电子邮件、网页浏览、在线购物等。他们需要保障服务的安全性,防止用户的个人信息泄露和网络攻击。
(四)网络数据
网络数据是指通过网络收集、存储、传输、处理和产生的各种电子数据。这些数据包括但不限于文本、图像、音频、视频等。
网络数据的价值日益凸显,它不仅是企业的重要资产,也是国家的战略资源。例如,企业的客户信息、财务数据等对于企业的经营决策至关重要;国家的人口、地理、资源等基础数据对于国家的安全和发展具有重要意义。
因此,保护网络数据的安全至关重要。网络运营者需要采取数据分类、重要数据备份和加密等措施,确保网络数据的完整性、保密性和可用性。
(五)个人信息
个人信息是以电子或者其他方式记录的能够单独或者与其他信息结合识别自然个人身份的各种信息。它包括但不限于自然人的姓名、出生日期、身份证件号码、个人生物识别信息、住址、电话号码等。
随着网络的普及和发展,个人信息的泄露问题日益严重。个人信息一旦被泄露,可能会被不法分子用于诈骗、盗窃等违法犯罪活动,给个人带来极大的损失。
为了保护个人信息的安全,网络运营者需要遵循合法、正当、必要的原则,公开收集、使用规则,明示收集、使用信息的目的、方式和范围,并经被收集者同意。同时,网络运营者还需要对其收集的用户信息严格保密,并建立健全用户信息保护制度。
(六)关键信息基础设施
关键信息基础设施是指国家对重要行业和领域以及一旦遭到破坏可能严重危害国家安全、国计民生、公共利益的关键信息基础设施进行保护。
关键信息基础设施包括公共通信和信息服务、能源、交通、水利、金融、公共服务、电子政务、国防科技工业等重要行业和领域的重要网络设施、信息系统等。这些系统一旦发生网络安全事故,会影响重要行业正常运行,对国家政治、经济、科技、社会、文化、国防、环境以及人民生命财产造成严重损失。
为了保护关键信息基础设施的安全,国家在网信部门统筹协调下,由公安部门负责指导监督,电信主管部门和其他有关部门在各自职责范围内负责安全保护和监督管理工作。同时,关键信息基础设施运营者也需要承担相应的安全保护义务,如制定内部安全管理制度和操作规程、采取防范网络安全行为的技术措施、进行数据备份和加密等。
二、常见的网络威胁和攻击手段
(一)口令入侵
口令入侵就是使用某些合法用户的账号和口令登录到目的主机,然后再实施攻击活动。许多黑客会采用一些软件来解开已经得到但被加密的口令文档,或者绕开、屏蔽口令保护程序。这种攻击方式往往需要先得到该主机上某个合法用户的账号,然后再进行合法用户口令的破译。
(二)特洛伊木马
特洛伊木马是具有伪装能力、隐蔽执行非法功能的恶意程序。攻击者通过将木马伪装成合法程序或文件,诱导用户下载、安装、运行。一旦用户执行,木马就会植入系统,伺机获取目标系统的信息或控制目标系统的运行。例如,攻击者可以利用木马窃取用户的账户信息,或者控制用户计算机进行 DDoS 攻击等。同计算机病毒、网络蠕虫相比较,特洛伊木马不具有自我传播能力,而是通过其他的传播机制来实现。
(三)WWW 欺骗
WWW 欺骗是指攻击者对某些网页信息进行篡改,如将网页的 URL 改写为指向攻击者的服务器。当用户浏览目标网页时,实际上是向攻击者的服务器发出请求,从而被误导访问坏人的网站,遭受欺骗。此时,攻击者可以监控受攻击者的任何活动,包括账户和密码等敏感信息。
(四)电子邮件攻击
电子邮件攻击主要有两种方式,分别是电子邮件炸弹和电子邮件欺骗。电子邮件炸弹指的是攻击者用伪造的 IP 地址和电子邮件地址向同一信箱发送大量的内容相同的垃圾邮件。当庞大的邮件垃圾到达信箱的时候,就会挤满信箱,把正常的邮件给冲掉。同时,因为它占用了大量的网络资源,常常导致网络塞车,使用户不能正常地工作,严重者可能会给电子邮件服务器操作系统带来危险。电子邮件欺骗指的是攻击者佯称自己是系统管理员,给用户发送邮件,要求用户修改口令或在类似正常的附件中加载病毒、木马程序等。此外,电子邮件攻击的形式还包括病毒链接、恶意附件、钓鱼邮件、邮件篡改、中间人攻击、撞库登录等多种攻击形式。
(五)节点攻击
节点攻击是指攻击者攻击并控制用户电脑后,利用被控制的电脑去攻击其他重要网站。事后调查一般只能查到被控制的用户电脑这里,而用户的电脑就成了俗称的肉鸡、僵尸机。
(六)网络监听
网络监听是主机的一种工作模式,在同一网段内,攻击者开启这种模式后,能够接收到传输的所有信息。例如,使用某些网络监听工具(如 NetXray、Sniffer 等),就可以轻而易举地截取包括账号和口令在内的信息资料。
(七)黑客软件
黑客软件能非法取得用户计算机的终极用户级权利,对其进行完全控制。除了能进行文件操作外,还能进行桌面抓图、取得密码等操作。
(八)安全漏洞
许多系统都存在安全漏洞,这些漏洞如不补上,就会被坏人利用,获取电脑权限或信息数据。比如我们常用的 windows 操作系统经常要打补丁,就是为了弥补出现的安全漏洞。
(九)端口扫描
坏人通过端口扫描,可以知道电脑的端口是否处于激活状态、主机提供了哪些服务、提供服务中是否含有某些缺陷等。它往往是发起进一步攻击的前奏。
(十)DDoS 攻击
DDoS(分布式拒绝服务)攻击是指攻击者通过控制大量僵尸主机,向目标服务器发送大量合法请求,从而消耗服务器资源,导致服务中断。与传统的 DDoS 攻击不同,CC 攻击并不是依靠大量的数据包来阻塞网络,而是通过消耗服务器的处理能力和资源来达到攻击的目的。
(十一)SQL 注入
在 Web 应用程序中插入恶意 SQL 语句,窃取或篡改数据库数据。防止 SQL 注入攻击是确保 Web 应用安全的重要措施。有效的方法包括使用参数化查询、输入验证和过滤、使用存储过程、最小权限原则、使用 ORM 框架、使用准备语句、使用安全的数据库连接、避免动态拼接 SQL 语句、使用防火墙和入侵检测系统以及定期更新和维护数据库软件。
(十二)无线网络安全攻击
包括 WiFi 钓鱼、无线局域网破解等。无线网络相较于有线网络更容易受到攻击,如攻击者可通过 WiFi 钓鱼诱导用户连接恶意无线网络,窃取用户信息或控制用户设备。还可通过破解无线局域网密码,非法接入网络进行攻击活动。
(十三)社交工程攻击
攻击者利用人性弱点获取目标信息或权限。例如,通过欺骗、伪装等手段,让用户透露敏感信息,或者诱导用户执行某些操作,从而达到攻击目的。
(十四)恶意软件攻击
通过传播病毒、木马等恶意软件窃取或破坏数据。常见的恶意软件类型包括病毒、蠕虫、特洛伊木马、广告软件、间谍软件和勒索软件等。电子邮件通常用于通过网络钓鱼攻击传播恶意软件。
(十五)钓鱼攻击
伪造邮件、网站诱导用户泄露个人信息或下载恶意软件。攻击者通过发送虚假消息,伪装成合法来源,如银行、流行服务等,诱骗用户泄露敏感信息(例如登录或信用卡详细信息)或在用户的设备上下载恶意软件。
(十六)跨站脚本攻击(XSS)
在 Web 页面中嵌入恶意脚本,窃取用户信息或控制用户浏览器。攻击者对用户输入的数据不进行严格过滤和验证,导致恶意脚本被注入到 Web 页面中,当用户访问该页面时,恶意脚本就会被执行,从而窃取用户信息或控制用户浏览器。
(十七)暴力破解攻击
尝试大量密码破解目标账户密码。攻击者通过自动化工具,不断尝试各种可能的密码组合,直到破解目标账户密码。为防范暴力破解攻击,可设置复杂且不易猜测的密码,定期更换密码,启用双因素认证,限制登录尝试次数等。
(十八)网络间谍攻击
窃取或破坏目标计算机中的机密数据。攻击者通过各种手段,如利用系统漏洞、社交工程等,入侵目标计算机,窃取机密数据,实现情报窃取。防范网络间谍攻击需要加强网络安全防护,定期更新系统和软件补丁,对内部网络进行隔离,限制数据访问权限等。
三、基本的网络安全防护措施
(一)电脑使用过程中的防护措施
在电脑使用过程中,我们可以采取以下防护措施来确保网络安全。
- 安装防火墙和杀毒软件,并经常升级,及时更新病毒、木马库,给操作系统和其他软件打补丁。防火墙可以有效阻止未经授权的访问,杀毒软件则能检测和清除病毒、木马等恶意软件,而定期升级和打补丁可以修复软件中的安全漏洞,降低被攻击的风险。
- 设置计算机系统账号口令,及时删除或禁用过期题号。强密码可以增加账号的安全性,避免被轻易破解。同时,及时清理过期账号可以减少潜在的安全隐患。
- 不打开来历不明的网页、邮箱链接或附件,不运行未经杀毒软件处理的程序或软件,不打开不明文件。这些来源不明的内容很可能携带病毒、木马或恶意软件,一旦打开可能会导致系统被感染。
- 打开移动存储设备前用杀毒软件进行扫描检查。移动存储设备如 U 盘、移动硬盘等可能在其他设备上感染了病毒,扫描检查可以防止病毒传入电脑。
- 定期备份,以便被病毒严重破坏后能迅速修复。定期备份重要数据可以在系统遭受严重破坏时,快速恢复数据,减少损失。
(二)防范 U 盘、移动硬盘泄密的措施
为防范 U 盘、移动硬盘泄密,可采取以下措施。
- 及时查杀木马与病毒。定期使用杀毒软件对 U 盘和移动硬盘进行扫描,确保没有恶意软件。
- 从正规商家购买可移动存储介质。正规商家的产品质量更有保障,减少了被植入恶意软件的风险。
- 定期备份并加密重要数据。备份可以防止数据丢失,加密则可以保护数据的保密性。
- 将 U 盘、移动硬盘接入电脑前,先进行病毒扫描。与打开移动存储设备前用杀毒软件进行扫描检查的道理相同,提前扫描可以防止病毒传入电脑。
(三)计算机中毒后的症状
计算机中毒后可能会出现以下症状。
- 经常死机。病毒可能会占用大量系统资源,导致系统不稳定,频繁死机。
- 文件打不开。病毒可能破坏文件的结构或关联,导致文件无法正常打开。
- 经常报告内存或硬盘空间不足。病毒可能会大量占用内存或硬盘空间,使系统误以为空间不足。
- 出现大量来历不明的文件。病毒可能会自动生成一些文件,或者将其他文件复制到系统中。
- 数据丢失。病毒可能会删除、损坏或加密用户的数据。
- 系统运行速度慢。病毒占用系统资源,会导致系统运行速度明显变慢。
- 操作系统自动执行操作。病毒可能会控制操作系统,自动执行一些操作,如打开文件、发送邮件等。
(四)防范 QQ、微博等账号被盗的措施
要防范 QQ、微博等账号被盗,可以采取以下措施。
- 账户和密码不要相同,使用混合组成的密码,适当增加密码长度并经常更换,不用个人信息数字作为密码。这样可以增加密码的复杂度,降低被破解的风险。
- 针对不同用途设置不同用户名和密码。避免一个密码被破解后,多个账号都受到影响。
- 在多人共用计算机上登录前重启计算机,警惕输入账号密码时被偷看。重启计算机可以清除可能存在的恶意软件,同时注意遮挡输入密码,防止被他人偷看。
(五)保护网上购物安全的措施
保护网上购物安全,可以采取以下措施。
- 核实网站资质及联系方式真伪,到知名、权威网上商城购物,不轻信网上低价推销。确保购物网站的合法性和可靠性,避免在不可信的网站上购物。
- 尽量通过网上第三方支付平台交易,检查支付网站真实性,不与商家私下交易。第三方支付平台相对安全,可以在一定程度上保障消费者的权益。
- 购物时注意商家信誉、评价和联系方式。选择信誉好的商家,减少购物风险。
- 交易完成后完整保存交易订单等信息。以便在出现问题时作为证据。
- 慎重使用银行账号、密码和证件号码等敏感信息。避免敏感信息被泄露。
(六)防范网络谣言的措施
防范网络谣言可采取以下措施。
- 注意辨别信息来源和可靠度,通过经第三方可信网站认证的网站获取信息。确保信息的真实性和可靠性。
- 不造谣、不轻信、不传谣。从自身做起,共同维护网络环境的健康。
- 及时举报疑似谣言信息。发现谣言及时举报,让网络空间更加清朗。
(七)防范网络诈骗的措施
防范网络诈骗的措施如下。
- 不贪小便宜,仔细甄别,严加防范。避免因贪图小便宜而陷入诈骗陷阱。、
- 使用安全的支付工具。确保支付过程的安全。
- 不在网上购买非正当产品。减少与非法交易的接触,降低被骗风险。
- 不轻信以各种名义要求先付的信息,不轻易把银行卡借给他人,不向他人透露本人证件号码、账号、密码等。保护个人信息和财产安全。
(八)其他防护措施
为了进一步加强网络安全,还可以采取以下防护措施。
- 更新网络设备和软件,及时修补漏洞。保持设备和软件的最新状态,减少安全漏洞。
- 使用复杂和强密码,定期更换密码。增加密码的安全性。
- 安装防火墙,过滤入侵流量和触发攻击。防火墙可以有效阻止未经授权的访问。
- 使用加密技术,保护数据安全。加密可以使数据在传输和存储过程中更加安全。
- 安装杀毒软件和反间谍软件,检测和清除病毒和恶意软件。确保系统的安全。
- 实施网络访问控制,限制对敏感数据的访问。防止未经授权的人员访问敏感信息。
- 建立响应计划,准备应对网络攻击,及时备份重要数据。在遭受攻击时能够迅速应对,减少损失。
四、经典代码案例
以下为你提供几个结合网络安全基础概念、应对常见网络威胁的经典代码案例,涵盖不同场景下的防护及检测相关实践示例,助你更直观理解网络安全技术在编程层面的运用。
案例一:基于 Python 的密码强度校验(防范弱密码,应对暴力破解攻击)
import re
import stringdef password_strength_check(password):"""检查密码强度,返回强度等级(弱、中、强)及提示信息"""length_score = len(password)if length_score < 8:length_score = 0elif 8 <= length_score < 12:length_score = 1else:length_score = 2has_lower = bool(re.search(r'[a-z]', password))has_upper = bool(re.search(r'[A-Z]', password))has_digit = bool(re.search(r'\d', password))has_special = bool(re.search(rf'[{re.escape(string.punctuation)}]', password))complexity_score = sum([has_lower, has_upper, has_digit, has_special])total_score = length_score + complexity_scoreif total_score <= 2:return "弱", "密码过短或缺乏多种字符类型组合,请增加长度并包含大小写字母、数字和特殊字符。"elif total_score <= 4:return "中", "密码强度尚可,可进一步优化字符多样性提升安全性。"else:return "强", "密码强度高,符合安全要求。"# 测试示例
password1 = "abc123"
print(password_strength_check(password1))
password2 = "Abc@123456"
print(password_strength_check(password2))
此代码通过正则表达式检查密码长度、是否包含大小写字母、数字和特殊字符,综合评估密码强度,帮助用户避免设置易被暴力破解的弱密码,适用于用户注册、密码修改等场景,强化账号口令层面安全。
案例二:Python 实现简单端口扫描检测(防范端口扫描攻击)
import socket
from concurrent.futures import ThreadPoolExecutordef port_scan(target_host, port):"""尝试连接目标主机的指定端口,判断端口是否开放"""try:with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.settimeout(1)result = s.connect_ex((target_host, port))if result == 0:return port, Trueelse:return port, Falseexcept Exception as e:return port, Falsedef scan_host(target_host, ports=range(1, 1025)):"""对目标主机的一系列端口进行扫描,返回开放端口列表"""open_ports = []with ThreadPoolExecutor(max_workers=20) as executor:futures = [executor.submit(port_scan, target_host, p) for p in ports]for future in futures:port, is_open = future.result()if is_open:open_ports.append(port)return open_ports# 假设扫描本地主机示例
target_host = "12.0.0.1"
open_ports = scan_host(target_host)
print(f"开放端口: {open_ports}")
这段代码利用多线程并发扫描指定主机的一系列端口,快速检测出开放端口情况,有助于管理员及时发现异常开放端口(可能是攻击者扫描后的利用迹象),进而采取关闭不必要端口、加强端口访问控制等安全措施。
案例三:使用 PHP 防范 SQL 注入(应对 SQL 注入攻击)
<?php
// 假设连接数据库,此处简化配置示例,实际使用完整配置信息
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);// 检查连接
if ($conn->connect_error) {die("连接失败: ". $conn->connect_error);
}// 对用户输入数据进行安全过滤(示例为处理用户名登录场景)
$user_input_username = $_POST['username'];
$user_input_password = $_POST['password'];// 使用预处理语句,绑定参数,有效防 SQL 注入
$stmt = $conn->prepare("SELECT * FROM users WHERE username =? AND password =?");
$stmt->bind_param("ss", $user_input_username, $user_input_password);
$stmt->execute();
$result = $stmt->get_result();if ($result->num_rows > 0) {// 登录成功逻辑处理echo "登录成功";
} else {// 登录失败逻辑处理echo "用户名或密码错误";
}$stmt->close();
$conn->close();
?>
在 Web 应用中(这里以 PHP 为例),用户输入数据用于数据库查询时,若直接拼接 SQL 语句极易引发 SQL 注入。通过使用预处理语句和参数绑定机制,让输入数据作为纯数据处理,而非可执行 SQL 片段,保障数据库查询安全,抵御 SQL 注入攻击,这是 Web 开发保障数据安全极为重要的一环。
案例四:生成一段基于Java的SQL注入攻击代码示例
以下是一段演示 SQL 注入攻击的 Java 代码示例,请注意,此代码仅用于学习和了解 SQL 注入攻击的原理及危害,在任何实际环境中使用这样的代码去攻击他人系统都是非法且不道德的行为。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class SQLInjectionExample {public static void main(String[] args) {// 数据库连接相关配置(这里以MySQL为例,实际中请按真实环境修改)String url = "jdbc:mysql://localhost:3306/your_database_name";String username = "your_username";String password = "your_password";try {// 建立数据库连接Connection connection = DriverManager.getConnection(url, username, password);// 获取用户输入,这里简单模拟一个存在注入风险的用户名输入情况(实际中可能来自网页表单等)String userInput = getMaliciousInput();// 构建存在SQL注入漏洞的SQL语句,假设从名为 'users' 的表中根据用户名查询用户信息String sql = "SELECT * FROM users WHERE username = '" + userInput + "'";Statement statement = connection.createStatement();// 执行查询语句ResultSet resultSet = statement.executeQuery(sql);// 处理查询结果while (resultSet.next()) {System.out.println("用户ID: " + resultSet.getString("id") + ", 用户名: " + resultSet.getString("username"));}// 关闭资源resultSet.close();statement.close();connection.close();} catch (SQLException e) {e.printStackTrace();}}private static String getMaliciousInput() {// 构造恶意输入,演示SQL注入攻击,这里假设利用单引号闭合和注释掉后面原有的语句// 例如,正常用户名可能是 'admin',注入的恶意输入则尝试绕过验证获取所有用户信息return "' OR 1=1 --";}
}
在上述代码中:
-
建立数据库连接:
首先通过DriverManager.getConnection
方法使用给定的数据库连接 URL、用户名和密码来建立与数据库(示例中是 MySQL 数据库)的连接。 -
构造存在注入风险的 SQL 语句:
从getMaliciousInput
方法获取用户输入内容,然后直接将其拼接到 SQL 语句的WHERE
子句中用于查询users
表中符合用户名条件的记录。问题就出在这里,没有对用户输入进行任何的安全校验和过滤,使得攻击者可以输入恶意构造的内容来篡改原本的 SQL 查询逻辑。 -
演示注入攻击的恶意输入示例:
在getMaliciousInput
函数中返回的' OR 1=1 --
就是典型的恶意输入。它的原理是,单引号闭合了原本 SQL 语句中username
字段值的单引号限定,然后OR 1=1
这个条件使得整个WHERE
子句的条件恒为真,这样就能绕过正常的根据特定用户名查询的逻辑,最后--
用于注释掉后面原本 SQL 语句中可能存在的其他条件(比如密码验证相关等),最终导致查询结果会返回表中所有的用户记录,而不是仅符合正常用户名要求的记录,实现了非法的数据获取,也就是 SQL 注入攻击的一种体现。 -
执行查询与处理结果:
使用Statement
对象的executeQuery
方法执行构造好的 SQL 语句,并通过循环遍历ResultSet
来输出查询到的用户信息(这里只是简单打印部分字段示例)。 -
关闭资源:
最后按照正确的顺序关闭ResultSet
、Statement
和Connection
,释放相关的数据库资源。
在实际的安全防护中,一定要使用 PreparedStatement
并对用户输入进行严格的校验、转义等处理,避免出现这样的 SQL 注入漏洞,保障数据库及系统的安全。
拓展知识:
1、如何防御SQL注入攻击?
2、除了Java,还有哪些语言容易受到SQL注入攻击?
3、如何利用SQL注入攻击进行漏洞检测?
本文相关文章推荐:
1、计算机网络基础全攻略:探秘网络构建块(1/10)
2、TCP/IP 协议:网络世界的基石(2/10)
3、局域网与广域网:探索网络的规模与奥秘(3/10)
4、NAT:连接私有与公共网络的关键技术(4/10)
5、网络安全防护指南:筑牢网络安全防线(5/10)
相关文章:
网络安全防护指南:筑牢网络安全防线(5/10)
一、网络安全的基本概念 (一)网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...
集合框架(2)List
Collection的子接口:List、Set 1、List接口 鉴于Java中数组用来存储数据的局限性,我们通常使用java.util.List替代数组List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。JDK API中List接口的实现类常用的有ÿ…...
12.5作业
1.完成指针的练习 1.已知数组a[10]和b[10]中元素的值递增有序,用指针实现将两个数组中的元素按递增的顺序输出。 ex: int arr[5]{1,3,5,7,9}; int arr1[5]{2,4,6,8,10}; 程序结束后输出1,2,3,4,5,6&am…...
61 基于单片机的小车雷达避障及阈值可调
所有仿真详情导航: PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机,采用超声波传感器检测距离,通过LCD1602显示屏显示,三个按键,第一个按键是…...
116. UE5 GAS RPG 实现击杀掉落战利品功能
这一篇,我们实现敌人被击败后,掉落战利品的功能。首先,我们将创建一个新的结构体,用于定义掉落体的内容,方便我们设置掉落物。然后,我们实现敌人死亡时的掉落函数,并在蓝图里实现对应的逻辑&…...
原子类相关
原子引用 JUC 并发包提供了: AtomicReferenceAtomicMarkableReferenceAtomicStampedReference AtomicReference 使用举例 public interface DecimalAccount {// 获取余额BigDecimal getBalance();// 取款void withdraw(BigDecimal amount);/*** 方法内会启动 10…...
DeCoOp: Robust Prompt Tuning with Out-of-Distribution Detection
文章汇总 me:看得很迷糊 新型检测器 M D \mathcal M_D MD的训练是为了对一个子基类去划分子基类中的base和new。 在获得每个子基类之后,为每个检测器训练子分类器 M C \mathcal M_C MC 在推理时,如果最高得分的检测器 M D i ( x ) \ma…...
Tinker热修复框架详解:Android应用补丁生成,提升应用稳定性
Tinker 是腾讯开源的Android热修复框架,通过动态更新和修复应用中的代码、资源和本地库文件,无需用户重新安装 APK,便可以及时修复应用中的 bug,优化用户体验。 下面是Tinker在Android项目中的详细用法,结合Kotlin 代…...
手写—— netty 实现 rabbitMq客户端
要使用 Netty 实现一个 RabbitMQ 客户端,你可以将 RabbitMQ 协议封装在 Netty 中,通过自定义编码和解码来实现与 RabbitMQ 的通信。RabbitMQ 使用 AMQP (Advanced Message Queuing Protocol) 协议,因此我们需要创建合适的协议封装和处理逻辑。…...
调用高德地图天气查询api
之前使用的api一直用不了,才发现web端类型的没有天气查询功能 web服务才有 然后在linux的环境变量中配置一下 发现linux中配的环境变量不行,于是给输入amap_weather给的字典明文token。 # 选用RolePlay 配置agent from modelscope_agent.agents.role_p…...
【Vulkan入门】03-创建Device
目录 先叨叨git信息关键代码VulkanEnv::CreateDevice() 编译并运行程序题外话 先叨叨 在上篇已经选择了一个合适的PhysicalDevice。 本篇要为这个PhysicalDevice创将一个Device。Device可以理解为APP与PhysicalDevice之间的代理。 所有APP与PhysicalDevice之间交互的资源都通过…...
【Axios】如何在Vue中使用Axios请求拦截器
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
query did not return a unique result: 2;
文章目录 错误原因分析关键位置可能原因解决方法1. 检查数据库数据2. 修改查询方法3. 限定查询返回唯一结果4. 检查业务逻辑 总结 1、LoginLogRepository2、LoginLogService3、LoginLogApiService4、MyAuthenticationSuccessHandler 微信小程序开发者工具控制台报错 {"tim…...
PHP升级
PHP升级CentOs8 wget http://rpms.famillecollet.com/enterprise/remi-release-8.rpm rpm -ivh remi-release-8.rpm --nodeps --force rpm -qa | grep remi dnf module list php dnf module enable php:remi-7.4首先,重置当前的 PHP 模块,以便清理所有已…...
C++设计模式(原型、代理、适配器、组合)
一、原型模式 1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式允许通过复制现有的对象来创建新对象,而不是通过实例化类来创建。这种方式可以避免创建重复的对象,从而提高性能和降低内存消耗。 2.组成 …...
超详细搭建PhpStorm+PhpStudy开发环境
刚开始接触PHP开发,搭建开发环境是第一步,网上下载PhpStorm和PhpStudy软件,怎样安装和激活就不详细说了,我们重点来看一看怎样搭配这两个开发环境。 前提:现在假设你已经安装完PhpStorm和PhpStudy软件。 我的PhpStor…...
Axure RP在智慧农场可视化大屏系统设计中的应用
随着科技的飞速发展,智慧农业已成为现代农业的重要发展方向。智慧农场可视化大屏系统作为智慧农业的重要组成部分,正逐步成为农场管理、决策和展示的核心工具。Axure RP,作为一款强大的原型设计工具,其在智慧农场可视化大屏系统的…...
《嵌入式硬件设计》
一、引言 嵌入式系统在现代科技中占据着至关重要的地位,广泛应用于消费电子、工业控制、汽车电子、医疗设备等众多领域。嵌入式硬件设计作为嵌入式系统开发的基础,直接决定了系统的性能、可靠性和成本。本文将深入探讨嵌入式硬件设计的各个方面ÿ…...
【C语言篇】C 语言总复习(上):点亮编程思维,穿越代码的浩瀚星河
我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 在计算机科学的广袤宇宙中,C语言犹如一颗璀璨的恒星,散发着持久而耀眼的光芒。它作为一种基础且强大的编程语言,承载…...
多线程——04
本节目标 1. wait 和 notify 方法 2. 代码案例 1. wait 和 notify 方法 1. 方法使用 多个线程的执行顺序本身是随机的(抢占式执行) wait —— 让指定线程进入阻塞状态 notify —— 唤醒对应的阻塞状态的线程 注意: wait, notify, notifyAl…...
使用ECS和OSS搭建个人网盘
在linux服务器 一、下载cloudreve安装包。 执行如下命令,下载cloudreve安装包。 wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/cloudreve_3.3.1_linux_amd64.tar.gz 下载完毕后,执行如下命令,解压cloudreve安装包。 tar -zxvf c…...
Android 单元测试断言校验方法 org.junit.Assert
判断布尔值 assertTrue assertFalse 判断对象非空 assertNull(object); 案例: PersistableBundle result Util.getCarrierConfig(mockContext, subId);assertNull(result); 判断是否相等 assertEquals("mocked_string", result.toString()); package or…...
SpringSecurity学习
介绍 SpringSecurity是一个作用于身份认证和权限控制的框架,其针对的主要就是网站的安全问题 页面代码 要使用SpringSecurity的前提是有一个可以正常访问业务逻辑的代码,再使用SpringSecurity实现权限控制和身份验证。 后端代码 package com.learn.…...
Eureka和Zookeeper、Nacos的区别
目录 一、Eureka与Zookeeper的区别 适用场景: 架构设计: 功能特性: 社区生态: 二、Eureka与Nacos的区别 接口方式: 实例类型: 健康检测: 服务发现: 一致性与可用性&#…...
基于gitlab API刷新MR的commit的指定status
场景介绍 自己部署的gitlab Jenkins,并已经设置好联动(如何设置可以在网上很容易搜到)每个MergeRequest都可以触发多个Jenkins pipeline,pipeline结束后会将状态更新到gitlab这个MR上希望可以跳过pipeline运行,直接将指定的MR的指定pipeline状态刷新为…...
SpringBoot | 拦截器 | 统一数据返回格式 | 统一异常处理 | 适配器模式
拦截器 拦截器是Spring框架提供的核心功能之一, 主要用来拦截用户的请求, 在指定方法前后, 根据业务需要执行预先设定的代码. 也就是说, 允许开发人员提前预定义一些逻辑, 在用户的请求响应前后执行. 也可以在用户请求前阻止其执行. 在拦截器当中,开发人员可以在…...
Oracle清除水位
– 清除水位 ALTER TABLE 数据库名.表名 ENABLE ROW MOVEMENT; ALTER TABLE 数据库名.表名 SHRINK SPACE CASCADE; ALTER TABLE 数据库名.表名 DISABLE ROW MOVEMENT; – 回收统计信息 BEGIN DBMS_STATS.GATHER_TABLE_STATS(OWNNAME > ‘数据库名’, TABNAME > ‘表名’…...
软件工程——期末复习(2)
Part1:软件工程基本概念 软件程序文档数据 在软件工程中,软件通常被定为程序、文档和数据的集合。程序是按事先设计的功能和性能要求编写的指令序列;程序是完成指定功能的一段特定语言代码。文档是描述程序操作和使用的文档,是与…...
RAID1技术是什么?它的发展和工作原理如何?
RIAD1是一种先进的数据存储与冗余技术,设计用于解决现代分布式系统中常见的数据安全、数据一致性和高可用性等问题。随着云计算和大规模分布式存储系统的兴起,如何保障数据在高效传输与存储过程中仍然能具备足够的安全性和可靠性,成为了各大企…...
【Apache Paimon】-- 8 -- flink 创建 paimon connecor 的两种方式
目录 1、使用 catalog 创建非临时表 2、使用 with 创建 temporary 表 3、对比 4、参考 1、使用 catalog 创建非临时表 CREATE CATALOG my_catalog WITH (type = paimon,warehouse = hdfs:///path/to/warehouse );USE CATALOG my_catalog; CREATE TABLE `<your-paimon-…...
js进阶-关于运算符++
一、运算符与表达式 运算符按参与的运算单元数量分为:一元运算符、二元运算符和三元运算符;表达式是运算单元和运算符一起构成的;每个表达式都有一个运算后的返回值。 二、关于运算符 1.概述 运算符分为两部分,第一部分是返回运…...
三维地图,智慧城市,商业智能BI,数据可视化大屏(Cesiumjs/UE)
绘图工具 三维地图:Cesiumjs 建模方式:激光点云建模、航拍倾斜摄影建模、GIS建模、BIM建模、手工建模 建模工具:C4D Blender GeoBuilding ArcGIS Cesiumjs <!DOCTYPE html> <html lang"en"> <head><meta …...
通过EPEL 仓库,在 CentOS 7 上安装 OpenResty
通过EPEL 仓库,在 CentOS 7 上安装 OpenResty 通过EPEL 仓库,在 CentOS 7 上安装 OpenResty步骤 1: 安装 EPEL 仓库步骤 2: 安装 OpenResty步骤 3: 启动 OpenResty步骤 4: 设置开机自启步骤 5: 验证安装说明 通过EPEL 仓库,在 CentOS 7 上安装…...
每日一题 LCR 054. 把二叉搜索树转换为累加树
LCR 054. 把二叉搜索树转换为累加树 使用后序遍历即可 class Solution { public:TreeNode* convertBST(TreeNode* root) {int temp 0;dfs(root,temp);return root;}void dfs(TreeNode* root,int &temp){if(!root){return ;}dfs(root->right,temp);temp root->val;…...
【贪心算法】贪心算法五
贪心算法五 1.跳跃游戏 II2.跳跃游戏3.加油站3.单调递增的数字 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.跳跃游戏 II 题目链接&…...
vue2播放视频和预览文件的组件以及使用方法
##文件预览组件 按照组件 解决展示pdf的问题 npm install pdfh5 npm install canvas2.8.0 --ignore-scripts npm install --save dommatrix npm install --save web-streams-polyfill解决excel和docx预览的问题 npm install vue-office/docx vue-demi0.14.6 npm inst…...
记录一下,解决js内存溢出npm ERR! code ELIFECYCLEnpm ERR! errno 134 以及 errno 9009
项目是个老项目,依赖包也比较大,咱就按正常流程走一遍来详细解决这个问题,先看一下node版本,我用的是nvm管理的,详细可以看我的其他文章 友情提醒:如果项目比较老,包又大,又有一些需…...
【批处理脚本】更改Windows系统中的 hosts 解析文件
概述 作用 修改 Windows 系统中的 hosts 文件,可以实现 插入 或 删除 条目。该脚本允许用户以管理员权限执行,将特定的域名解析到指定的 IP 地址 应用场景 非常适用于需要频繁或批量修改 hosts 文件的场景: 屏蔽网站、域名重定向、DNS 污染防…...
AIGC 与艺术创作:变革与机遇
在当今数字化时代,人工智能生成内容(AIGC)正以惊人的速度重塑着艺术创作的格局,为艺术家们带来了令人振奋的新机遇。 一.AIGC 的崛起与艺术领域的变革 随着人工智能技术的不断进步,AIGC 逐渐在艺术领域崭露头角。它依…...
String IP和Int IP的互相转换
android中,wifiManager.connectionInfo.ipAddress 可以获取到wifi的ip地址,但这是一个int值,如何转换为常见的如192.168.1.129这种形式,以及这种形式如何转换回int值的形式。 这里ip分为4段,每一段的值都是0 ~ 255&am…...
【大数据学习 | 面经】yarn的资源申请和分配的单位-Container
在yarn中,资源的申请和分配是以container为单位进行的,而不是直接以application和task为单位。 每个提交到yarn上的应用程序(application)都有一个对应的ApplicationMaster(AM)。这个AM负责与ResourceMana…...
php基础:文件处理2
1.文件属性 当我们在程序中操作文件时,可能会使用到文件的一些常见属性,比如文件的大小、类型、修改时间、访问时间以及权限等等。PHP 中提供了非常全面的用来获取这些属性的内置函数,如下表所示。 2.目录操作 新建目录:mkdir(路…...
gradle下载慢解决方案2024 /12 /1android studio (Windows环境)
gradle下载慢解决方案2024 /12 /1 默认环境配置好了,环境配置和程序安装请出门右转 打开软件,点击右上角设置,找到如下设置页 选择本地安装并制定好你已经安装好的 gradle 应用保存即可 全局插件环境配置(新版本可以直接在设置中添加了) 找对应位置添加国内源并把前面的内置源…...
使用Java将PDF文件解析成Excel文件
安装pom依赖 <!-- 解析pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> <!-- 请检查并使用最新版本 --></dependency>测试读取pdf文件…...
怎么区分直线模组中的导程和行程?
直线模组是一种直线传动装置,安装方便,精度高,其使用范围广。直线模组中的导程和行程是两个不同的概念,它们分别描述了直线模组的不同性能参数。 直线模组的行程指的是模组能够正常移动的最大距离,即滑块预期移动的有效…...
算法日记 42 day 图论
今天来看看广度优先搜索,并且写几个题。刷到这里我才想起来,当时第一次面试的时候问的就是这个题,当时大概知道一点思路,但不清楚是图论方面的,更别说写出来了。 广度优先搜索(BFS) 不同于深度…...
STM32 GPIO 8种工作模式的应用场景
目录 一、四种输入模式1、模拟输入:2、浮空输入:3、上拉输入:4、下拉输入: 二、四种输出模式1、推挽输出:2、开漏输出:3、复用推挽输出:4、复用开漏输出: 一、四种输入模式 1、模拟…...
JVM 类加载器有哪些?双亲委派机制的作用是什么?如何自定义类加载器?
类加载器分类 大家好,我是码哥,可以叫我靓仔,《Redis 高手心法》畅销书作者。 先回顾下,在 Java 中,类的初始化分为几个阶段: 加载、链接(包括验证、准备和解析)和 初始化。 而 类加载器&#x…...
揭秘:短视频矩阵源码功能开发分析!!!
一、短视频矩阵系统源码概述 短视频矩阵系统源码旨在为内容创作者及企业提供一种高效的工具,以实现对多个短视频账户的一站式管理。该系统支持同时管理、发布、监控和优化多达1000个短视频账户,显著提升了操作效率。 二、主要功能 1. 多账号管理 该系…...
leetcode - 2337. Move Pieces to Obtain a String
Description You are given two strings start and target, both of length n. Each string consists only of the characters ‘L’, ‘R’, and ‘_’ where: The characters ‘L’ and ‘R’ represent pieces, where a piece ‘L’ can move to the left only if there i…...