Oracle PL/SQL Programming 第8章:Strings 读书笔记

总的目录和进度,请参见开始读 Oracle PL/SQL Programming 第6版

具有字符数据类型的变量存储文本并由字符函数操作。

本章重点讨论单字节字符集,不涉及Unicode 或多字节字符集,不涉及CLOB(字符大对象)和 LONG。

String Datatypes

Oracle 支持四种字符串数据类型:

定长变长
数据库字符集CHARVARCHAR
国家字符集NCHARNVARCHAR2

建议永远不要使用CHAR和NCHAR。

The VARCHAR2 Datatype

variable_name VARCHAR2 (max_length [CHAR | BYTE]);

对于PL/SQL,如果单位是BYTE,则最大为32,767。对于SQL,12c前最大4000,12c后32,767字节,但要设置MAX_SQL_STRING_SIZE参数为EXTENDED。

多字节字符集建议以CHAR为单位,单位为CHAR时,实际的BYTE与字符集有关。

当省略BYTE或CHAR时,实际的单位由初始化参数NLS_LENGTH_SEMANTICS 确定:


SQL> show parameter NLS_LENGTH_SEMANTICSNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_length_semantics                 string      BYTE

您可以通过查询 NLS_SESSION_PARAMETERS 来确定当前设置。

SQL> select * from NLS_SESSION_PARAMETERS;PARAMETER                  VALUE
__________________________ _______________________________
NLS_LANGUAGE               AMERICAN
NLS_TERRITORY              AMERICA
NLS_CURRENCY               $
NLS_ISO_CURRENCY           AMERICA
NLS_NUMERIC_CHARACTERS     .,
NLS_CALENDAR               GREGORIAN
NLS_DATE_FORMAT            DD-MON-RR
NLS_DATE_LANGUAGE          AMERICAN
NLS_SORT                   BINARY
NLS_TIME_FORMAT            HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT       DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT         HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY          $
NLS_COMP                   BINARY
NLS_LENGTH_SEMANTICS       BYTE
NLS_NCHAR_CONV_EXCP        FALSE17 rows selected.

The CHAR Datatype

CHAR 数据类型指定固定长度的字符串。

若不指定长度,则默认为1。

String Subtypes

子类型是为了提供与 ANSI SQL 标准的兼容性。一般用不到。

子类型对应的PL/SQL类型
CHAR VARYINGVARCHAR2
CHARACTERCHAR
CHARACTER VARYINGVARCHAR2
NATIONAL CHARNCHAR
NATIONAL CHAR VARYINGNVARCHAR2
NATIONAL CHARACTERNCHAR
NATIONAL CHARACTER VARYINGNVARCHAR2
NCHAR VARYINGNVARCHAR2
STRINGVARCHAR2
VARCHARVARCHAR2

不要使用 VARCHAR; 使用VARCHAR2。

Working with Strings

使用字符串主要是使用 Oracle 丰富的内置字符串函数库来操作它们。

Specifying String Constants

'You are welcome!'
-- 以下使用了转义,并等同
'You''re welcome!'
q'!You're welcome!!'
q'{You're welcome!}'

当您使用 q 前缀时,您仍然必须将整个字符串括在单引号内。 紧跟在第一个引号后面的字符将成为字符串的分隔符。 如果起始分隔符是 [、{、< 或 () 之一,则结束分隔符必须分别是 ]、}、> 或 )。

通常,字符串常量使用数据库字符集表示。 如果将这样的字符串常量分配给 NCHAR 或 NVARCHAR2 变量,则该常量将隐式转换为国家字符集。 数据库会在必要时执行此类转换,您无需担心它们。 但是,有时您可能需要显式指定要在国家字符集中表示的字符串常量。 您可以使用 n 前缀来执行此操作:

n'Pils vom faß: 1₠'

u前缀表示国家字符集+Unicode:

u'Pils vom fa\00DF: 1\20AC'

&在SQL Plus和SQL Developer中有特殊含义,表示替换变量,可以SET DEFINE OFF禁止。例如:

select '1 & 2' from dual;
set define off
select '1 & 2' from dual;

Using Nonprintable Characters

使用CHR函数:

SQL> select 1 || CHR(10) || 2 from dual;1||
---
1
2

CHR函数的逆操作为ASCII。

SQL> select ASCII('A') from dual;ASCII('A')
----------65SQL> select CHR(65) from dual;C
-
A

Concatenating Strings

两种方法,||或CONCAT函数。

如CONCAT函数两参数类型不一,返回数据类型将是保留最多信息的那个。

两个参数以上可以使用多个CONCAT函数嵌套。

Dealing with Case

比较时不区分大小写

若希望比较时不区分大小写,可以强制字符串全部大写或小写(LOWER或UPPER函数)。

可以使用初始化参数 NLS_COMP 和 NLS_SORT 来使所有字符串比较不区分大小写。 将 NLS_COMP 参数设置为 LINGUISTIC,这将告诉数据库使用 NLS_SORT 进行字符串比较。 然后将 NLS_SORT 设置为不区分大小写的设置,例如 BINARY_CI 或 XWEST_EUROPEAN_CI。 尾随 _CI 表示不区分大小写。

SQL> show parameter nls_compNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_comp                             string      BINARY
SQL> SELECT LEAST ('JONATHAN','Jonathan','jon') FROM dual;LEAST('J
--------
JONATHANSQL> show parameter nls_compNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_comp                             string      BINARY
SQL> show parameter nls_sortNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_sort                             string
SQL> SELECT LEAST ('JONATHAN','Jonathan','jon') FROM dual;LEAST('J
--------
JONATHANSQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;Session altered.SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;Session altered.SQL> SELECT LEAST ('JONATHAN','Jonathan','jon') FROM dual;LEA
---
jon

NLS_COMP 和 NLS_SORT 设置会影响您执行的所有字符串操作。 这些设置会“保留”,直到您更改它们或终止会话为止。

Oracle 还支持不区分重音的排序,您可以通过将 _AI(而不是 _CI)附加到排序名称来获得这种排序。 要查找语言排序名称的完整列表,请参阅 Oracle 数据库全球化支持指南。 该指南还详细解释了 NLS_COMP 和 NLS_SORT 的操作。

不区分大小写和索引

如果设置 NLS_COMP=LINGUISTIC 和 NLS_SORT=BINARY_CI 来启用不区分大小写时,以下SQL使用全表扫描而不使用定义在last_name列上的索引:

SELECT * FROM employees WHERE last_name = lname

可以定义基于函数的索引以避免以上问题:

CREATE INDEX last_name_ci ON EMPLOYEES (NLSSORT(last_name, 'NLS_SORT=BINARY_CI'))
将字符串中的每个单词大写

INITCAP函数。

Traditional Searching, Extracting, and Replacing

查找位置用:INSTR

提取字符串用:SUBSTR

从1或-1开始计数:

select substr('abcdefg', 2);SUBSTR
------
bcdefgSQL> select substr('abcdefg', -2);SU
--
fg

注意INSTR也可以反向查找,但返回的位置是正数。

SQL> select instr('abcdabcd', 'bc');INSTR('ABCDABCD','BC')
----------------------2SQL> select instr('abcdabcd', 'bc', 4);INSTR('ABCDABCD','BC',4)
------------------------6SQL> select instr('abcdabcd', 'bc', -1);INSTR('ABCDABCD','BC',-1)
-------------------------6SQL> select instr('abcdabcd', 'bc', -2);INSTR('ABCDABCD','BC',-2)
-------------------------6-- 下面这个不太好理解
-- 是从倒数第3个字符即b开始查找,查找的方向是反向,但匹配是按正向,因此返回6
SQL> select instr('abcdabcd', 'bc', -3);INSTR('ABCDABCD','BC',-3)
-------------------------6

替换用:REPLACE

select REPLACE('Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec', ',', chr(10)) as mon from dual;

Padding

使用RPAD或LPDD。

可以单个字符或字符串填充;指定的长度若小于需填充的字符串,则会造成截断:

SQL> select lpad('abcdefg', 4) from dual;LPAD
----
abcdSQL> select lpad('abcdefg', 10, '.') from dual;LPAD('ABCD
----------
...abcdefg

Trimming

LPAD 和 RPAD用于填充,而TRIM、LTRIM 和 RTRIM则用于移除。

LTRIM和RTRIM可以移除单个字符或字符集合。

TRIM是为了兼容ISO SQL 标准,可从左,右或两端移除。但其只能移除单个字符:

SQL> select trim('.' from '.abcd.');TRIM
----
abcdSQL> select trim('.a' from '.abcd.');
select trim('.a' from '.abcd.')*
ERROR at line 1:
ORA-30001: trim set should have only one character
Help: https://docs.oracle.com/error-help/db/ora-30001/

Regular Expression Searching, Extracting, and Replacing

正则表达式为您提供了一种模式语言,您可以使用它来描述要查找和操作的文本。

Oracle的正则表达式基于POSIX标准,又做了扩展,功能更强。详见Oracle Regular Expression Support

例如,^([a-z A-Z]*,)+([a-z A-Z]*){1}$表示以逗号分隔的单词列表,如Jan, Feb, Mar, Apr, May

Detecting a pattern

REGEXP_LIKE返回TRUE和FALSE。

LIKE函数则是简单匹配,用_%

Locating a pattern

REGEXP_INSTR,是INSTR的增强。返回匹配的字符串或NULL。

Extracting text matching a pattern

REGEXP_SUBSTR,是SUBSTR的增强。

Counting regular expression matches

REGEXP_COUNT

Replacing text

REGEXP_REPLACE

Grokking greediness

根据Quora的解释:

Grok意思是充分理解并整合先前的知识。 这个词出自罗伯特·A·海因莱因的科幻小说《异乡的陌生人》。
在某种程度上,“你明白吗?” 类似于俚语“明白了吗?”

这里所说的贪婪是指,正则表达式的每个元素将匹配尽可能多的字符。

例如对于字符串'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec',正则表达式.*将匹配为''Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov',而不仅仅是最开始部分的'Jan,'

SQL> select REGEXP_SUBSTR('Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec', '.*,') from dual;REGEXP_SUBSTR('JAN,FEB,MAR,APR,MAY,JUN,JUL,A
--------------------------------------------
Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,-- ^ 表示 排除
SQL> select REGEXP_SUBSTR('Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec', '[^,]*,') from dual;REGE
----
Jan,

可以在*号后加?号指定为非贪婪算法:

SQL> select REGEXP_SUBSTR('Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec', '.*?,') from dual;REGE
----
Jan,

非贪婪量词?实现了尽快地匹配,而不是尽可能多地匹配。

Learning more about regular expressions
  • Oracle Database Application Developer’s Guide—Fundamentals 第4章 或者最新版本看这里。
  • Mastering Oracle SQL, 2nd Edition,亚马逊4.5星
  • Mastering Regular Expressions, 3rd Edition,亚马逊4.5星
  • Oracle Regular Expressions Pocket Reference,亚马逊4星

Working with Empty Strings

注意,Oracle 数据库将空字符串('')视为 NULL,特别是对于在使用其他数据库之后才使用 Oracle 的人来说。 这与 ISO SQL 标准相反,该标准将空字符串和 NULL 区别开来。

/* File on web: empty_is_null.sql */
DECLAREempty_varchar2 VARCHAR2(10) := '';empty_char CHAR(1) := '';
BEGINIF empty_varchar2 IS NULL THENDBMS_OUTPUT.PUT_LINE('empty_varchar2 is NULL');END IF;IF '' IS NULL THENDBMS_OUTPUT.PUT_LINE(''''' is NULL');END IF;IF empty_char IS NULL THENDBMS_OUTPUT.PUT_LINE('empty_char is NULL');ELSIF empty_char IS NOT NULL THENDBMS_OUTPUT.PUT_LINE('empty_char is NOT NULL');END IF;
END;

输出为:

empty_varchar2 is NULL
'' is NULL
empty_char is NOT NULL

因此编程时在比较时需特别小心。因为 NULL 永远不会等于或不等于任何其他值。

Mixing CHAR and VARCHAR Values

Database-to-variable conversion

当您从 CHAR 数据库列中 SELECT 或 FETCH 数据到 VARCHAR2 变量中时,会保留尾随空格。 如果您从 VARCHAR2 数据库列 SELECT 或 FETCH 到 CHAR 变量,PL/SQL 会自动用空格填充该值,使其达到最大长度。

Variable-to-database conversion

和上面的规则是一致的。

当您将 CHAR 变量插入或更新到 VARCHAR2 数据库列时,SQL 内核在执行更改之前不会修剪尾随空格。
当您将 VARCHAR2 变量插入或更新到 CHAR 数据库列时,SQL 内核会自动用空格填充可变长度字符串,使其达到创建表时指定的最大(固定)长度,然后存入数据库。

String comparisons

两个字符串变量比较的规则:

  • 如果两个都是 CHAR 变量,则使用空白填充比较(短的那个一致填充到长的那个定义的长度)。
  • 如果其中一个是可变长度(如VARCHAR2),则 PL/SQL 执行非空白填充比较。此规则也同样适用于涉及两个以上变量的表达式以及涉及 IN 运算符的表达式
DECLAREc10 CHAR(10):= 'welcome';c15 CHAR(15):= 'welcome';vc15 VARCHAR2(15):= 'welcome';
BEGIN-- Compare two CHARs, so blank-padding is usedIF c10 = c15 THENDBMS_OUTPUT.PUT_LINE ('first comparison is TRUE');ELSEDBMS_OUTPUT.PUT_LINE ('first comparison is FALSE');END IF;-- Compare a CHAR and a VARCHAR2, so nonblank-padding is usedIF c15 = vc15 THENDBMS_OUTPUT.PUT_LINE ('second comparison is TRUE');ELSEDBMS_OUTPUT.PUT_LINE ('second comparison is FALSE');END IF;
END;

输出:

first comparison is TRUE
second comparison is FALSE
Character functions and CHAR arguments

字符函数是一种采用一个或多个字符值作为参数并返回字符值或数字值的函数。 当字符函数返回字符值时,该值始终为 VARCHAR2(可变长度)类型。

String Function Quick Reference

以下是常用的,详见SQL Language Reference

ASCII(char)- 返回 char 第一个字符在数据库字符集中的十进制表示形式。

ASCIISTR(char) - 将任何字符集中的字符串或解析为字符串的表达式作为其参数,并返回数据库字符集中该字符串的 ASCII 版本。

CHR(n) 返回与 n 等效的二进制字符作为数据库字符集或国家字符集(如果指定 USING NCHAR_CS)中的 VARCHAR2 值。

COMPOSE(char) 将字符值 char 作为其参数,并返回对其应用 Unicode 规范组合(如 Unicode 标准定义 D117 中所述)的结果。

CONCAT(char1, char2) CONCAT 返回 char1 与 char2 的拼接。

CONVERT(char1, dest_char_set ) 将字符串从一种字符集转换为另一种字符集。

DECOMPOSE(string) 将字符值字符串作为其第一个参数,并返回对其应用其中一个 Unicode 分解的结果。

GREATEST(expr) GREATEST 返回一个或多个表达式列表中最大的一个。

INITCAP(char) INITCAP 返回 char,每个单词的第一个字母大写,所有其他字母小写。

INSTR(string, substring) 函数在字符串中搜索子字符串。

LEAST(expr) 返回一个或多个表达式列表中的最小值。

LENGTH(char) 返回char的长度。

LOWER(char) 返回 char,所有字母均小写。

LPAD(expr1, n, expr2) 返回 expr1,用 expr2 中的字符序列向左填充长度为 n 个字符。 此函数对于格式化查询的输出很有用。

LTRIM(char) 从 char 的左端删除 set 中包含的所有字符。

NCHR(number) 返回与国家字符集中的数字等效的二进制字符。

NLS_INITCAP(char) 返回 char,每个单词的第一个字母大写,所有其他字母小写。 单词由空格或非字母数字字符分隔。

NLS_LOWER,NLS_UPPER,NLSSORT类似。

REGEXP_COUNT, REGEXP_INSTR, REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR系列。

REPLACE(char, search_string, replacement_string) REPLACE 返回 char,其中每次出现的 search_string 都替换为 replacement_string。

RPAD(expr1, n, expr2) 返回 expr1,用 expr2 右填充到长度 n 个字符,根据需要复制多次。

RTRIM(char, set) 从 char 的右端删除集中出现的所有字符。

SOUNDEX(char) 返回包含 char 的语音表示形式的字符串。 此功能可让您比较拼写不同但英语发音相似的单词。

SUBSTR(char, position, substring_length) 函数返回 char 的一部分,从字符position开始,substring_length 个字符长。

TO_CHAR() (字符)将 NCHAR、NVARCHAR2、CLOB 或 NCLOB 数据转换为数据库字符集。 返回的值始终是 VARCHAR2。

TO_MULTI_BYTE(char) 返回 char 并将其所有单字节字符转换为相应的多字节字符。 char 可以是 CHAR、VARCHAR2、NCHAR 或 NVARCHAR2 数据类型。 返回值的数据类型与 char 相同。

SQL> SELECT dump(TO_MULTI_BYTE( 'A')) FROM DUAL;DUMP(TO_MULTI_BYTE('A'))
------------------------
Typ=1 Len=3: 239,188,161SQL> SELECT dump('A') FROM DUAL;DUMP('A')
----------------
Typ=96 Len=1: 65

TO_NCHAR() 将数据库字符集中的数据转换为国家字符集中的等效表示形式。

TO_SINGLE_BYTE(char) 返回 char ,其中所有多字节字符都转换为相应的单字节字符。

TRANSLATE(expr, from_string, to_string) 返回 expr,并将 from_string 中每个字符的所有出现位置替换为 to_string 中对应的字符。

TRIM不说了。

UNISTR(string) 将文本文字或解析为字符数据的表达式作为其参数,并以国家字符集返回它。

UPPER(char) UPPER 返回 char,所有字母均大写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTPS 的应用数据是如何保证完整性的? TLS 在实现上分为握手协议和记录协议两层 TLS 握手协议就是我们前面说的 TLS 四次握手的过程&#xff0c;负责协商加密算法和生成对称密钥&#xff0c;后续用此密…

Spring Boot和Spring MVC常用注解

在Spring Boot和Spring MVC中,注解(Annotations)扮演着至关重要的角色,它们简化了传统的XML配置方式,使得开发过程更加直观和便捷。下面将介绍一些在Spring Boot和Spring MVC中常用的注解及其用法:Spring Boot常用注解 @SpringBootApplication:Spring Boot的核心注解,用于…

Redis的发布订阅功能教程,实现实时消息和key过期事件通知功能

Redis的发布订阅 Redis的发布/订阅(Pub/Sub)功能是一种消息传递模式,用于实现消息发布者(publisher)和订阅者(subscriber)之间的消息通信。在这种模式下,消息的发送者(发布者)将消息发送到特定的频道(channel),而订阅了该频道的接收者(订阅者)将会接收到这些消息…

SpringMVC的文件上传与下载

SpringMVC文件上传: 使用:org.springframework.web.multipart.commons.CommonsMultipartResolver 使用:headPhoto.transferTo(file); 2、文件存储位置问题 String realPath = request.getServletContext().getRealPath("/upload") String dir = new File(realP…

第7集《灵峰宗论导读》

《灵峰宗论》导读。诸位法师&#xff0c;诸位同学&#xff0c;阿弥陀佛&#xff01;&#xff08;阿弥陀佛&#xff01;&#xff09; 请大家打开讲义第16面。 在这一科当中讲到乙一、发心篇&#xff0c;发心篇总共有五篇的论文。前面两篇主要是说明成佛作祖、堕坑落堑&#xf…

【linux 时间问题】centos7.4时间快了8小时,ntpdate命令无法更新时间

出现ntpdate: the NTP socket is in use, exiting的错误信息通常意味着NTP客户端或服务器已经在运行&#xff0c;并且正在使用NTP socket。在CentOS 7.4上&#xff0c;ntpd或chronyd服务可能会与ntpdate命令冲突&#xff0c;因为它们都用于时间同步。 首先&#xff0c;您可以尝…

计算机网络的基础知识

网络的性能指标&#xff1a;网络速率&#xff0c;bpsbit/s&#xff1b; 时延包括四个组成部分&#xff1a;发送时延、传播时延、排队时延、处理时延&#xff1b; 网络各个层次结构设计的基本三原则&#xff1a;各个层次之间是相互独立的&#xff0c;每一个层之间有足够的灵活…

Dockerfile(3) - WORKDIR 指令详解

WORKDIR 切换到镜像中的指定路径&#xff0c;设置工作目录在 WORKDIR 中需要使用绝对路径&#xff0c;如果镜像中对应的路径不存在&#xff0c;会自动创建此目录一般用 WORKDIR 来替代 切换目录进行操作的指令 RUN cd <path> && <do something> WORKDIR…

WPF 【十月的寒流】学习笔记(3):DataGrid分页

文章目录 前言相关链接代码仓库项目配置&#xff08;省略&#xff09;项目初始配置xamlviewModel Filter过滤详细代码展示结果问题 Linq过滤CollectionDataxamlviewModel sql&#xff0c;这里用到数据库&#xff0c;就不展开了 总结 前言 我们这次详细了解一下列表通知的底层是…

LeetCode128. Longest Consecutive Sequence

文章目录 一、题目二、题解 一、题目 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums …

分享three.js和cannon.js构建Web 3D场景

使用 three.js&#xff0c;您不再需要花哨的游戏PC或控制台来显示逼真的3D图形。 您甚至不需要下载特殊的应用程序。现在每个人都可以使用智能手机和网络浏览器体验令人惊叹的3D应用程序。 这个惊人的库和充满活力的社区是您在浏览器、笔记本电脑、平板电脑或智能手机上创建游…

jmeter(四)HTTP请求

启动jmeter&#xff0c;建立一个测试计划 这里再次说说怎么安装和启动jmeter吧&#xff0c;昨天下午又被人问到怎样安装和使用&#xff0c;我也是醉了&#xff1b;在我看来&#xff0c;百度能解决百分之八十的问题&#xff0c;特别是基础的问题。。。 安装&#xff1a;去官网…

以新版 Mini Conda 的安装而引申的思考

前不久&#xff0c;突然想把 conda 拿起来玩玩&#xff0c;准备当作 Python Version Manager 来用。不过 Mini Conda 的安装似乎和几年前我实验时有一些比较大的区别了。 首先依据 conda 的官方文档 Installing on Windows 和 Conda init 可知&#xff0c;Conda 为了避免对已有…

账户名密码是怎样被窃取的,简单模拟攻击者权限维持流程。

前言 在我们进行渗透测试的时候&#xff0c;常常需要进行权限维持&#xff0c;常见的 Javascript窃取用户凭证是一种常见的攻击手法。之前我们可能学习过钓鱼网页的使用&#xff0c;如果我们通过渗透测试进入到用户的服务器&#xff0c;其实也可以通过在网页中植入Javascript代…

jps与 jmap 与 jstat

0.概况 java 版本 java version “1.8.0_291” Java™ SE Runtime Environment (build 1.8.0_291-b10) Java HotSpot™ 64-Bit Server VM (build 25.291-b10, mixed mode) namedescjpsjvm进程jmapjava内存映像工具jstatjvm统计信息监测 1. jps 用于显示jvm所有进程的命令 常…

Python + Selenium —— 常用控制方法!

Selenium 体系中用来操作浏览器的 API 就是 WebDriver&#xff0c;WebDriver 针对多种语言都实现了一套 API&#xff0c;支持多种编程语言。 Selenium 通常用来做自动化测试&#xff0c;或者编写网络爬虫。 通常我们说的 Selenium 自动化操作&#xff0c;指的就是 WebDriver …

AI:138-开发一种能够自动化生成艺术品描述的人工智能系统

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

5.Prometheus的job和instance

平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我。 跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~ 1.Prometheus的job和instance 1.1.Prome…

备战蓝桥杯————如何判断回文链表

如何判断回文链表 题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a;…

Vue2:路由组件的两个生命周期方法

一、情景说明 在上一篇中&#xff0c;我们知道 被keep-alive缓存的组件&#xff0c;它的beforeDestroy不会被执行。 那么&#xff0c;如何弥补这个不足了&#xff1f; 这里&#xff0c;就要学习到两个新的生命周期方法 activated:路由组件激活&#xff08;切换到该组件时&…