rime中州韵小狼毫 中英互绎 滤镜

英文在日常生活中已经随处可见,我们一般中英互译需要使用专业的翻译软件来实现。但如果我们在输入法中,在输入中文的时候,可以顺便瞟一眼对应的英文词汇,或者在输入英文的时候可以顺便了解对应的中文词汇,那将为我们的日常办公带来极大的便利。

我们在 rime中州韵小狼毫 easyEnglish 输入法 一文中为 rime中州韵小狼毫输入法配置了 easyEnglish 输入方案。本文就以 五笔・拼音 输入方案和 easyEnglish 输入方案为例,通过使用 rime中州韵小狼毫 输入法的滤镜功能,来实现中英互译的功能。

dic_4w_en.txt

为了英文向中文的映射,我们需要一个 dic_4w_en.txt 文档,这是一个"表",这个表记录着英文词汇向中文词汇的映射关系,截取显示如下👇:

aar	【Aar】n.阿尔河
aardvark	【aardvark】n.土豚;土猪
aardwolf	【aardwolf】n.土狼
aaron	【Aaron】n.艾伦
aaronic	【Aaronic】adj.亚伦的

dic_4w_en.txt文档中共有两列内容,第一列是英文单词,第二列是对应的中文释义,中间以tab制表符分隔。

原则上来说,第一列和第二列的长度是不限制的,但为了在输入法中显示不至于凌乱,第二列的释义内容不易过长。在下面的脚本中,第二列的长度会被限制在100字符内。

dic_4w_cn.txt

同样,为了中文向英文的映射,我们亦需要一个 dic_4w_cn.txt 文档来记录中文词汇向英文词汇的映射关系,截取显示如下👇:

阿尔河	aar(n.);
土豚	aardvark(n.);
土猪	aardvark(n.);
土狼	aardwolf(n.);
艾伦	aaron(n.);
亚伦	aaronic(adj.);

实际上,dic_4w_en.txt 文档和 dic_4w_cn.txt 文档是互反的。

dic_4w.lua

有了 dic_4w_en.txt 文档和 dic_4w_cn.txt 文档,还不能在输入法中使用,我们需要通过 dic_4w.lua 脚本将 dic_4w_en.txt 文档和 dic_4w_cn.txt 文档中的内容进行加载整理,以使其可以在 lua 程序中进行索引。

dic_4w.lua 脚本的内容如下👇:

-- dic_4w_en.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
local ok, res = pcall(require, 'sysInfo')
local currentDir = res.currentDir

local function files_to_lines(...)
	print("--->files_to_lines called here")
	local tab=setmetatable({},{__index=table})
	local index=1
	for i,filename in next,{...} do
		local fn = io.open(filename)
		if fn then
			for line in fn:lines() do
				if not line or #line > 0 then
					tab:insert(line)
				end
			end
			fn:close()
		end
	end
	
	print("--->files_to_lines completed here")
	return tab
end

local function dictload(...) -- filename)
	print("-->dictload called here")
	
	local lines=files_to_lines(...)
	local dict={}
	for i,line in next ,lines do
		if not line:match("^%s*#") then  -- 第一字 # 为注释行
			local key,val = string.match(line,"(.+)\t(.+)")
			if nil ~= key then
				--此处,相同的key,后加载的内容将覆盖前面加载的内容
				dict[key] = val
			end
		end
	end
	
	print("-->dictload completed here")
	return dict
end

--   Module
local M={}
local dict={}
local function getVal(s)
  return dict[s]
end

function M.init(...)
	print("-> M.init called here")
	
	local files={...}
	--以下files文件的顺序,后面的内容优先级高于前面的,
	--即后面文件中同一key的value将覆盖前面文件内同一key的value
	--文件名不支持中文
	table.insert(files,"dic_4w_cn.txt")
	table.insert(files,"dic_4w_en.txt")
	
	for i,v in next, files do
		files[i] = currentDir().."/".. v
	end
	dict= dictload(table.unpack(files))
	
	M.getVal=getVal
	print("->M.init completed here")
end

M.init()

return M

👆以上 lua 脚本中,我们把 dic_4w_en.txt 文档和 dic_4w_cn.txt 文档内的内容进行了根据 tab 制表符进行切割,第一列的内容为键,第二列的内容为值,最终将这些内容整理成了字典对象 dict,然后脚本提供了一个 getVal 方法,该方法以入参为键,尝试在 dict 字典中查找对应该键的值,并返回。如果查找不到这个键的值,则返回 nil

dic_4w_Filter.lua

dic_4w.lua 脚本将 dic_4w_en.txt 文档和 dic_4w_cn.txt 文档内的词条整理成了 lua 程序的字典对象 dict,并提供了查找的方法 getVal。接下来我们在 dic_4w_Filter.lua 脚本中将 dic_4w.lua 脚本提供的 getVal 方法封装成 rime 滤镜方法。

dic_4w_Filter.lua脚本内容如下👇:

-- spaceAppending.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
local ok, res = pcall(require, 'dic_4w')
local getVal = res.getVal

local ok, utf8String = pcall(require, 'utf8String')

--最长的comment长度限制
local maxLenOfComment = 100

local function dic_4w_Filter(input, env)
	--获取中英对照开关状态
	local on = env.engine.context:get_option("encnDic")
	
	for cand in input:iter() do
		if on then
			local candTxt = cand.text:gsub("%s","") or ""
			local thisComment = cand.comment
			
			if candTxt ~= "" then
				--获取字典释义
				thisComment = getVal(candTxt)
				if nil == thisComment then
					thisComment = cand.comment
				else
					--成功获取了释义,下面进行一些格式化处理
					--替换 <br> 为换行符
					thisComment = thisComment:gsub("<br>","\r")
					--替换 &nbsp 为空格
					thisComment = thisComment:gsub("&nbsp"," ")
					--需要限制释义长度为 maxLenOfComment
					thisComment = string.sub(thisComment, 1, maxLenOfComment)
					--去除首尾空格 和 符号
					thisComment = utf8String.utf8PunctuationsTrim(thisComment)
				end
				if cand.comment ~= "" then
					if thisComment ~= cand.comment then
						if utf8.len(cand.comment) < 5 then
							if '💡'==cand.comment then
								thisComment = cand.comment..thisComment
							else
								thisComment = cand.comment..'✔'..thisComment
							end
						else
							thisComment = cand.comment..'\r'..thisComment
						end
					end
				end
			end
			cand:get_genuine().comment = thisComment
		end
		yield(cand)
	end
end

return dic_4w_Filter

sysInfo.lua

在以上👆的 dic_4w.lua 脚本中, 我们发现其引用了一个 sysInfo 的外部脚本,如下👇:
20240103175732

sysInfo.lua 脚本文档提供了一些系统信息获取的方法,脚本内容如下👇:

local M={}
local dbgFlg = false

--设置 dbg 开关
M.setDbg = function(flg)
	dbgFlg = flg
	print('sysInfo dbgFlg is '..tostring(dbgFlg))
end

M.homePath = function()
	return os.getenv("HOMEPATH")
end

M.computerName = function()
	return os.getenv("COMPUTERNAME")
end

M.userName = function()
	return os.getenv("USERNAME")
end

M.osName = function()
	return os.getenv("OS")
end

M.NUMBER_OF_PROCESSORS = function()
	return os.getenv("NUMBER_OF_PROCESSORS")
end

M.PROCESSOR_IDENTIFIER = function()
	return os.getenv("PROCESSOR_IDENTIFIER")
end

M.PROGRAMDATA = function()
	return os.getenv("PROGRAMDATA")
end
M.PROGRAMFILES = function()
	return os.getenv("PROGRAMW6432")
end
M.PROGRAMFILESx86 = function()
	return os.getenv("PROGRAMFILES(X86)")
end
M.APPDATA = function()
	return os.getenv("APPDATA")
end
M.WINDIR = function()
	return os.getenv("WINDIR")
end
M.COMMONPROGRAMFILES = function()
	return os.getenv("COMMONPROGRAMFILES")
end
M.COMMONPROGRAMFILESx86 = function()
	return os.getenv("COMMONPROGRAMFILES(x86)")
end
M.TEMP = function()
	local path = os.getenv("TEMP")
	if nil == path or '' == path then
		path = os.getenv("TMP")
	end
	return path
end
M.SYSTEMDRIVE = function()
	return os.getenv("SYSTEMDRIVE")
end

M.currentDir = function()
	local info = debug.getinfo(2) --debug.getinfo(2), 2: 返回调用 currentDir 的函数的信息
	
	--解析info.source所在的路径
	local path = info.source
	path = string.sub(path, 2, -1) -- 去掉开头的"@"
	path = string.gsub(path,'\\','/') -- 路径格式由 c:\\Users\\san.zhang\\ 转换为 c:/Users/san.zhang/
	path = string.match(path, "^(.*)/") -- 捕获最后一个 "/" 之前的部分 就是我们最终要的目录部分
	
	return path
end

M.test = function(printPrefix)
	if nil == printPrefix then
		printPrefix = ' '
	end
	
	if dbgFlg then
		print(printPrefix..'sysInfo test starting...')
		
		print(printPrefix, 'currentDir is:', M.currentDir())
		print(printPrefix, 'computerName is:', M.computerName())
		print(printPrefix, 'homePath is:', M.homePath())
		print(printPrefix, 'userName is:', M.userName())
	end
end

return M

👆以上 sysInfo.lua 脚本中,我们可以看到其提供了很多的系统信息的获取方法,例如系统名称,系统路径,脚本工作路径等。这些基础的信息,在将来的其它 lua 脚本中还会继续用到。

utf8String.lua

在以上👆的 utf8String.lua 脚本中, 我们发现其引用了一个 utf8String 的外部脚本,如下👇:
20240103180832

utf8String.lua 脚本文档提供了一些utf-8字符串处理的方法,脚本内容如下👇:

--utf8String.lua
--这个模块主要用于处理一些utf8字符串相关的操作

-- 定义一个全局变量,用于记录一个随机数种子
randomseed = os.time()

local M={}
local dbgFlg = false

--左侧标点,例如左侧括号,左侧引号等,以及单符号标点也被识为左侧标点,例如 | , 等
local punctuationsAtLeft = {[','] = true,[','] = true,
							['。'] = true, ['.'] = true,
							[';'] = true,[';'] = true,
							['、'] = true,['\\'] = true,
							['?'] = true,['?'] = true,
							['!'] = true,['!'] = true,
							['@'] = true,['@'] = true,
							['&'] = true,['&'] = true,
							['/'] = true,
							['…'] = true,
							[' '] = true,
							['('] = true,['('] = true,
							['‘'] = true,['“'] = true,
							['['] = true,['['] = true,['【'] = true,
							['<'] = true,['《'] = true,['〈'] = true
							}

--右侧标点,例如右侧括号,右侧绰号等,以及单符号标点也被识别为右侧标点,例如 | , 等
local punctuationsAtRight = {[','] = true,[','] = true,
							['。'] = true, ['.'] = true,
							[';'] = true,[';'] = true,
							['、'] = true,['\\'] = true,
							['?'] = true,['?'] = true,
							['!'] = true,['!'] = true,
							['@'] = true,['@'] = true,
							['&'] = true,['&'] = true,
							['/'] = true,
							['…'] = true,
							[' '] = true,
							[')'] = true,[')'] = true,
							['’'] = true,['”'] = true,
							[']'] = true,[']'] = true,['】'] = true,
							['>'] = true,['》'] = true,['〉'] = true
							}

local lettersForPwd = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"~", "!", "@", "#", "$", "%", "^", "&", "*", "-", "=", "+"}

--设置 dbg 开关
local function setDbg(flg)
	dbgFlg = flg
	print('utf8String dbgFlg is '..tostring(dbgFlg))
end

--判断给定的一个字符头,实际占用的字节数
local function chsize(char)
	if not char then
		return 0
	elseif char > 240 then
		return 4
	elseif char > 225 then
		return 3
	elseif char > 192 then
		return 2
	else
		return 1
	end
end

--判断给定的一个字符串的实际字符长度
local function utf8Len(str)
	local len = 0
	local currentIndex = 1
	while currentIndex <= #str do
		local char = string.byte(str,currentIndex)
		currentIndex = currentIndex + chsize(char)
		len = len + 1
	end

	return len
end

--根据给定的字符串,和指定的起始位置和字符数,截取子串
local function utf8Sub(str,startChar,numChars)
	local startIndex = 1
	while startChar > 1 do
		local char = string.byte(str,startIndex)
		startIndex = startIndex + chsize(char)
		startChar = startChar - 1
	end

	local currentIndex = startIndex

	while numChars > 0 and currentIndex <= #str do
		local char = string.byte(str,currentIndex)
		currentIndex = currentIndex + chsize(char)
		numChars = numChars - 1
	end

	return str:sub(startIndex,currentIndex - 1)
end

--根据给定的字符串,去除其头尾的空白符
local function utf8Trim(str)
	str = str or ''
	local cnt = 0
	local subChar = utf8Sub(str,1,1)

	--去除其头部的 空白
	while subChar:match("%s") do
		str = utf8Sub(str,2,utf8Len(str)-1)
		subChar = utf8Sub(str,1,1)
		cnt = cnt + 1
	end

	--去除其尾部的 空白
	subChar = utf8Sub(str,utf8Len(str),1)
	while subChar:match("%s") do
		str = utf8Sub(str,1,utf8Len(str)-1)
		subChar = utf8Sub(str,utf8Len(str),1)
		cnt = cnt + 1
	end

	return str,cnt
end

--根据给定的字符串,去除其头尾部的 符号 字符
local function utf8PunctuationsGo(str)
	str = str or ''
	local cnt = 0
	local subChar = utf8Sub(str,1,1)

	--去除其头部的 右侧 标点
	while punctuationsAtRight[subChar] do
		str = utf8Sub(str,2,utf8Len(str)-1)
		subChar = utf8Sub(str,1,1)
		cnt = cnt + 1
	end

	--去除其尾部的 左侧 标点
	subChar = utf8Sub(str,utf8Len(str),1)
	while punctuationsAtLeft[subChar] do
		str = utf8Sub(str,1,utf8Len(str)-1)
		subChar = utf8Sub(str,utf8Len(str),1)
		cnt = cnt + 1
	end

	return str,cnt
end

--根据给定的字符串,去除其头尾部的 符号 和 空白
local function utf8PunctuationsTrim(str)
	str = str or ''
	local cnt = 0
	local subChar = utf8Sub(str,1,1)

	--去除其头部的 右侧 标点
	while punctuationsAtRight[subChar] do
		str = utf8Sub(str,2,utf8Len(str)-1)
		subChar = utf8Sub(str,1,1)
		cnt = cnt + 1
	end

	--去除其尾部的 左侧 标点
	subChar = utf8Sub(str,utf8Len(str),1)
	while punctuationsAtLeft[subChar] do
		str = utf8Sub(str,1,utf8Len(str)-1)
		subChar = utf8Sub(str,utf8Len(str),1)
		cnt = cnt + 1
	end

	return str,cnt
end

--生成一个指定长度的随机密码
function newPwd(len, easyRead)
    len = len or 8
	easyRead = easyRead or true

	local pwd = ''
	local tmpChar = ''
	local cntForOptions = #lettersForPwd

	-- 初始化随机数种子
	math.randomseed(randomseed)

	repeat
		-- 重置随机数种子
		randomseed = math.random(0, 100000000)
		
		--随机挑选一个字符
		tmpChar = lettersForPwd[math.random(cntForOptions)]
		if easyRead then
			--如果要求易读,则禁用 1,l,o,O,0 这些字符
			if not ({['1']=true, ['l']=true, ['o']=true, ['O']=true, ['0']=true})[tmpChar] then
				pwd = pwd .. tmpChar
			end
		else
			pwd = pwd .. tmpChar
		end
		
	until (#pwd >= len)

    return pwd
end


--这是用于测试的函数
local function test(printPrefix)
	if nil == printPrefix then
		printPrefix = ' '
	end

	if dbgFlg then
		print(printPrefix,'utf8StringModule test starting...')

		print(printPrefix,utf8Len("好好学习5天天向上"))
		print(printPrefix,utf8Sub("好好学习5天天向上",5,2))
	end
end

--Module
function M.init(...)
	M.utf8Sub = utf8Sub
	M.utf8Len = utf8Len
	M.utf8Trim = utf8Trim
	M.utf8PunctuationsGo = utf8PunctuationsGo
	M.utf8PunctuationsTrim = utf8PunctuationsTrim
	M.newPwd = newPwd

	M.setDbg = setDbg
	M.test = test
end

M.init()

return M

👆以上脚本中, 我们可以看到 utf8String.lua 提供了丰富的基础字符串处理和生成该当,这些方法在将来的 rime 配置脚本中,还将会引用。

dic_4w_en.txt 文档、dic_4w_cn.txt 文档、dic_4w.lua 文档、dic_4w_Filter.lua 文档、sysInfo.lua 文档和 utf8String.lua 文档,都应该位于 用户文件夹 下的 lua 文件夹内,如下👇:
20240103181535

rime.lua

以上 dic_4w_Filter.lua 脚本中所定义的 dic_4w_Filter 滤镜方法,需要在 rime.lua 中映射为 dic_4w_Filter 滤镜接口,以便在配置文档中引用该接口。 rime.lua 中增加如下👇配置:

dic_4w_Filter = require("dic_4w_Filter")

保存你的 rime.lua 文档,请注意 rime.lua 文档的位置

easy_en.custom.yaml & wubi_pinyin.custom.yaml

接下来,我们需要在输入方案的补丁文档中配置引用 dic_4w_Filter 滤镜了。不过在此之前,我们需要注意到一个状态开关。

如果你仔细阅读了上面的代码,你应该会在 dic_4w_Filter.lua 脚本中注意到以下脚本内容:
20240103184345
这里脚本获取了一个系统的选项开关,这个开头决定了脚本是否继续运行 dic_4w_Filter 滤镜的功能逻辑。所以我们需要在输入方案的配置文档中配置一个 encnDic 的开关。我们在 easy_en.custom.yamlwubi_pinyin.custom.yaml 文档中增加以下配置以增加 encnDic 开关:

patch:
  switches/+: #增加以下开关
    - name: encnDic					# 中英字典开关
      reset: 1
      states: [Off, 中英对照]

有了开关以后,我们需要将 dic_4w_Filter 滤镜配置到输入方案中,我们在 easy_en.custom.yamlwubi_pinyin.custom.yaml 文档中增加以下配置以引用 dic_4w_Filter 滤镜:

patch:
  engine/filters/+:
    - lua_filter@dic_4w_Filter						# 英中对照滤镜

配置文档

👆以上所涉的配置文档,你可以在 rime中州韵小狼毫 中英互译滤镜 下载取用。

效果欣赏

当我们完成以上配置后,我们需要 重新配置 rime中州韵小狼毫输入方法,然后我们就可以在 五笔・拼音 输入方案中看到英文翻译,如下👇:
20240103155835
easyEnglish 输入方案中看到中文翻译,如下👇:
20240103160214

小结

文章分享介绍了在 rime中州韵小狼毫输入法中定义并配置实现中英互译滤镜的方法,共涉及脚本及字典文档9个,实现滤镜定义1个,配置输入方案2个,总体现实了既定的功能效果。
wubi_pinyin.custom.yaml文档中增加以下配置以引用dic_4w_Filter` 滤镜:

patch:
  engine/filters/+:
    - lua_filter@dic_4w_Filter						# 英中对照滤镜

配置文档

👆以上所涉的配置文档,你可以在 rime中州韵小狼毫 中英互译滤镜 下载取用。

效果欣赏

当我们完成以上配置后,我们需要 重新配置 rime中州韵小狼毫输入方法,然后我们就可以在 五笔・拼音 输入方案中看到英文翻译,如下👇:
20240103155835
easyEnglish 输入方案中看到中文翻译,如下👇:
20240103160214

小结

文章分享介绍了在 rime中州韵小狼毫输入法中定义并配置实现中英互译滤镜的方法,共涉及脚本及字典文档9个,实现滤镜定义1个,配置输入方案2个,总体现实了既定的功能效果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt第三方库】QXlsx库——对 Excel 文件进行相关操作

0 前言 关键词&#xff1a;Qt&#xff1b;Excel&#xff1b;QXlsx&#xff1b;QInt 简介&#xff1a; QXlsx 是第三方开源的库&#xff0c;能够对 Excel 文件进行相关操作&#xff08;读写等&#xff09; 地址&#xff1a; QXlsx官网 QXlsx的Github主页 1 快速上手 对于第一次…

设置代理IP地址对网络有什么影响?爬虫代理IP主要有哪些作用?

在互联网的广泛应用下&#xff0c;代理IP地址成为了一种常见的网络技术。代理IP地址可以改变用户的上网行为&#xff0c;进而影响网络访问的速度和安全性。本篇文章将探讨设置代理IP地址对网络的影响&#xff0c;以及爬虫代理IP的主要作用。 首先&#xff0c;让我们来了解一下代…

【Java】实验三 抽象类与接口

实验名称 实验三 抽象类与接口 实验目的 1. 深刻理解抽象类、接口的意义。 2. 熟练掌握抽象类和接口的定义、继承抽象类以及实现接口的方法。 3. 理解和掌握多态。 实验内容 &#xff08;一&#xff09;抽象类实验&#xff1a;项目源码中新建一个ahpu.shape的包&a…

Transformer从菜鸟到新手(一)

引言 这是从Transformer到LLM(大语言模型)系列的第一篇文章&#xff0c;几乎所有的大语言模型都是基于Transformer结构&#xff0c;因此本文回顾一下Transformer的原理与实现细节&#xff0c;包括分词算法BPE的实现。最终利用从零实现的Transformer模型进行英中翻译。 本文主…

IOS:Safari无法播放MP4(H.264编码)

一、问题描述 MP4使用H.264编码通常具有良好的兼容性&#xff0c;因为H.264是一种广泛支持的视频编码标准。它可以在许多设备和平台上播放&#xff0c;包括电脑、移动设备和流媒体设备。 使用caniuse查询H.264兼容性&#xff0c;看似确实具有良好的兼容性&#xff1a; 然而…

Windows系统镜像检测修复建议

当通过镜像检测功能检测出Windows操作系统磁盘上有残留驱动项、系统中存在残留Xen驱动或者存在禁止安装驱动属性设置等异常检测项时&#xff0c;您可以参考本文的操作指导进行修复。 清理注册表残留驱动 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control注册表树包含了控…

c++基础(对c的扩展)

文章目录 命令空间引用基本本质引用作为参数引用的使用场景 内联函数引出基本概念 函数补充默认参数函数重载c中函数重载定义条件函数重载的原理 命令空间 定义 namespace是单独的作用域 两者不会相互干涉 namespace 名字 { //变量 函数 等等 }eg namespace nameA {int num;v…

TextView ClickableSpan 事件分发的坑

TextView 的 ClickableSpan 有两个坑&#xff1a; 默认情况下&#xff0c;点击 ClickableSpan 的文本时会同时触发绑定在 TextView 的监听事件&#xff1b;默认情况下&#xff0c;点击 ClickableSpan 的文本之外的文本时&#xff0c;TextView 会消费该事件&#xff0c;而不会传…

MySQL运维实战(2.2)忘记密码如何处理

作者&#xff1a;俊达 引言 当你突然忘记了一个普通用户的密码&#xff0c;而又想着通过管理员账号去改密码时&#xff0c;却猛的发现所有管理员账号的密码都离谱地被你忘了。嗨呀&#xff0c;这可真是个尴尬的大麻烦&#xff01;root账户通常是MySQL中的大boss&#xff0c;你…

Redis(一)

1、redis Redis是一个完全开源免费的高性能&#xff08;NOSQL&#xff09;的key-value数据库。它遵守BSD协议&#xff0c;使用ANSI C语言编写&#xff0c;并支持网络和持久化。Redis拥有极高的性能&#xff0c;每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数…

【LeetCode:69. x 的平方根 | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

程序员提问的艺术:28.4K Star指南,告别成为办公室讨厌鬼!

Github: https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way 原文&#xff1a;http://www.catb.org/~esr/faqs/smart-questions.html ✅为什么讨厌某些提问者 未自行尝试解决问题&#xff1a; ❌“怎么用Java写一个排序算法&#xff1f;” &#x1f44d;&#…

Plantuml之EBNF语法介绍(二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

java spring核心技术AOP面向切面编程图文并茂包含例子demo

base Aspect-oriented programming面向切面的程序设计用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect)场景: 权限认证,日志和事务处理.demo 基本背景 // 背景: 1. 模拟数据库操作增删改查 …

tomcat session cookie值设置逻辑

tomcat session cookie 值设置&#xff0c;tomcat jsessionid设置 ##调用request.getSession() Controller RequestMapping("/cookie") public class CookieController {RequestMapping("/tomcatRequest")ResponseBodypublic String tomcatRequest(HttpS…

CentOS 7 实战指南:文本处理命令详解

前言 在Linux系统中&#xff0c;文本处理是非常基础却又必不可少的一项技能。如果你正在使用CentOS系统&#xff0c;那么学会如何利用文本操作命令来高效地处理文本文件无疑将会是一个强有力的工具。 本篇文章将介绍一些最常用和最实用的文本操作命令&#xff0c;并通过详尽的…

医院配电能效监管方案

摘要:本文以医院能源监管系统为研究对象,采用智能化技术组建数据库、构建智能化的能耗信息管理系统,实现对医院的能源利用状况进行实时、准确的动态监管。具体而言,该系统建设的主要功能是对医院的能源消耗进行采集、上报、汇总与分析,并生成动态的数据和报表曲线,以及利用分析…

访问学者J1签证的申请流程

访问学者J1签证是许多人前往美国进行学术研究和文化交流的重要途径之一。申请J1签证需要经过一系列步骤和程序&#xff0c;让知识人网小编带大家来了解一下申请流程吧。 首先&#xff0c;申请者需要确认自己符合J1签证的资格要求。这包括被美国的赞助机构或组织接受&#xff0c…

uniapp中uview组件库的Input 输入框 的使用方法

目录 #平台差异说明 #基本使用 #输入框的类型 #可清空字符 #下划线 #前后图标 #前后插槽 API #Props #Events #Methods #Slots 去除fixed、showWordLimit、showConfirmBar、disableDefaultPadding、autosize字段 此组件为一个输入框&#xff0c;默认没有边框和样式…

mysql查询表里的重复数据方法:

1 2 3 4 INSERT INTO hk_test(username, passwd) VALUES (qmf1, qmf1),(qmf2, qmf11) delete from hk_test where usernameqmf1 and passwdqmf1 MySQL里查询表里的重复数据记录&#xff1a; 先查看重复的原始数据&#xff1a; 场景一&#xff1a;列出username字段有重读的数…