10月18号, W3C中网络平台孵化器小组(Web Platform Incubator Community Group)公布了HTML Sanitizer API的规范草案。这份草案用来解决浏览器如何解决XSS攻击问题。
网络安全中比较让开发者们头疼的一类是XSS跨站点脚本攻击。这种攻击通常指的是通过利用网页开发时留下的漏洞,即将恶意指令代码注入到网页,使用户加载并执行攻击者恶意制造的网页程序。
这些恶意代码没有经过过滤,与网站的正常代码混在一起,浏览器无法分辨哪些内容是可信的,恶意脚本就会被执行。而XSS攻击的核心有两个步骤:1、处理攻击者提交恶意代码;2、浏览器执行恶意代码。
为了解决在这两步恶意攻击中解决这个问题,通常有以下手段,
增加过滤条件
只进行纯前端行渲染,将数据和代码内容分开
对HTML充分转义
以上手段这些步骤繁琐,需要注意的内容也很多。为了让开发者更加便捷地解决XSS攻击的问题,浏览器现提供了原生的XSS攻击消毒能力。
HTML Sanitizer API——这份由谷歌、Mozilla和Cure53联手发起提供的API即将最终完成,通过这个浏览器原生API我们可以更加轻松地保护Web应用程序免受XSS的攻击。
接下来我们一起来了解一下这个安全API吧。
Sanitizer API简介
Sanitizer API可以让浏览器直接从网站动态更新的标记中删除恶意代码。当有恶意HTML字符串、和文档或文档片段对象想插入现有DOM之中,我们可以使用HTML Sanitizer API直接将这些内容清理。有点像电脑的安全卫士应用,可以清除风险内容。
使用Sanitizer API有以下三个优点:
减少Web应用程序中跨站点脚本的攻击次数
保证HTML输出内容在当前用户代理中安全使用
Sanitizer API 的可用性很强
Sanitizer API的特性
Sanitizer API为HTML字符串安全打开新世界大门,将所有的功能大致分类,可以分为以下三个主要特性:
1.对用户输入进行杀毒
Sanitizer API的主要功能是接受字符串并将其转换为更安全的字符串。这些转换后的字符串不会执行额外的JavaScript,并确保应用程序受到XSS攻击的保护。
2.浏览器内置
该库在浏览器安装的时候一同预装,并在发现bug或出现新的攻击时进行更新。相当于我们的浏览器有了内置的杀毒措施,无需导入任何外部库。
3.使用简洁安全
在使用了Sanitizer API之后,浏览器此时就有了一个强大又安全的解析器,作为一个成熟的浏览器,它知道如何处理DOM中每个元素的活动。相比之下,用JavaScript开发的外部解析器不仅成本高昂,同时很容易跟不上前端大环境的更新速度。
说完了这些使用上的亮点特性,让我们一起来看看这个API的具体用法。
Sanitizer API的使用
Sanitizer API使用Sanitizer()方法构造函数,Sanitizer类进行配置。
官方提供了三种基础清理方式:
1、清理隐藏上下文的字符串
Element.setHTML() 用于解析和清理字符串,并立即将其插入DOM,这个方法适用于目标DOM元素已知且HTML内容为字符串的情况。
const $div = document.querySelector('div')
const user_input = `Hello There ` // The user string.
const sanitizer = new Sanitizer() // Our Sanitizer
// We want to insert the HTML in user_string into a target element with id
// target. That is, we want the equivalent of target.innerHTML = value, except
// without the XSS risks.
$div.setHTML(user_input, sanitizer) // Hello There
2、清理给定上下的文字符串
Sanitizer.sanitizeFor() 用于解析、清理和准备稍后准备添加到DOM中的字符串。
适用于HTML内容是字符串,并且目标DOM元素类型已知(例如div、span)的情况。
const user_input = `Hello There `
const sanitizer = new Sanitizer()
// Later:
// The first parameter describes the node type this result is intended for.
sanitizer.sanitizeFor("div", user_input) // HTMLDivElement
需要注意的是, HTMLElement中 .innerHTML 的清理输出结果是字符串格式。
sanitizer.sanitizeFor("div", user_input).innerHTML // Hello There
3、清理请理节点
对于已经有用户控制的DocumentFragment,Sanitizer.sanitize()可以直接对DOM树节点进行清理。
// Case: The input data is available as a tree of DOM nodes.
const sanitizer = new Sanitizer()
const $userDiv = ...;
$div.replaceChildren(s.sanitize($userDiv));
除了以上提到的三种方式之外,SanitizerAPI通过删除和、过滤属性和标记来修改HTML字符串。
举个“栗子”。
删除某些标记(script, marquee, head, frame, menu, object, etc. )并保留content标签。
移除大多属性,只保留
标签和colspanson, 标签上的HREF。
筛选出可能导致风险脚本执行的内容。
默认设置中,这个安全API只用来防止XSS的出现。但是一些情况下我们也需要自定义自义设置,下面介绍一些常用的配置。
自定义消毒
创建一个配置对象,并在初始化Sanitizer API时将其传递给构造函数。
const config = {
allowElements: [],
blockElements: [],
dropElements: [],
allowAttributes: {},
dropAttributes: {},
allowCustomElements: true,
allowComments: true
};
// sanitized result is customized by configuration
new Sanitizer(config)
下面是一些常用方法:
allowElements 对指定输入进行保留
blockElements blockElements 删除内容中需要保留的部分
dropElements dropElements 删除指定内容,包括输入的内容
const str = `hello there `
new Sanitizer().sanitizeFor("div", str)
// hello there
new Sanitizer({allowElements: [ "b" ]}).sanitizeFor("div", str)
// hello there
new Sanitizer({blockElements: [ "b" ]}).sanitizeFor("div", str)
// hello there
new Sanitizer({allowElements: []}).sanitizeFor("div", str)
// hello there
allowAttributes和dropAttributes这两个参数可以自定义需要保留或者需要删除的部分。
const str = `hello there `
new Sanitizer().sanitizeFor("div", str)
// hello there
new Sanitizer({allowAttributes: {"style": ["span"]}}).sanitizeFor("div", str)
// hello there
new Sanitizer({dropAttributes: {"id": ["span"]}}).sanitizeFor("div", str)
// hello there
AllowCustomElements开启是否使用自定义元素
const str = `hello there `
new Sanitizer().sanitizeFor("div", str);
//
new Sanitizer({ allowCustomElements: true,
allowElements: ["div", "elem"]
}).sanitizeFor("div", str);
// hello there
如果没有进行任何配置,会直接使用默认配置内容。
这个API看起来能为我们解决不小少的问题,但是现在浏览器对其的支持还有限,更多功能还在持续完善中。我们也很期待看到功能更加完善的SanitizerAPI
对它感兴趣的小伙伴在Chrome93+中可以通过about://flags/#enable-experimental-web-platform-features
启用,Firefox中目前也在实验阶段,可以在about:config将dom.security.sanitizer.enabled
设为true来启用。
了解更多内容可以查看:https://developer.mozilla.org/en-US/docs/Web/API/HTML_Sanitizer_API
关于数据安全的担忧
根据 Verizon 2020 年数据泄露调查报告(Verizon Business,2020 年)显示,约90% 的数据泄露事件是由于跨站点脚本((XSS))和安全漏洞造成的。对于前端开发者而言,面对越发频繁的网络攻击,除了借助Sanitizer API等安全机制外,还可以考虑使用"数据与代码分离"的SpreadJS等前端表格控件。
你可能感兴趣的:(JavaScript Sanitizer API:原生WEB安全API出现啦)
鸿蒙开发:ArkTs语言变量和常量
前言本文代码案例基于Api13。正因为有了变量和常量,才有了程序之间的数据存储和管理,无论是变量还是常量,在命名的时候,一定要知名其意,能够很好的表达出所声明的意图,这一点非常的重要,千万不要以拼音或者简单的字母进行定义,不为别的,我害怕别人嘲笑你。变量(Variable)变量是一种用于存储数据的容器,并且其存储的数据值可以在程序执行过程中被改变,变量通常有一个名字(标识符),用于在程序中引用它。
AI工具如何改变编程学习?Trae IDE与Claude 3.5的实践案例
黑金IT
AI智能 AI编程 fasttify 人工智能 学习 ide
在现在这个到处都是电脑和手机的时代,AI工具正在变成编程学习和开发的好帮手。今天,咱们就来好好聊聊AI工具,特别是TraeIDE和Claude3.5这两个工具,在学习FastAPI和构建知识图谱的时候有多厉害,还有它们对编程行业会有什么影响。一、AI工具:编程学习与开发的好帮手AI工具在编程学习和开发里,作用可太大了。就像TraeIDE和Claude3.5,它们能像好朋友一样,在写代码的时候帮忙检
C++避坑指南-数组越界
飞天赤狐
C++避坑指南 c++
问题场景在访问数组时没有判断数组size,导致访问的索引号超过了数组size产生访问越界,程序出现异常行为示例代码实际情况比较多,我们来展开说明下原生数组访问越界#includeusingnamespacestd;voidArrayOut(){inta[]={23,33,1,32,5,9,10};for(inti=0;ia({23,33,1,32,5,9,10});for(inti=0;iempt
【绝对有用】C++ 数组越界 和并查集
fighting的码农(zg)-GPT
C++ c++ 算法 开发语言 数据结构
遇到了一个地址越界错误(heap-buffer-overflow),通常这是因为程序试图读取或写入超过分配给缓冲区的内存空间。根据AddressSanitizer的错误报告,问题出现在您的Solution::longestConsecutive函数中,位于solution.cpp文件的第17行。下面是一些调试和解决这个问题的步骤:识别问题代码:错误报告显示问题发生在Solution::longes
【论文解读】DSVP:通过动态扩展实现快速探索的双阶段视点规划器
Travis.X
论文解读 自动驾驶 动态规划 人工智能
标题:DSVP:Dual-StageViewpointPlannerforRapidExplorationbyDynamicExpansion作者:HongbiaoZhu,ChaoCao,YukunXia,SebastianScherer,JiZhang,andWeidongWang来源:https://frc.ri.cmu.edu/~zhangji/publications/IROS_2021.
装配式建筑4.0:城市发展的绿色引擎与智能未来
资讯新鲜事
大数据 人工智能
在城市化进程不断加速的今天,传统建筑业面临着效率低下、资源浪费、环境污染等多重挑战。装配式建筑4.0的出现,为城市可持续发展提供了革命性解决方案。这一建筑模式通过智能化、绿色化、数字化技术的深度融合,重构了建筑全生命周期的生产方式,成为推动城市高质量发展的核心动力。装配式建筑4.0通过工厂化预制和现场组装,大幅提高了建设效率,缩短了工期。相比传统建筑方式,装配式建筑4.0能够在工厂内完成大部分施工
vue的绑定
哥谭居民0001
vue.js 前端 javascript
一个组件就是一个对象或一个方法,在对象里创建的属性。肯定属于对象的内部字段,说白了只有这个对象去记他的属性的内存地址,在这个角度上去想父子组件的传值,传的不就是地址,也就是字段的引用父组A对象,在父组件里定义一个变量a,内存上就出现了a这个变量,而且只能通过A记录了q的地址,现在有一个弹出框组件B,我们把它抽成了组件,他也就成了个对象,B里面有个b变量,A不知到b的地址,肯定不能操作b,同样,B不
一个普通的vue权限管理方案-菜单权限控制
han_hanker
vue.js 前端 javascript
渲染左侧菜单0&&sidebar.name!==sidebar.children[0].name">{{sidebar.meta.title}}0">{{child1.meta.title}}{{child.name}}{{child1.name}}{{sidebar.name}}import{getUserFuncPerm}from'@/api/user'exportdefault{name:'
Spring Boot 外部化配置 (Externalized Configuration) 超详解:灵活管理应用配置,打造可移植、可扩展的应用
无眠_
spring boot 数据库 oracle
引言在SpringBoot应用开发中,配置管理是至关重要的环节。不同的环境(开发、测试、生产)通常需要不同的配置参数,例如数据库连接、端口号、日志级别、第三方API密钥等等。SpringBoot外部化配置(ExternalizedConfiguration)提供了一套强大的机制,允许我们将应用的配置从代码中解耦出来,并通过多种外部来源进行灵活管理,从而打造出可移植、可扩展、易于维护的SpringB
JAVA集合arraylist存取数据_ArrayList集合
月小烟
集合出现的原因数组存储数据是固定存储,当遇到要存储数据的个数不确定的时候数组就不满足了,集合就出现了集合存储数据的个数,可以随着数据量的变化而变化,不会造成越界或者大量的空间浪费存储数据的个数是可变的ArrayList:java.util包下底层维护了一个数组线程不同步(处理速度快)创建ArrayList对象的格式:ArrayList集合名字=newArrayList();:泛型,代表了集合中要存
RabbitMQ-死信交换机和死信队列
ui99tew1
rabbitmq 分布式
在RabbitMQ的使用过程中,死信交换机(DeadLetterExchange,简称DLX)和死信队列(DeadLetterQueue,简称DLQ)是解决消息处理失败的一种高效机制。这套机制不仅能帮助系统保证消息的可靠性,还能在消息处理出现问题时提供有效的错误处理和消息追踪方式。接下来,我将详细解释什么是死信队列和死信交换机,以及它们是如何工作的。死信队列和死信交换机的定义死信交换机是一种特殊的
Spring Boot 与 Couchbase 整合教程
嘵奇
提升自己 spring boot 后端 java
精心整理了最新的面试资料和简历模板,有需要的可以自行获取点击前往百度网盘获取点击前往夸克网盘获取SpringBoot与Couchbase整合教程环境要求JDK8+SpringBoot2.7.xCouchbaseServer7.xMaven/Gradle步骤1:创建SpringBoot项目使用start.spring.io创建项目,添加以下依赖:SpringWeb(可选,用于RESTAPI)Spri
【JavaScript】11-JS高阶技巧
beibeibeiooo
JavaScript【已完结】 javascript 前端 ecmascript es6
本文介绍JS中的一些高阶技巧。目录1.深浅拷贝1.1浅拷贝1.2深拷贝1.2.1通过递归实现1.2.2lodash/cloneDeep1.2.3JSON.stringify()2.异常处理2.1throw抛异常2.2try/catch捕获异常2.3debugger3.处理this3.1this指向3.1.1普通函数this3.1.2箭头函数的this3.2改变this3.2.1call方法改变3.
vue使用el-select下拉框匹配不到值的优化方案,el-select显示,当选择框的选项无法与选择框的value值匹配时,不显示value值的处理办法
Kingsaj
项目实操 vue.js elementui javascript
问题描述:新建表单数据,下拉框选项一般从接口获取的数据列表,比如后期某个数据关停了,这条数据就会被删除,导致我们取不到这条数据。就会出现el-select下拉框匹配不到值的情况。所以我们要处理这种情况的。复现步骤:数据字典新增一条【数据项】新添加一条工单数据绑定这个新增的【数据项】,提交保存操作。保存成功后,删除数据字典新增的【数据项】。然后点击当前新添加的工单数据编辑,操作,查看工单数据字典这一
使用Wolfram Alpha API在LangChain中的应用
shuoac
langchain python
在AI技术应用中,WolframAlpha以其强大的计算能力和信息检索功能,被广泛应用于各类智能系统中。本文将为您介绍如何结合LangChain使用WolframAlphaAPI,以实现功能强大的计算和信息查询服务。技术背景介绍WolframAlpha是由WolframResearch开发的问答引擎,它通过计算从外部数据源中获取答案,实现对事实性问题的解答。在开发智能应用时,我们可以利用Wolfr
QT-LINUX-Bluetooth蓝牙开发
大象荒野
嵌入式QT开发 笔记 qt
BlueToothAPIQT-BlueToothApiQtBluetooth6.8.2官方提供的蓝牙API不支持linux。D-Bus的API实现蓝牙确保系统中安装了BlueZ(版本需≥5.56),并且Qt已正确安装并配置了D-Bus支持。默默看了下自己的版本.....D-BUS的API也不支持。在D-Bus中,org目录是D-Bus对象路径(ObjectPath)的一部分,用于唯一标识系统中的对
如何使用百度云Qianfan进行AI应用开发
dgay_hua
百度云 人工智能 云计算 python
技术背景介绍百度云Qianfan是由百度公司提供的云服务,包含了云存储、文件管理、资源共享、以及第三方集成等功能。作为开发者,Qianfan支持多种AI应用开发组件,包括大语言模型(LLMs)、对话模型、嵌入模型和向量存储等。本文将重点介绍如何利用这些组件进行实际的AI应用开发。核心原理解析百度云Qianfan通过其丰富的API接口和云计算能力,为开发者提供了易于集成的AI开发环境。核心组件如Qi
API 测试
承悦不会玩
API
前提概要本文章主要用于分享API测试基础学习,以下是对API测试的一些个人解析,请大家结合参考其他文章中的相关信息进行归纳和补充。API测试描述什么是API?API是应用程序编程接口(ApplicationProgrammingInterface)的缩写。它是一组定义、协议和工具,用于让不同的软件应用程序之间进行交互和通信。以下从几个方面为你详细介绍API:功能:1.提供服务接口2.数据交互工作原
Deepseek-r1:14b+ScraperAPI实现联网本地大模型回答
FuWen_Hao
python 人工智能
文章目录前言一、Deekseek本地部署二、SerpAPI1.什么是SerpAPI?2.如何使用SerpAPI进行Web搜索三、实现Deepseek-r1:14b+ScraperAPI实现联网本地大模型回答1.Code前言我需要对本地的Deepseek-r1:14b进行提问,我发现它对于实时的问题,或者不知道的问题,会不回答或者乱回答。基于这点我想通过WebAPI传输更多的信息给到Deekseek
如何用PHP开发一个api数据接口
幽蓝计划
php
对于一个iOS开发者来说,我一直觉得会写接口是一件很酷的事情,因为它可以实时修改前台数据,而不像App一样需要更新版本和接受审核。更重要的是,它意味着你的技术完成了一个闭环,可以独自完成一整个项目的开发。PHP是我接触的第一个脚本语言,使用之后更是感觉PHP功能强大,开发过程非常友好方便,虽然之后也学习过Python、JavaScript等语言,但现在还是习惯使用PHP,下面就来介绍一下如何用PH
连接mysql:Error: connect ECONNREFUSED ::1:3306 at TCPConnectWrap
mysqlexpress
问题描述笔者把服务器上的node,从14升级到18再次使用express的连接池连接mysql的时候(mysql版本:2.18.1)出现连接不上的报错报错信息如下:Error:connectECONNREFUSED::1:3306atTCPConnectWrap.afterConnect[asoncomplete](node:net:1555:16)--------------------atPr
【HarmonyOS】鸿蒙中防止截屏和录屏(设置窗口为隐私模式)
m0_5南风
harmonyos 华为
防止截屏和录屏(设置窗口为隐私模式)手机应用防止截屏和录屏功能(开启隐私模式)能够有效防止敏感信息被恶意传播,减少盗版行为,确保合规性,增强用户对应用的信任感,并维护公平性,尤其在涉及个人信息和付费内容的场景中显得尤为重要。版本:API9以上主要方法:使用setWindowPrivacyMode设置窗口为隐私模式,注意:设置窗口而不是某一个页面,相当于整个应用设置了防截屏主要代码exportcla
使用浏览器原生API实现录屏功能
会说法语的猪
javascript javascript 开发语言 ecmascript
好早之前写了个小deme,本来都忘了,现在无意中又翻出来了,所以也来记录一下吧!废话不说了,直接上代码了:webRTCconstcontrol=document.querySelector('.control')control.addEventListener('click',start)asyncfunctionstart(){co
探索Astra DB与LangChain的集成:从向量存储到对话历史
eahba
数据库 langchain python
技术背景介绍AstraDB是DataStax推出的一款无服务器的向量数据库,基于ApacheCassandra®构建,并通过易于使用的JSONAPI提供服务。AstraDB的独特之处在于其强大的向量存储能力,这在处理自然语言处理任务时尤为突出。LangChain与AstraDB的集成为开发者提供了强大的工具链,从数据存储到语义缓存,再到自查询检索,帮助简化复杂的数据操作。核心原理解析LangCha
使用LangSmith追踪LLM令牌使用情况的指南
dgay_hua
java 服务器 前端 python
在将应用程序投入生产时,追踪令牌使用情况以计算成本是一个重要的步骤。本文将深入探讨如何从LangChain模型调用中获取这些信息。技术背景介绍在大语言模型(LLM)的应用中,令牌使用计数是估算模型调用成本的基础。LangSmith提供了一种有效的方式来帮助跟踪应用程序中的令牌使用。此外,使用回调机制可以在不同的API调用中进行监控,这对于复杂的应用程序尤其重要。核心原理解析通过在API调用中使用回
【AI大模型应用开发】【RAG评估】0. 综述:一文了解RAG评估方法、工具与指标
同学小张
大模型 人工智能 笔记 经验分享 gpt agi AIGC
大家好,我是同学小张,日常分享AI知识和实战案例欢迎点赞+关注,持续学习,持续干货输出。+v:jasper_8017一起交流,一起进步。微信公众号也可搜【同学小张】本站文章一览:前面我们学习了RAG的基本框架并进行了实践,我们也知道使用它的目的是为了改善大模型在一些方面的不足:如训练数据不全、无垂直领域数据、容易出现幻觉等。那么如何评估RAG的效果呢?本文我们来了解一下。文章目录推荐前置阅读0.R
COMP 315: Cloud Computing for E-Commerce
后端
Assignment1:JavascriptCOMP315:CloudComputingforE-CommerceFebruary20251IntroductionAcommontaskwhenbackendprogrammingisdatacleaning,whichistheprocessoftakinganinitialdatasetthatmaycontainerroneousorinco
Docker国内设置镜像加速下载地址
黯然神伤888
docker docker
原先当我们配置好阿里云的镜像服务后,通过dockerpull拉取镜像很方便,但是随着阿里这方面的相关政策调整后,发现很多拉取镜像都出现了问题,无法正常拉取,自己构建镜像又嫌烦。正好在简书上看到有个老铁发了其他docker加速地址,试了下挺管用,就转载保存下分享给大家,如果使用阿里云镜像服务无法拉起镜像的话,可以试试下面的镜像地址1、目的国内的镜像很容易被屏蔽,导致dockerpull失败,需要手动
Kotlin v2.1.20 发布,标准库又有哪些变化?
ForteScarlet
水文罢了 kotlin 开发语言 android
大家吼哇!就在三小时前,Kotlinv2.1.20发布了,更新的内容也已经在官网上更新:What’snewinKotlin2.1.20。我粗略地看了一下,下面为大家选出一些我比较感兴趣、且你可能也会感兴趣的内容。注意!这里只选了一些标准库中的一些API之类的变化,不会包括诸如编译器变动、工具(例如Gradle)变化等。AtomicAPI现在,在Kotlin的标准库中可以使用原子类啦!在之前,想要使
JDBC:Apache DBUtils的使用
恒奇恒毅
JavaSE
•commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。•API介绍:–org.apache.commons.dbutils.QueryRunner–org.apache.commons.dbutils.ResultSetHandler以及一些实现类–工
桌面上有多个球在同时运动,怎么实现球之间不交叉,即碰撞?
换个号韩国红果果
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