参考书籍:《正则指引》(1-3章)
以 Python 语言为学习工具,Python中常用的关于正则表达式的函数是 re.search()
,需要引入对应的包
import re
用法:re.search(pattern, string)
,pattern是字符串形式的正则表达式,string是需要匹配的字符串。
1. 普通字符组
在 pattern 两端加上 ^
和 $
,表示“定位到字符串的起始位置” 和 “定位到字符串的结束位置”,字符串前加 r
表示是原生字符串(Python特性)。
re.search(r"[0-9]", "2") != None # True
re.search(r"^[0-9]$", "a2") != None # False
上边 [0-9]
等价于 [0123456789]
,类似还有 [a-z]
,[A-Z]
。这些字符组可以混写在一起,比如匹配十六进制字符:
re.search(r"^[0-9a-zA-Z]$", "A") != None # True
上例中 -
不能表示横线字符,包括 [
]
^
$
都成为元字符,有特殊的意义,如果要表示字符本身,用到转义字符 \
,例如 [0\-9]
只表示字符 0
或 -
或 9
,当然,如果 -
不在09之间 [-09]
,就不用加转义字符,使用原则是,只有在表示特殊意义时使用转义字符才有效。 [
需要转义,但 ]
不需要转义。
排除型字符组
在字符串最前方加脱字符 ^
表示“在当前位置,匹配一个没有列出的字符”,[^0-9]
就表示0-9之外的字符,不包括空字符。
#匹配一个- 0 9之外的字符
re.search(r"^[^-09]$", "-") != None # True
re.search(r"^[^-09]$", "6") != None # False
字符组简记
\d
等价于 [0-9]
\w
等价于 [0-9a-zA-Z_]
\s
等价于 [ \t\r\n\v\f]
相对于 \d
、\w
、\s
,\D
、\W
、\S
是对应的排除型字符串。\s
能匹配的,\S
一定不能匹配,其他类似。
有趣的是,字符组 [\s\S]
匹配任意字符。
2. 量词
用 {m}
来表示匹配的字符重复个数,例如匹配6位邮政编码:
re.search(r"^\d{6}$", "101399") != None # True
re.search(r"^\d{6}$", "1013990") != None # False
re.search(r"^\d{6}$", "1a1399") != None # False
如果长度不确定,通用形式是 {m,n}
,需要注意的是:在 , 之后不能加空格!!!!
量词也有简记法,*
等价 {0,}
, +
等价 {1,}
,?
等价 {0,1}
量词
说明
{n}
之前的元素必须出现n次
{m,n}
之前的元素最少出现m次,最多出现n次
{m,}
之前的元素最少出现m次,出现次数无上限
{0,n}
之前的元素可以不出现,也可以出现,最多出现n次
点号
点号 .
可以匹配几乎所有的字符,换行符 \n
除外,如果要匹配所有的字符可以使用单行匹配模式或自制通配字符组:
#单行匹配模式
re.search(r"(?s)^.$", "\n") != None # True
#自制通配字符组
re.search(r"^[\s\S]$", "\n") != None # True
点号 .
不能滥用,否则会很容易出现意外结果。(P23) 例如,要匹配双引号""字符串,应该使用 "[^"]*"
,如果图省事使用 ".\*"
#字符串是 "hehehe"
print re.search(r"\".*\"", "\"hehehe\"").group(0)
"hehehe"
#字符串是 "aaa"bbb"
print re.search(r"\".*\"", "\"aaa\"bbb\"").group(0)
"aaa"bbb"
第二个出现错误!
忽略优先量词
用 [\s\S]<\tr> 匹配一段字符串中的所有的
:
#字符串是 aaa hhh bbb
print re.findall(r"[\s\S]* ", "aaa hhhh bbb ")
['aaa hhhh bbb ']
结果是,匹配了字符串最前的 和最后的
,因为之前的量词都可归类为匹配优先量词(贪婪量词),而我们想要的结果是匹配两个
,就用到了忽略优先量词。
对 [\s\S]*
来说,把 *
改为 *?
就是使用了忽略优先量词:
#字符串是 aaa hhh bbb
print re.findall(r"[\s\S]* ", "aaa hhhh bbb ")
['aaa ', 'bbb ']
匹配优先量词
忽略优先量词
*
*?
+
+?
?
??
{m,n}
{m,n}?
{m,}
{m,}?
{,n}
{,n}?
利用匹配优先量词拆解 Linux/Unix 路径 /usr/local/bin/python.py :
print re.search(r"^.*/", "/usr/local/bin/python.py").group(0)
/usr/bin/
print re.search(r"[^//]*$", "/usr/local/bin/python.py").group(0)
python.py
量词的转义
量词
转义形式
{n}
{n}
{m,n}
{m,n}
{m,}
{m,}
*
*
+
+
?
?
*?
\*?
+?
\+?
??
??
应用:匹配IP地址,匹配模式是 ([0-9]{1,3}\.){3}[0-9]{1,3}
print re.search(r"^([0-9]{1,3}\.){3}[0-9]{1,3}$", "192.10.0.223") != None # True
3. 括号
3.1 分组
其实,在上文匹配IP地址时,就已经使用了括号,很容易理解,就是把量词的作用范围扩展到括号内的所有表达式,而不仅仅是其前面的单个字符表达式。 例:匹配 E-mail 地址 E-mail由 @ 符号分成左右两部分,左边是用户名,右边是域名。用户名的匹配简单,主要由 [A-Z]
[a-z]
[0-9]
_
.
组成,所以,左边的匹配字符组是 [\w\.]{1,64}
。 右边的域名有可能是一级域名如 host.com,也有可能是多级域名,总之至少有一级。那么每多出的一级域名是有域名(由 [A-Z]
[a-z]
[0-9]
-
组成,可写为 [-\w]
)和 .
组成,所以匹配字符组为[-\w]{1,63}\.
,多出的域名有0个或多个可能,使用量词*
限定。所以,完整的匹配表达式是 [\w\.]{1,64}@([-\w]{1,63}\.)*[-\w]{1,63}
re.search(r"^[-\w\.]{1,64}@([-a-zA-Z0-9]{1,63}\.)*[-a-zA-Z0-9]{1,63}$", "[email protected] ") != None #True
3.2 多选结构
多选结构的形式是 (...|...)
,很好理解。 上文匹配IP的例子其实不准确,因为每一段的数字应该是在0-255之间,例子中如果大于255如998也会被匹配。此问题可以用多选结构解决。 匹配一段数值在0-255之间的文本,分下列几种情况:
说明
匹配
1位数
(00)?[0-9]
2位数
(0)?[0-9]{2}
3位数,第1位是1
1[0-9]{2}
3位数,第1位是2,第2位是0-4
2[0-4][0-9]
3位数,第1位是2,第2位是5
25[0-5]
所以,匹配一段数值在0-255之间的文本,表达式是 ((00)?[0-9]|(0)?[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])
说明
(option1|option2)
中如果么有出现括号()
,则将整个表达式视为一个多选结构,所以ab|cd
等价于 (ab|cd)
。但尽量还是加上括号()
,以防意外。
尽量不要出现既匹配 option1
又匹配 option2
的表达式。
3.3 引用分组
引用分组的作用是方便通过编号num的形式获取对应分组匹配的文本。 例如,诸如 205-04-28
这类表示日期的字符串,希望提取其中的年月日。
print re.search(r"(\d{4})-(\d{2})-(\d{2})", "2015-04-28").group(1) # 2015
print re.search(r"(\d{4})-(\d{2})-(\d{2})", "2015-04-28").group(2) # 04
print re.search(r"(\d{4})-(\d{2})-(\d{2})", "2015-04-28").group(3) # 28
分组从1开始。分组0默认代表整个表达式匹配的文本。即:
print re.search(r"(\d{4})-(\d{2})-(\d{2})", "2015-04-28").group(0) # 2015-04-28
如果存在括号的嵌套,编号的原则是:无论括号如何嵌套,分组的编号都是根据开括号出现顺序来基数;开括号是从左向右数第多少个开括号,整个括号分组的编号就是多少。
3.3.1 反向引用
形式:()\num
,num 表示所引用分组的编号 注意括号()
不是一定与 \num
挨着。
re.search(r"^([a-z])\1$", "aa") != None # True
re.search(r"^([a-z])\1$", "ab") != None # False
应用:可在解析HTML代码中匹配tag。比如匹配text
或title
中的内容。<(a-zA-Z0-9+)(\s[^>]+)?>[\s\S]*?\1>
你可能感兴趣的:(正则表达式学习笔记(一))
STM32串口通信详解
晟盾科技
嵌入式开发 stm32 嵌入式硬件 单片机
1.引言STM32是一款广泛使用的32位微控制器,以其高性能、低功耗和丰富的外设而著称。串口通信(UART/USART)是STM32中最常用的通信方式之一,用于实现与计算机或其他设备的简单数据交换。本文将详细介绍如何在STM32上配置和使用串口通信。2.基本概念2.1UARTvsUSART•UART(UniversalAsynchronousReceiver-Transmitter):通用异步收发
三生原理在三个关键历史断层中实现中西科学传统的创造性弥合?
葫三生
三生学派 算法 数学建模 人工智能 机器学习 量子计算
AI辅助创作:三生原理通过重构科学史的叙事逻辑,在三个关键历史断层中实现了中西科学传统的创造性弥合,其核心突破如下:一、科学方法论断层:实验主义与直觉理性的融合西方实验传统的局限欧洲科学革命依赖形式逻辑与实验验证(如伽利略斜面实验),但面临复杂系统建模的瓶颈。三生原理将《周易》“阴阳动态平衡”转化为参数化递归模型(如素性塔的三级筛除结构),在密码学应用中实现效率提升40%,证明东方直觉
Flutter 入门
TE-茶叶蛋
Flutter flutter
文章目录前言一、Flutter入门篇1.环境搭建2.Dart语言基础3.第一个Flutter应用4.核心组件与布局5.状态管理(基础)二、Flutter进阶篇1.深度状态管理2.路由与导航3.网络与数据持久化4.动画与自定义绘制5.插件与平台交互6.性能优化7.测试与调试三、高级实战技巧1.架构设计2.跨平台适配3.混合开发4.国际化与无障碍四、学习资源推荐五、学习建议前言以下是一份系统的Flut
视觉设计全栈解析:必知的8大核心方向与应用场景
在数字时代,视觉设计早已渗透到生活的方方面面——从手机APP界面到街头广告牌,从书籍的版式到产品的包装,这些统统离不开视觉设计的支撑!所以,了解视觉设计分类,不仅能帮助我们理清设计的边界与应用场景,更能让初学者找到学习的方向,让从业者精准定位创作目标哦。接下来,我们就来详细解析视觉设计分类中的8大常见类型,一起来享受这场视听盛宴吧~一、视觉识别图形设计在视觉设计分类中,视觉识别图形设计是构建品牌形
恶搞锁屏软件
梦遇苏喂
软件工程 安全
这是一个打包好的锁屏程序适用于恶搞同学老师密码在软件里使用此软件使电脑发生任何问题与作者无关!!!!!下载链接-百度https://pan.baidu.com/s/16DiF-Fv8us-lBSZgh6-W-A?pwd=awer下载链接-迅雷https://pan.xunlei.com/s/VOUZN96XqftxLLdlNjbtnmX-A1?pwd=fm4a
Flutter UI 测试
2401_89317650
flutter ui
在Flutter中,UI测试被称作集成测试。Flutter集成测试类似iOS的XCUITest或Android的Expresso一样来执行UI自动化测试。Flutter的集成测试在一个单独的环境运行,可以运行在真实的设备或者模拟器上面。Flutter提供了一个flutter_driver包来编写UI测试。Flutter应用程序的UI测试是如何执行UI测试:FlutterUI测试作为黑盒运行,与主应
深入理解 CSS 选择器:从基础到高级
蓝精灵001
css 前端 面试 职场和发展 学习 html AI编程
CSS(层叠样式表)是网页设计中不可或缺的一部分,它通过选择器来定位HTML文档中的元素,并为这些元素定义样式。掌握CSS选择器是前端开发的核心技能之一。本文将从最基础的选择器讲起,逐步深入到高级、复杂的结构和伪类/伪元素选择器,帮助你全面掌握CSS选择器的使用。一、什么是CSS选择器?CSS选择器是一种模式,用于匹配文档树中的一个或多个元素。通过选择器,你可以精确地控制哪些HTML元素应该应用特
Redis GEO vs MongoDB 地理空间 关键指标对比
方案对比:RedisGEO:优点:性能极快(微秒级)简单易用,支持距离计算缺点:仅支持位置查询,无法直接关联其他属性(如商家类型)需要额外存储详细信息(需要二次查询MySQL或MongoDB)数据同步:需要维护数据一致性(当商家位置更新时,需要同步更新Redis)MongoDB地理空间索引:优点:支持地理位置+属性联合查询(如查找附近且类型为“餐饮”的商家)数据与业务模型存储在一起,避免二次查询提
STM32中的UART详解
前言在嵌入式开发中,串口通信是最常用的调试与数据传输方式之一。UART(UniversalAsynchronousReceiver/Transmitter,通用异步收发传输器)作为一种简单、可靠的异步通信协议,被广泛应用于STM32与传感器、上位机、蓝牙模块等外设的交互场景。本文将从协议基础到STM32实战,全面解析UART协议在STM32中的应用,包含硬件设计、软件配置、实战案例及调试技巧,适合
MongoDB 数据库的备份与恢复
qq_33928223
数据库管理 数据库 mongodb oracle
以下是MongoDB中使用mongodump和mongorestore进行数据库逻辑备份与恢复的完整指南:一、mongodump备份工具1.核心功能逻辑备份:将MongoDB中的数据以BSON/JSON格式导出到本地文件。灵活性:支持按数据库、集合、条件过滤备份。低影响:默认在后台运行,对线上服务影响较小。2.常用命令及参数mongodump\--host\#目标实例地址(默认localhost:
Node.js REPL 教程
红衣大叔
nodejs帮助文档 node.js vim 编辑器
Node.jsREPL(Read-Eval-PrintLoop)是一个交互式环境,允许你直接输入和执行JavaScript代码,无需创建文件。它是学习Node.js、测试代码片段和调试的强大工具。启动REPL有几种方式可以启动Node.jsREPL:直接运行node命令:node在特定文件目录下启动(如果需要访问当前目录的模块):node使用环境变量(如设置特殊选项):NODE_REPL_HIST
编译ADI NO-OS工程
1,先在WINdows下安装gitbush可以参考下面博客https://blog.csdn.net/Natsuago/article/details/1456475362.安装make工具可参考一下链接https://blog.csdn.net/weixin_40727233/article/details/1103532403,参考ADI官方链接https://wiki.analog.com/
网络安全概论——身份认证
陇西李氏
web安全 网络 安全 网络安全 服务器
一、身份证明身份证明可分为以下两大类身份验证——“你是否是你所声称的你?”身份识别——“我是否知道你是谁?”身份证明系统设计的三要素:安全设备的系统强度用户的可接受性系统的成本实现身份证明的基本途径所知:个人所知道的或所掌握的知识,如密码、口令等。所有:个人所具有的东西,如身份证、护照、信用卡、钥匙等。个人特征:如指纹、笔迹、声纹、视网膜、虹膜、DNA及个人一些动作方面的特征等。二、口令认证系统口
WebService SendTimeout 超时问题
SKY徐
webservice binding behavior security wcf .net
System.TimeoutException:请求通道在等待00:01:00以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的SendTimeout值。分配给此操作的时间可能是更长超时的一部分。WCF中解决方案:1)首先保证客户端每次建立的连接在使用完成后进行关闭.即调用Close()方法,否则此连接会在设置的会话(一般为10分钟)后才自动关闭.期间任何客户端也无法使用此服务.2)如果
PyQt5—QTextEdit 学习笔记
寄思~
Python——PyQt5笔记 qt 学习 笔记 python
第二章控件学习一、QTextEdit基础认知QTextEdit是PyQt/PySide框架中用于处理富文本内容的强大控件,它不仅支持纯文本编辑,还能处理HTML、图片等复杂内容,是开发文本编辑器、日志查看器等应用的核心组件。二、最简单的QTextEdit实现下面是一个创建QTextEdit并显示的基础案例,适合零基础入门:importsysfromPyQt5.QtWidgetsimportQApp
Docker 容器全生命周期操作指南
以下是Docker容器全生命周期操作指南,按步骤清晰划分,涵盖从镜像加载到容器销毁的完整流程:一、镜像加载与验证1.从.tar文件加载镜像sudodockerload-iubuntu18.04-boost1.88-cmake3.27-git_1.0.tar2.查看已加载的镜像sudodockerimages输出示例:REPOSITORYTAGIMAGEIDCREATEDSIZEubuntu18.0
解决Nginx安全漏洞【CVE-2018-16844、CVE-2019-9511、CVE-2021-3618、CVE-2018-16843、CVE-2021-23017】等问题
名字咋这么难起捏
服务器配置 nginx 运维
前言最近网信办通报某服务器存在nginx[CVE-2018-16844、CVE-2019-9511、CVE-2021-3618、CVE-2018-16843、CVE-2021-23017、CVE-2019-9513]等漏洞,需要进行修复,查阅了下对应的资料发现这些漏洞是是Nginx的HTTP/2模块中的一个安全问题。此漏洞允许攻击者通过特定的HTTP/2请求构造,可能导致服务器崩溃或执行拒绝服务(
mysql下载不是运作宝教程_MySQL下载与安装 8.0详细版
喵琛CC
mysql下载不是运作宝教程
MySQL下载与安装一、下载地址:https://dev.mysql.com/downloads/mysql/当前最新是8.0版本,我选择上一个最新的mysql-5.7.24-winx64.zip二、安装MySQL安装文件分两种.msi和.zip,.msi需要安装zip格式是自己解压,解压缩之后其实MySQL就可以使用了,但是要进行环境变量配置zip格式是自己解压我的电脑->属性->高级->环境变
管理大数据存储的十大技巧
weixin_34238633
大数据 数据库 运维
在1990年,每一台应用服务器都倾向拥有直连式系统(DAS)。SAN的构建则是为了更大的规模和更高的效率提供共享的池存储。Hadoop已经逆转了这一趋势回归DAS。每一个Hadoop集群都拥有自身的——虽然是横向扩展型——直连式存储,这有助于Hadoop管理数据本地化,但也放弃了共享存储的规模和效率。如果你拥有多个实例或Hadoop发行版,那么你就将得到多个横向扩展的存储集群。而我们所遇到的最大挑
WebService SendTimeout 超时
weixin_30827565
System.TimeoutException:请求通道在等待00:01:00以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的SendTimeout值。分配给此操作的时间可能是更长超时的一部分。WCF中解决方案:1)首先保证客户端每次建立的连接在使用完成后进行关闭.即调用Close()方法,否则此连接会在设置的会话(一般为10分钟)后才自动关闭.期间任何客户端也无法使用此服务.2)如果
求平方根:牛顿迭代法
mjfztms
leetcode 算法
应用牛顿迭代法求解方程近似解,收敛速度很快牛顿迭代法求解平方根给你一个非负整数x,计算并返回x的算术平方根n,结果只保留整数部分。算法流程图由题意得,n2=xn^2=xn2=x,即为对f(n)=n2−xf(n)=n^2-xf(n)=n2−x求解。第一步:易得:x2−x1=0−f(x1)f′(x1)x_2-x_1=\frac{0-f(x_1)}{f'(x_1)}x2−x1=f′(x1)0−f(x1)
深度模型训练,加速数据读取遇到显卡跑不满的问题
不是吧这都有重名
遇到的问题 llama 人工智能 LLM python
实测在pytorch的dataloader中使用prefetch_factor参数的时候,如果数据在机械硬盘上显卡始终是跑不满的,瓶颈在数据预加载速度上,当数据放在固态硬盘的时候就可以跑满。问题排查过程:一直在跑模型,但是数据量比较大,之前有段时间还是比较头疼显卡跑不满的。后来直接用钞能力,加了内存条,将数据缓存后一次性读到内存中终于可以跑满了,然后后面就一直没管这个了,唯一的缺点就是每次开始训练
《实战!用Java+Spring构建高并发电商秒杀系统(小学生都能懂的超详细教程)
大家好呀!今天咱们来聊一个特别刺激的话题——如何用Java和Spring框架打造一个能抗住百万流量的电商秒杀系统!⚡想象一下双11零点,几万人同时抢购限量商品,你的系统会不会直接"扑街"?别担心,跟着我一步步来,保证你能做出一个稳如老狗的秒杀系统!一、秒杀系统到底难在哪?首先咱们得明白,秒杀系统为啥这么难搞?主要是这四大"怪兽":高并发:几万人同时点"立即购买",服务器要炸超卖问题:库存就100件
【网络信息安全】身份认证
身份认证主要内容===========================================================================身份认证的概念:用户要向系统证明他就是他所声称的那个人。识别:明确访问者的身份(信息公开)验证:对访问者声称的身份进行确认(信息保密)身份认证的作用:限制非法用户访问网络资源。安全系统中的第一道关卡,是其他安全机制基础。一旦被攻破,其
模型微调方法Prefix-Tuning
ballball~~
大模型 人工智能 算法 大数据
简介:个人学习分享,如有错误,欢迎批评指正。随着大规模预训练语言模型(如GPT系列、BERT等)的广泛应用,如何高效、经济地针对特定任务对这些模型进行微调(Fine-Tuning)成为研究热点。传统的微调方法通常需要调整模型的大量参数,导致计算资源消耗大、适应新任务的速度慢。为了解决这一问题,Prefix-Tuning(前缀调优)作为一种高效的微调技术被提出,旨在通过引入少量可训练的前缀参数,达到
HTTP 请求已超过分配的超时。为此操作分配的时间可能是较长超时的一部分
SilverLight调用WEBSERVICE时对HTTP请求已超过分配的超时。为此操作分配的时间可能是较长超时的一部分。解决方案:在SilverLight的ServiceReferences.ClientConfig中对超时进行设置。openTimeout="00:10:00"receiveTimeout="00:10:00"sendTimeout="00:10:00"closeTimeout=
设计模式系列(10):结构型模式 - 桥接模式(Bridge)
系列导读:在学习了接口适配后,我们来看如何处理抽象与实现的分离问题。桥接模式解决的是"多维度变化"的设计难题。解决什么问题:将抽象部分与实现部分分离,使它们都可以独立变化。避免在多个维度上变化时出现类爆炸问题。想象一下,你要设计一个图形绘制系统,既要支持不同的形状(圆形、矩形),又要支持不同的绘制方式(Windows绘制、Linux绘制)。如果用继承,你需要WindowsCircle、LinuxC
牛顿迭代法求解平方根
Young_Gy
一个实例迭代简介牛顿迭代法牛顿迭代法简介简单推导泰勒公式推导延伸与应用一个实例//java实现的sqrt类和方法publicclasssqrt{publicstaticdoublesqrt(doublen){if(nerr*t)t=(n/t+t)/2;returnt;}publicstaticvoidmain(String[]args){sqrta=newsqrt();System.out.pri
推荐算法(推广搜)——广告和推荐有什么不同?
导语近几年新兴起一个行业:推广搜。即推荐、广告、搜索算法的简称。各大厂都隐隐将其作为公司核心技术来发展。此文将带领大家探秘广告和推荐有什么区别以及其相似处。再此强调一下,广告算法里面的推荐广告和自然推荐结果里的推荐系统进行对比,但因为广告算法里面还有“搜索广告”,搜索广告和推荐系统差异性就太大了,这里不做讨论。一、不同点1.1本质不同推荐广告和自然推荐本质中要处理的群体和衡量的利益完全不一样。(图
高级汇编语言编程技巧与优化
代码世界探索者
汇编语言详解 汇编 linux
一、宏和宏指令1.宏的基本概念•定义:宏是一种文本替换机制。它允许程序员定义一个宏名,并将一组指令或代码片段与该宏名关联起来。在代码中使用宏名时,汇编器会将其替换为对应的指令或代码片段。2.宏的定义和使用(1)定义宏在汇编语言中,宏的定义通常使用MACRO指令开始,以ENDM指令结束。宏的定义包括宏名和一组指令或代码片段。语法:宏名MACRO参数1,参数2,...指令1指令2...ENDM示例:;
桌面上有多个球在同时运动,怎么实现球之间不交叉,即碰撞?
换个号韩国红果果
html 小球碰撞
稍微想了一下,然后解决了很多bug,最后终于把它实现了。其实原理很简单。在每改变一个小球的x y坐标后,遍历整个在dom树中的其他小球,看一下它们与当前小球的距离是否小于球半径的两倍?若小于说明下一次绘制该小球(设为a)前要把他的方向变为原来相反方向(与a要碰撞的小球设为b),即假如当前小球的距离小于球半径的两倍的话,马上改变当前小球方向。那么下一次绘制也是先绘制b,再绘制a,由于a的方向已经改变
《高性能HTML5》读后整理的Web性能优化内容
白糖_
html5
读后感
先说说《高性能HTML5》这本书的读后感吧,个人觉得这本书前两章跟书的标题完全搭不上关系,或者说只能算是讲解了“高性能”这三个字,HTML5完全不见踪影。个人觉得作者应该首先把HTML5的大菜拿出来讲一讲,再去分析性能优化的内容,这样才会有吸引力。因为只是在线试读,没有机会看后面的内容,所以不胡乱评价了。
[JShop]Spring MVC的RequestContextHolder使用误区
dinguangx
jeeshop 商城系统 jshop 电商系统
在spring mvc中,为了随时都能取到当前请求的request对象,可以通过RequestContextHolder的静态方法getRequestAttributes()获取Request相关的变量,如request, response等。 在jshop中,对RequestContextHolder的
算法之时间复杂度
周凡杨
java 算法 时间复杂度 效率
在
计算机科学 中,
算法 的时间复杂度是一个
函数 ,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的
字符串 的长度的函数。时间复杂度常用
大O符号 表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是
渐近 的,它考察当输入值大小趋近无穷时的情况。
这样用大写O()来体现算法时间复杂度的记法,
Java事务处理
g21121
java
一、什么是Java事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状
Linux awk命令详解
510888780
linux
一. AWK 说明
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据的方式:它逐行扫描文件,从第一行到
android permission
布衣凌宇
Permission
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" ></uses-permission>允许读写访问"properties"表在checkin数据库中,改值可以修改上传
<uses-permission android:na
Oracle和谷歌Java Android官司将推迟
aijuans
java oracle
北京时间 10 月 7 日,据国外媒体报道,Oracle 和谷歌之间一场等待已久的官司可能会推迟至 10 月 17 日以后进行,这场官司的内容是 Android 操作系统所谓的 Java 专利权之争。本案法官 William Alsup 称根据专利权专家 Florian Mueller 的预测,谷歌 Oracle 案很可能会被推迟。 该案中的第二波辩护被安排在 10 月 17 日出庭,从目前看来
linux shell 常用命令
antlove
linux shell command
grep [options] [regex] [files]
/var/root # grep -n "o" *
hello.c:1:/* This C source can be compiled with:
Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)
百合不是茶
sax技术 Java解析xml文档 dom技术 XML配置数据库连接
XML配置数据库文件的连接其实是个很简单的问题,为什么到现在才写出来主要是昨天在网上看了别人写的,然后一直陷入其中,最后发现不能自拔 所以今天决定自己完成 ,,,,现将代码与思路贴出来供大家一起学习
XML配置数据库的连接主要技术点的博客;
JDBC编程 : JDBC连接数据库
DOM解析XML: DOM解析XML文件
SA
underscore.js 学习(二)
bijian1013
JavaScript underscore
Array Functions 所有数组函数对参数对象一样适用。1.first _.first(array, [n]) 别名: head, take 返回array的第一个元素,设置了参数n,就
plSql介绍
bijian1013
oracle 数据库 plsql
/*
* PL/SQL 程序设计学习笔记
* 学习plSql介绍.pdf
* 时间:2010-10-05
*/
--创建DEPT表
create table DEPT
(
DEPTNO NUMBER(10),
DNAME NVARCHAR2(255),
LOC NVARCHAR2(255)
)
delete dept;
select
【Nginx一】Nginx安装与总体介绍
bit1129
nginx
启动、停止、重新加载Nginx
nginx 启动Nginx服务器,不需要任何参数u
nginx -s stop 快速(强制)关系Nginx服务器
nginx -s quit 优雅的关闭Nginx服务器
nginx -s reload 重新加载Nginx服务器的配置文件
nginx -s reopen 重新打开Nginx日志文件
spring mvc开发中浏览器兼容的奇怪问题
bitray
jquery Ajax springMVC 浏览器 上传文件
最近个人开发一个小的OA项目,属于复习阶段.使用的技术主要是spring mvc作为前端框架,mybatis作为数据库持久化技术.前台使用jquery和一些jquery的插件.
在开发到中间阶段时候发现自己好像忽略了一个小问题,整个项目一直在firefox下测试,没有在IE下测试,不确定是否会出现兼容问题.由于jquer
Lua的io库函数列表
ronin47
lua io
1、io表调用方式:使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述
io表同样提供三种预定义的文件描述io.stdin,io.stdout,io.stderr
2、文件句柄直接调用方式,即使用file:XXX()函数方式进行操作,其中file为io.open()返回的文件句柄
多数I/O函数调用失败时返回nil加错误信息,有些函数成功时返回nil
java-26-左旋转字符串
bylijinnan
java
public class LeftRotateString {
/**
* Q 26 左旋转字符串
* 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
* 如把字符串abcdef左旋转2位得到字符串cdefab。
* 请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
*/
pu
《vi中的替换艺术》-linux命令五分钟系列之十一
cfyme
linux命令
vi方面的内容不知道分类到哪里好,就放到《Linux命令五分钟系列》里吧!
今天编程,关于栈的一个小例子,其间我需要把”S.”替换为”S->”(替换不包括双引号)。
其实这个不难,不过我觉得应该总结一下vi里的替换技术了,以备以后查阅。
1
所有替换方案都要在冒号“:”状态下书写。
2
如果想将abc替换为xyz,那么就这样
:s/abc/xyz/
不过要特别
[轨道与计算]新的并行计算架构
comsci
并行计算
我在进行流程引擎循环反馈试验的过程中,发现一个有趣的事情。。。如果我们在流程图的每个节点中嵌入一个双向循环代码段,而整个流程中又充满着很多并行路由,每个并行路由中又包含着一些并行节点,那么当整个流程图开始循环反馈过程的时候,这个流程图的运行过程是否变成一个并行计算的架构呢?
重复执行某段代码
dai_lm
android
用handler就可以了
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run() {
update();
handler.postDelayed(this, 5000);
}
};
开始计时
h
Java实现堆栈(list实现)
datageek
数据结构——堆栈
public interface IStack<T> {
//元素出栈,并返回出栈元素
public T pop();
//元素入栈
public void push(T element);
//获取栈顶元素
public T peek();
//判断栈是否为空
public boolean isEmpty
四大备份MySql数据库方法及可能遇到的问题
dcj3sjt126com
DB backup
一:通过备份王等软件进行备份前台进不去?
用备份王等软件进行备份是大多老站长的选择,这种方法方便快捷,只要上传备份软件到空间一步步操作就可以,但是许多刚接触备份王软件的客用户来说还原后会出现一个问题:因为新老空间数据库用户名和密码不统一,网站文件打包过来后因没有修改连接文件,还原数据库是好了,可是前台会提示数据库连接错误,网站从而出现打不开的情况。
解决方法:学会修改网站配置文件,大多是由co
github做webhooks:[1]钩子触发是否成功测试
dcj3sjt126com
github git webhook
转自: http://jingyan.baidu.com/article/5d6edee228c88899ebdeec47.html
github和svn一样有钩子的功能,而且更加强大。例如我做的是最常见的push操作触发的钩子操作,则每次更新之后的钩子操作记录都会在github的控制板可以看到!
工具/原料
github
方法/步骤
">的作用" target="_blank">JSP中 的作用
蕃薯耀
JSP中<base href="<%=basePath%>">的作用
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
linux下SAMBA服务安装与配置
hanqunfeng
linux
局域网使用的文件共享服务。
一.安装包:
rpm -qa | grep samba
samba-3.6.9-151.el6.x86_64
samba-common-3.6.9-151.el6.x86_64
samba-winbind-3.6.9-151.el6.x86_64
samba-client-3.6.9-151.el6.x86_64
samba-winbind-clients
guava cache
IXHONG
cache
缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。
缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资源的
Query的开始--全局变量,noconflict和兼容各种js的初始化方法
kvhur
JavaScript jquery css
这个是整个jQuery代码的开始,里面包含了对不同环境的js进行的处理,例如普通环境,Nodejs,和requiredJs的处理方法。 还有jQuery生成$, jQuery全局变量的代码和noConflict代码详解 完整资源:
http://www.gbtags.com/gb/share/5640.htm jQuery 源码:
(
美国人的福利和中国人的储蓄
nannan408
今天看了篇文章,震动很大,说的是美国的福利。
美国医院的无偿入院真的是个好措施。小小的改善,对于社会是大大的信心。小孩,税费等,政府不收反补,真的体现了人文主义。
美国这么高的社会保障会不会使人变懒?答案是否定的。正因为政府解决了后顾之忧,人们才得以倾尽精力去做一些有创造力,更造福社会的事情,这竟成了美国社会思想、人
N阶行列式计算(JAVA)
qiuwanchi
N阶行列式计算
package gaodai;
import java.util.List;
/**
* N阶行列式计算
* @author 邱万迟
*
*/
public class DeterminantCalculation {
public DeterminantCalculation(List<List<Double>> determina
C语言算法之打渔晒网问题
qiufeihu
c 算法
如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后任意一天,输出该渔夫是在打渔还是在晒网。
代码如下:
#include <stdio.h>
int leap(int a) /*自定义函数leap()用来指定输入的年份是否为闰年*/
{
if((a%4 == 0 && a%100 != 0
XML中DOCTYPE字段的解析
wyzuomumu
xml
DTD声明始终以!DOCTYPE开头,空一格后跟着文档根元素的名称,如果是内部DTD,则再空一格出现[],在中括号中是文档类型定义的内容. 而对于外部DTD,则又分为私有DTD与公共DTD,私有DTD使用SYSTEM表示,接着是外部DTD的URL. 而公共DTD则使用PUBLIC,接着是DTD公共名称,接着是DTD的URL.
私有DTD
<!DOCTYPErootSYST