stenciljs
是用于构建可重用、可扩展的设计系统的工具链。生成在每个浏览器中运行的小型、超快且 100% 基于标准的 Web Component。
更对介绍请参考官方网站
pnpm create stencil #如下图
使用其它的包管理器,
npm init stencil
yarn create stencil
pnpm generate web-text #web-text是组件名
命令执行后,如下图
确定后,如下图
创建组建后的目录如下图
pnpm run start #包含运行测试
pnpm run build #构建组件
使用tsx 进行开发,类似react 的生命周期模型,类似ng 的开发方式(装饰器,注解。。。)
import { Component, Prop, h } from '@stencil/core';
import { format } from '../../utils/utils';
@Component({
tag: 'my-component', // 组件名称
styleUrl: 'my-component.css',
shadow: true,
})
export class MyComponent {
/**
* The first name
*/
@Prop() first: string;
/**
* The middle name
*/
@Prop() middle: string;
/**
* The last name
*/
@Prop() last: string;
private getText(): string {
return format(this.first, this.middle, this.last);
}
render() {
return <div>Hello, World! I'm {this.getText()}</div>;
}
}
Css 样式
div {
display: block;
font-size: 30px;
background-color: blueviolet;
color: white;
}
改后的效果
第一部分至此结束了。
前言 锁是最常用的同步工具之一。可以使用锁来保护代码的关键部分,该部分代码段一次只能访问一个线程。例如,关键部分可能会操作特定数据结构或使用一次最多支持一个客户端的某些资源。通过关键部分枷锁,可以排除其他线程进行可能影响代码正确性的更改。锁的分类表4-1列出了程序员常用的一些锁。OSX和iOS为大多数这些锁类型提供了实现,但不是全部。对于不受支持的锁类型,描述列解释了这些锁没有直接在平台上实现的原因。表4-1锁类型注意:大多数类型的锁还包含内存屏障,以确保在进入关键部分之前完成之前的任何加载和存储指令。其实基本的锁就包括了三类自旋锁互斥锁读写锁,其他的比如条件锁,递归锁,信号量都是上层的封装和实现!锁的使用锁是线程编程的基本同步工具。锁使你能够轻松保护大部分代码,以确保该代码的正确性。OSX和iOS为所有应用程序类提供了基本的互斥锁。Foundation框架为特殊情况定义了互斥锁的一些额外变体。下面我们看一下如何使用其中几种类型的锁。使用POSIX互斥锁POSIX互斥锁非常容易从任何应用程序中使用。要创建互斥锁,请声明并初始化pthread_mutex_t结构。要锁定和解锁互斥锁,请使
发现更多精彩这是今天我们在技术群里面讨论的一个Java知识点,讨论的相当激烈,由于对这一块使用的比较少,所以对这一块多少有些盲区。这篇文章总结了所讨论的内容,希望这篇文章对你有所帮助。在Java开发中,对象拷贝或者说对象克隆是常有的事,对象克隆最终都离不开直接赋值、浅拷贝、深拷贝这三种方式,其中直接赋值应该是我们最常用的一种方式吧,对于浅拷贝和深拷贝可能用的少,所以或多或少存在一些误区,这篇文章会详细的介绍这三种对象克隆方式。前置知识值类型:Java的基本数据类型,例如int、float 引用类型:自定义类和Java包装类(string、integer)复制直接赋值直接赋值是我们最常用的方式,在我们代码中的体现是Persona=newPerson();Personb=a,是一种简单明了的方式,但是它只是拷贝了对象引用地址而已,并没有在内存中生成新的对象,我们可以通过下面这个例子来证明这一点//person对象 publicclassPerson{ //姓名 privateStringname; //年龄 privateintage; //邮件 privateStringemail; /
策划&撰写:巫盼最近,端测的AI推理芯片市场一片火热,英伟达和英特尔正面对垒,初创企业如履寒冰。而云上AI训练市场,已经从早期的GPU一统天下,发展到如今多方势力割据的局面。作为最早吃到AI红利的科技公司之一,英伟达在面对连续几个季度的营收增速下滑后,不得不从数据中心下沉到边缘和端上,发力更多场景。在软硬件生态上,英伟达堪称是AI硬件厂商的标杆,如今再回望显卡巨头的人工智能转型之路,多次起落,颇为曲折。“意外”的开始在很长的一段时间内,外界对英伟达有两个印象:显卡大厂、皮衣老黄。一个是英伟达的核心GPU产品,一个是英伟达的形象代言人。从1993年成立到成为和AMD、英特尔抗衡的半导体巨头,英伟达经历了几个关键的阶段:一是图形处理器突围期,拿下大半的游戏显卡市场;二是AI巅峰期,借着AI和挖矿一鸣惊人,三是AI转型后时期,从高处下沉后的再反思。早年的英伟达凭借GeForce系列显卡在游戏市场所向披靡,和成立于1969年的AMD同坐一把交椅,N卡和A卡孰优孰劣之争也是游戏界老生常谈的话题。在此期间,英伟达既遇到显卡质量事故,面临合作伙伴高额的赔偿,也遭到竞争对手恶意拒绝技术专利共享
什么是证书透明度(简称CT)? 证书透明度(CertificateTransparency)是谷歌力推的一项拟在确保证书系统安全的透明审查技术。其目标是提供一个开放的审计和监控系统,可以让任何域名的所有者,确定CA证书是否被错误签发或恶意使用。TLS的缺点是你的浏览器隐性包含了一个大型受信任CA列表。如果任何这些CA恶意为域创建新证书,则你的浏览器都会信任它。CT为TLS证书信任提供了额外的安全保障:即公司可以监控谁为他们拥有的域创建了证书。此外,它还允许浏览器验证给定域的证书是否在公共日志记录中。 而这些日志对于渗透测试人员或红队而言,无疑是座信息的宝库。 ct-exposer能为我们做什么? ct-exposer将查询给定域的CT日志,然后尝试对域进行DNS查找以获取DNS中存在的域。根据我的经验,到目前为止ct-exposer为我查找到了许多使用“site:domain.com”谷歌搜索找不到的子域。请记住,无法解析的域可以是旧域或仅是内部域(例如:你需要访问内部DNS服务器才能解析它们)。 安装依赖 Python3,gevent,requests和urllib3,pip3ins
昨天在调试项目时,意外发现一个奇怪的问题,实在不知道如何准确描述,所以随便起了个标题。项目中有一个wcf供jquery调用,wcf示例代码如下:/**////<summary> ///测试 ///</summary> ///<returns></returns> [OperationContract] [WebInvoke(Method="GET",ResponseFormat=WebMessageFormat.Json)] publicstringTest() { return"HelloWorld!"; }复制简单得不能再简单了,返回一个json格式的HelloWorld!在非IE浏览器里用http://localhost/wcf/service.svc/Test/测试(因为IE7以上版本好象不能直接打开访问wcf中的办法,会提示禁止访问,所以只能用ff,chrome之类测试),返回的是{"d":"HelloWorld!"},完全正常!(这里的d:是微软自
java.nio.file.Files.isWritable方法用于测试一个文件是否可写。但是对于文件夹,这个办法并不能用来测试文件夹是否可以创建子文件夹或文件。 比如对于匿名(只读)访问一个网络共享文件夹,isWritable返回是truePathpath3=Paths.get("\\\\SERVER\\share");//匿名用户只有读取权限的共享文件夹 System.out.println(Files.isWritable(path3));//返回true复制所以如果想判断一个文件夹是不是真的可写,这个办法是不靠谱的。怎么办呢?看来只有去尝试创建文件和文件夹才能真判断文件夹是否可写了,于是想到了用于创建临时文件夹和临时文件的两个方法Files.createTempDirectory,Files.createTempFile,用这两个方法尝试创建临时文件夹和临时文件,如果成功并且能删除就说明该文件夹可以可写。 代码很简单:/** *判断一个文件夹是否可创建文件/文件夹及可删除 *@paramdir *@return */ publicstaticbooleani
当前,人工智能的发展给我们带来惊喜的同时也让我们恐惧。机器人会取代人类吗?下一代AI技术将会带来怎么样的变革?DavidAllenCohen在研究了哈希图技术后认为,AI3.0将过去30年对AI技术、机器人学习以及多智能体系统的研究优势同区块链和DLT技术相结合,最终实现了新兴的工业4.0,即数十亿的设备将连接至互联网,并需要在边缘网络进行实时调节。90年代初期,我在学校就开始从事人工智能(AI)和机器学习领域的科研工作,那时,我曾使用神经网络和模式识别技术对应用程序进行预测、协调和控制应用。在2003年,我建立了一个名为GridAgents™的软件平台,该平台基于多智能体技术,允许节点(机器、设备或其他相关事物)利用软件智能体,其中,这个软件智能体可以自我配置,使用对等消息进行协调,并可以基于AI和机器学习技术自主完成复杂的任务。GridAgents展示了机器经济的早期应用,即智能体代表机器和事物,通过购买和销售行为进行产品优化。总而言之,GridAgents平台旨在让分布式控制系统和交互式机器——机器(M2M)系统成为现实。智能体(Agent/Anagent)是一种计算机系统,它可
文章背景:通过Python编写的代码一般是保存为py文件,必须要在Python环境下才可以运行。如果一台电脑没有安装Python,那就无法运行我们的程序。通过将编写的Python代码转换成exe文件,这样不管电脑上是否已安装Python,只要能打开exe文件就可以运行我们的程序。本文借助第三方模块pyinstaller,将py文件转化为exe可执行文件。前期工作:通过pipinstall安装pyinstaller第三方模块。pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplepyinstaller操作环境:Win10系统接下来开始py文件转化为exe文件的工作。首先打开命令提示符窗口,然后切换到py文件所在的目录下。目前,我的py文件名为batchPrintPDF.py,该文件保存在文件夹C:\Local内。首先要切换盘符,直接输入C:,即可切换到该盘下。然后再输入”cdC:\Local"换到该目录下。换到该目录后,输入"pyinstaller-F-wbatchPrintPDF.py",按回车等待即可。生
最近,感觉JS有些方法忘记了,这几天会抽空复习的,先从数组方法开始,然后是字符串方法,然后Math方法,在Data方法。 我尽可能的全面,但有些真的忘了,甚至忘得连一点印象也没了。 array方法: ES6: find:参数为回调函数,回调函数可以接收3个参数,值x,索引i,数组arr,糊掉函数默认返回值x; findIndex:和find差不多,不过默认返回索引; includes:和String的includes一样,接收2参数,查询的项以及查询起始位置; keys:对数组索引进行遍历; values:对数组项进行遍历; entries:对数组键值进行遍历; fill:方法改变原数组,当第三个参数大于数组长度的时候,以最后一位为结束位置; Array.of():永远返回一个数组,参数不分类型,只分数量,数量为0返回空数组; copyWithin:接收三个参数,被替换数据的开始处,替换块的开始处,替换块的结束处;copyWit
synchronized锁是Java面试的过程中比较常考的知识点了,从偏向锁->轻量级锁->重量级锁都可以聊 CAS在这篇没有讲述,因为在上一篇已经写了,有兴趣的同学可以翻翻开 目前已经连载10篇啦!进度是一周更新两篇,欢迎持续关注 [【对线面试官】Java注解] [【对线面试官】Java泛型] [【对线面试官】JavaNIO] [【对线面试官】Java反射&&动态代理] [【对线面试官】多线程基础] [【对线面试官】CAS] [【对线面试官】synchronized] [【对线面试官】AQS&&ReentrantLock] [【对线面试官】线程池] ... 欢迎关注我的微信公众号【Java3y】来聊聊Java面试 【对线面试官】系列一周两篇持续更新中! 更多的文章可往:文章的目录导航
Youaregivenastring, S,andalistofwords, L,thatareallofthesamelength.Findallstartingindicesofsubstring(s)inSthatisaconcatenationofeachwordinLexactlyonceandwithoutanyinterveningcharacters. Forexample,given:S: "barfoothefoobarman"L: ["foo","bar"] Youshouldreturntheindices: [0,9].(orderdoesnotmatter). 题目意思:输入字符串S和列表L,L含有一组长度相同的单词。找出所有子串的开始下标,该子串由L的所有单词拼接而成,而且没有夹杂其他字符 解题思路是: 从原串S的第一个字符开始,取长度为L的元素个数乘以L里单词的长度,然后判断该串是否仅仅含了L得所有单词。 将子串拆分成多个长度和L单词长度一致的单词,然后根据hash_map来匹配子串的单词
开发者所需要知道的iOS11SDK新特性 年纪大了过了能熬夜看WWDC的时代了,但是还是在小小宝的哭闹和妈妈大人换尿布的催促中起了个大早。于是算趁着“热乎”把WWDC2017的Keynote看完了。和往年差不多,虽然WWDC是一个开发者会议,但是Keynote并不是专门针对我们开发者的,它还承担了公司状况说明,新品发布等功能。作为技术人员,可能接下来的session会更有意义。要用一句话来评价今年Keynote所展现出来的内容的话,就是小步革新。大的技术方面可以说只有ARKit可堪研究,但是我们还是看到了类似跨app拖拽,新的Files应用这样进一步突破iOS原有桎梏的更新(iMessage转账什么的就不提了,我大天朝威武,移动支付领域领先世界至少三年)。iOS11,特别是配合新的硬件,相信会给用户带来不错的体验。 作为iOS开发者,和往年一样,我整理了一下在可能需要关注的地方。 新增框架 新加入SDK的大的框架有两个,分别是负责简化和集成机器学习的CoreML和用来创建增强现实(AR)应用的ARKit。 CoreML 自从AlphaGo出现以来,深度学习毫无疑问成了行业热点。而Go
1xx:信息100Continue服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。101SwitchingProtocols服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。2xx:成功200OK请求成功(其后是对GET和POST请求的应答文档)201Created请求被创建完成,同时新的资源被创建。202Accepted供处理的请求已被接受,但是处理未完成。203Non-authoritativeInformation文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。204NoContent没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。205ResetContent没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。206PartialContent客户发送了一个带有Range头的GET请求,服务器完成了它。3xx:重定向300MultipleChoices多重选择。链接列表。用户可以选择某链接到达目的地。最多允许
归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。 和归档文件类似,压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其所占用的磁盘空间比集合中所有文件大小的总和要小。压缩是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。比如说,在压缩文件中,有不止一处出现了"C语言中文网",那么,在压缩文件时,这个词就会用一个代码表示并写入词典文件,这样就可以实现缩小文件体积的目的。由于计算机处理的信息是以二进制的形式表示的,因此,压缩软件就是把二进制信息中相同的字符串以特殊字符标记,只要通过合理的数学计算,文件的体积就能够被大大压缩。把一个或者多个文件用压缩软件进行压缩,形成一个文件压缩包,既可以节省存储空间,有方便在网络上传送。如果你能够理解文件压缩的基本原理,那么很容易就能想到,对文件进行压缩,很可能损坏文件中的内容,因此
Maven环境内置常量/变量的获取 常量 ${basedir}项目根目录 ${project.build.directory}构建目录,缺省为target ${project.build.outputDirectory}构建过程输出目录,缺省为target/classes ${project.build.finalName}产出物名称,缺省为${project.artifactId}-${project.version} ${project.packaging}打包类型,缺省为jar ${project.xxx}当前pom文件的任意节点的内容如project.artifactId 变量 ${basedir}表示项目根目录,即包含pom.xml文件的目录; ${version}表示项目版本; ${project.basedir}同${basedir}; ${project.baseUri}表示项目文件地址; ${maven.build.timestamp}表示项目构件开始时间; ${maven.build.timestamp.format}表示属性${maven.build.ti
〇、什么是消息队列 参考:新手也能看懂,消息队列其实很简单 RabbitMQ运行模型与名词解释 一、应答模式 1.什么是应答? 消息投递到交换器(exchange)中,交换器给我们的反馈,是保障消息投递成功的一种机制。 2.测试 配置: 1#选择确认类型为交互复制 2spring.rabbitmq.publisher-confirm-type=correlated复制 测试方法: 1@Test 2/** 3*thetestistestingconfirm-functioninrabbitmq 4*/ 5voidmessageSendTestWithConfirm(){ 6 7/* 8*设置消息确认回调方法; 9*@ack为true时,表示投递成功;为false表示投递失败; 10*@CorrelationData为自定义反馈信息; 11*@cause为投递失败的原因; 12*/ 13rabbitTemplate.setConfirmCallback(newRabbitTemplat
真本书是以Java写的,但是没学过Java也能看懂。 终于读完了这本厚书,虽然读了后面忘了前面,但读下来还是有点成就感的,而且我从中学到了好多东西。这本书又被称作CLRS,是由四位作者名字的首字母组成。我学习这本书纯属偶然,去年和一个同事交流技术时,他向我推荐这本书,于是一时心血来潮,从网上买了一本,但是看到它的厚度,以及里面所描述的内容,确实有一种令人望而生畏的感觉,感觉还不知道何年何月才能把这本书看完。 还好,今年上半年因为比较空,因此得以抽出很多时间学习这本书,整体感觉整本书写得相当的严谨,涉及到了广泛的数学知识。书中的所有的算法都可以用数学来证明,并且这些算法基本都是与实际问题相结合,从实际问题出发,建立数学模型,然后设计算法,用数学来证明其正确性并分析算法的代价。能达到这样的境界,那是相当的牛啊。书中反复使用的循环不变式来证明算法的正确性,我觉得这种方法相当不错,既可以证明算法的正确性,也可以帮助理清思路,有助于对算法进行设计。 书中有少量文字和图有错误,但基本上都是中文排版引起的。每一个章节讲解的都比较详细,如果仔细阅读基本上都可以理解,我有少数章节看的不大懂,比如倒数第二
原文:45UsefulJavaScriptTips,TricksandBestPractices 译文:45个有用的JavaScript技巧,窍门和最佳实践 译者:dwqs 在这篇文章中,我将分享一些JavaScript常用的技巧,窍门和最佳实践。不管JavaScript开发者是使用在浏览器/引擎上或者服务器端(SSJS——ServiceSideJavaScript)JavaScript解释器上,这些他们都是应该知晓的。 需要注意的是,文章中的代码片段均是在最新的GoogleChrome(版本号30)上测试过,它使用V8JavaScript引擎(V83.20.17.15)。 1、第一个给变量分配值时不要忘了var关键字。 分配值给未定义的变量将是该变量自动成为全局变量,应该避免全局变量。 2、使用===而不是== ==(或!=)操作符在需要时会自动转换变量类型,而===(或!==)则不会执行类型转换。在进行值和类型比较的时候,应首先考虑使用=== [10]===10//isfalse [10]==10//istrue '10'==10//istrue '10'
System.err.println("接收到了消息"); Stringvalue=data.value(); System.err.println("消息类型:"+value); if(value.startsWith("save")){ String[]split=value.split("="); Planplan=JSON.parseObject(split[1],Plan.class); planretest.save(plan); System.err.println("添加的内容同步到es"); } if(value.startsWith("update")){ String[]split=value.split("="); Planplan=JSON.parseObject(split[1],Plan.class); planretest.save(plan); System.err.println("修改的内容同步到es"); redisTemplate.delete("plan"); System.err.println("同步Redis"); }复制