首页 文章 精选 留言 我的

精选列表

搜索[栈],共10000篇文章
优秀的个人博客,低调大师

React技术栈支援Vue项目,你需要提前了解的 | 京东云技术团队

写在前面 react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听, 当属性变化的时候,响应式的更新对应的虚拟dom react的思路通过js来生成html, 所以设计了jsx,还有通过js来操作css。vue是自己写了一套模板编译的逻辑,可以把js css html糅合到一个模板里边 react可以通过高阶组件来扩展,而vue需要通过mixins来扩展 频繁用到的场景 1. 数据传递:父传子,父更新子如何取得新数据 父组件中有一个表单日期组件,子组件是一个弹层(弹层中有日期组件,默认值取父组件选中的日期),父组件更改日期范围后,子组件打开默认日期也需要更新。如下: // 父组件 <template> <div> <date-span style="flex-grow: 1" ref="dateSpanE" :noCache="true" :startDate="startDate" :endDate="endDate" type="weekrange" @change="changeDate"></date-span> <!-- 子弹层组件 --> <ActiveTakeEffect ref="activeModal" :timeRange="makeActiveTime" /> </div> </template> <script> import DateSpan from '@/components/DateSpanE' export default { components: { DateSpan }, // ... data: () => { return { makeActiveTime: { startDate: '', endDate: '' }, } }, computed: { startDate() { return this.makeActiveTime.startDate }, endDate() { return this.makeActiveTime.endDate } }, methods: { // 父组件表单日期修改时更新了传入的日期 changeDate(dateInfo) { const { start: startDate, end: endDate } = dateInfo this.makeActiveTime = { startDate, endDate } } } } </script> // 子组件 <template> <Modal v-model="showModal" width="680" title="XXX" :mask-closable="false" @on-visible-change="visibleChange" :loading="loading"> <div class="single-effect-modal"> <div class="form-wrapper"> <date-span style="flex-grow: 1" ref="dateSpanE" :noCache="true" :startDate="startDate" :endDate="endDate" type="weekrange" @change="changeDate"></date-span> </div> </div> </Modal> </template> <script> import Api from '@/api_axios' import DateSpan from '@/components/DateSpanE' import { formatDate } from '@/common/util' import moment from 'moment' export default { components: { DateSpan }, props: { // 定义父组件传入的prop timeRange: { type: Object, default: () => { return { startDate: new Date(), endDate: moment().add(17, 'w').toDate() } } } }, data() { return { loading: true, showModal: false, // data中定义子组件日期范围组件所需的展示数据,默认取props中定义的值 timeRangeFromProps: this.timeRange } }, computed: { startDate() { return this.timeRangeFromProps.startDate }, endDate() { return this.timeRangeFromProps.endDate } }, watch: { // 监听传入的props值,props值更改时更新子组件数据 // 若无此监听,父组件修改日期后,子组件的日期范围得不到更新 timeRange() { this.timeRangeFromProps = this.timeRange } }, methods: { changeDate(dateInfo) { const { start: startDate, end: endDate } = dateInfo this.timeRangeFromProps = { startDate, endDate } }, toggle(isShow) { this.showModal = isShow }, // ... } } </script> <style lang="less"> .single-effect-modal { .form-wrapper { min-height: 100px; } .item-label { min-width: 60px; } } </style> 2. $parent $refs $emit 2.1 $refs访问子组件中的方法或属性 <ActiveTakeEffect ref="activeModal" :timeRange="makeActiveTime" /> <script> this.$refs.activeModal.timeRangeFromProps // timeRangeFromProps是子组件中的属性 this.$refs.activeModal.toggle(true) // toggle是子组件中的方法名 </script> 2.1 $parent访问父组件中的方法或属性 $emit触发父组件中定义的方法 // 子组件 <script> this.$parent.makeActiveTime // makeActiveTime是父组件中的属性 this.$parent.changeDate({startDate:xxx, endDate: xxx}) // changeDate是父组件中的方法名 </script> // 父组件,忽略其他项 <date-span @conditionChange="conditionChange"></date-span> <scipt> // ... methods: { conditionChange(controlName) { // ... } } // ... </script> <script> // 子组件中调用 this.$emit('conditionChange', 'dateSpan') </script> 3. mixins扩展使用 // itemList就是来自treeSelectMixin中定义的数据 <SwitchButton :itemList="itemList" @change="toggleSelectAll"></SwitchButton> <script> import mixin from './treeSelectMixin' export default { mixins: [mixin], components: { Treeselect, SwitchButton }, // ... } </script> 4. 样式的两种写法 // 同一个.vue文件中可以出现以下两个style标签 <style lang="less"> </style> // 当`<style>`标签有`scoped`属性时,它的 CSS 只作用于当前组件中的元素。 <style lang="less" scoped> </style> 以上就是入门时困扰较多的地方~祝换乘顺利 作者:京东保险 黄晓丽 来源:京东云开发者社区 转载请注明来源

优秀的个人博客,低调大师

【杭州云栖】异构计算:软硬件结合全栈助力AI大爆发

9月20日上午,杭州云栖小镇E1-2会场,备受业界关注的2018年杭州云栖大会异构计算专场召开。 近年来,人工智能持续爆发,对算力提出了更高的要求。异构计算作为大计算时代的解决方案,意在打破传统通用计算的限制,融合不同指令集和体系架构的计算单元,完美支持大计算场景。 让每一个芯片都发挥最大效能 首先,阿里云弹性计算负责人,阿里云研究员余锋,带来了精彩的开场。余锋以摄影来打开话题:每一个镜头都会有特别的定位,在某个场景下合适但是另外场景会力不从心,异构计算的精髓也是如此,即让每一个芯片都发挥最大效能,扬长避短。 余锋说:异构计算带来的计算效率提升是指数级的,但是需要有配套工具,基础设施等等。阿里云正在逐渐让这个门槛变低,并且和业内一起构建技术生态,让异构计算普惠行业,帮助合作伙伴和客户不断创新。 GN6实例 F3实例全面商业化 议题阶段,首先登

优秀的个人博客,低调大师

Python全栈 正则表达式(re模块正则接口全方位详解)

re模块是Python的标准库模块 模块正则接口的整体模式 re.compile 返回regetx对象 finditer fullmatch match search 返回 match对象 match.属性|方法 re模块的使用: regex = re.compile(pattern,flags = 0) 功能 : 生成正则表达式对象 参数 : pattern 正则表达式 flags 功能标志位,丰富正则表达式的匹配 返回值: 返回一个正则表达式对象 re.findall(pattern,string,flags = 0) 功能 : 根据正则表达式

优秀的个人博客,低调大师

Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)

断网了2天 今天补上 聚合操作: 对文档的信息进行 整理统计的操作 返回:统计后的文档集合 db.collection.aggregate() 功能:聚合函数,完成聚合操作 参数:聚合条件,配合聚合操作符使用 返回:聚合后的结果 常用聚合操作符: 1. $group 分组聚合 要配合具体的统计操作符获取结果 $sum 求和 db.class1.aggregate({$group:{_id:'$gender',num:{$sum:1}}}) 分组 按照gender值统计 统计结果,求和每有一个加1 统计所有男生和女生的年龄之和 db.class1.aggregate({$group:{_id:'$gender',num:{$sum:'$age'}}}) $avg 平均值 求男生 女生年龄的平均数 db.class1.aggregate({$group:{_id:'$gender',num:{$avg:'$age'}}}) $max 求最大值 求男生女生的年龄最大值 db.class1.aggregate({$group:{_id:'$gender',num:{$max:'$age'}}}) $min 求最小值 求男生女生的年龄最小值 db.class1.aggregate({$group:{_id:'$gender',num:{$min:'$age'}}}) 2. $project 用于修改文档的显示效果 $project值的用法同find()的field参数相同 db.class1.aggregate({$project:{_id:0,name:1,age:1}}) 自定义显示的域名 db.class1.aggregate({$project:{_id:0,Name:'$name',Age:'$age'}}) 3. $match 过滤想要的数据 过滤年龄大于30的数据,$match值的写法同query db.class1.aggregate({$match:{age:{$gt:30}}}) 4. $limit 显示前几个文档 db.class1.aggregate({$limit:3}) 5. $skip 跳过前几个文档显示 db.class1.aggregate({$skip:2}) 6. $sort 排序 按照年龄排序 db.class1.aggregate({$sort:{age:1}}) 聚合管道 将前一个聚合操作产生的结果,交给后一个聚合操作继续使用 db.collection.aggregate([{聚合1},{聚合2},{}...]) $match --> $sort -->$project db.class1.aggregate([{$match:{gender:'m'}},{$sort:{age:1}},{$project:{_id:0}}]) 聚合示例 使用grade数据库 给更多同学添加 域score score:{english:87,chinese:76,math:91} 1. 按照性别统计每组人数 aggregate({$group:{_id:'$sex',num:{$sum:1}}}) 2. 统计该班中有哪个同学姓名为重名同学 aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}]) 3. 统计所有男生的语文成绩,只打印姓名,性别,语文成绩即可 aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,sex:1,'score.chinese':1}}]) 4. 将所有女生按照英语成绩降序排序 aggregate([{$match:{sex:'w'}},{$sort:{'score.english':-1}}]) 文件存储: 1.存储路径 将文件放在本地路径(网络路径)下,然后数据库中存储该文件的查找路径 优点 : 节省数据库空间 缺点 : 当数据或者 文件位置发生 变化时文件 即丢失 2. 将文件转换为二进制,存储文件本身 数据库支持二进制数据格式 将文件转换为二进制格式,然后存入数据库中 优点 : 数据库和文件绑定, 数据库在 文件即在 缺点 : 占用数据库空间大,存取效率低 mongodb存储文件本身 * 如果是 小文件建议转换 二进制直接插入 * 如果是 大文件建议使用 GridFS方案存储(大于16M) GridFS方案解释 1. 在mongodb一个数据库中使用 两个集合配合存储文件 2. fs.files 用来存储文件的 相关信息,为每一个文件创建一个文档, 存储文件 名,文件 大小,存入 时间。。。 3. fs.chunks 用来分块存储文件的实际内容( Binary data 类型数据) 存储方法: mongofiles -d dbname(数据库) put file(要存储的文件) * 数据库不存在会自动创建数据库 数据库中会 自动创建fs.files fs.chunks两个集合 fs.files文档结构: { "_id" : ObjectId("5b7cdcd769d72e12b4f166d0"), "chunkSize" : 261120, "uploadDate" : ISODate("2018-08-22T03:47:35.381Z"), "length" : 305033, "md5" : "3698b5e762b5b396766aaf9feef7e10d", "filename" : "file.jpg" } fs.chunks文档结构 { "_id" : ObjectId("5b7cdcd769d72e12b4f166d2"), "files_id" : ObjectId("5b7cdcd769d72e12b4f166d0"), "n" : 1, "data" : BinData(0,"tQWR0AR......AG") } * 同一个文件fs.files中的 _id值等于fs.chunks中的 files_id域的值 提取方法: mongofiles -d dbname get file GridFS方案: 优点 : 存储方便,提供较好的命令支持和编程接口 缺点 : 存取效率低下 还没有复制的快 mongo shell中获取游标: * mongo shell下支持JS代码,可以通过JS获取游标,进而获取数据操作结果。 var cursor = db.class1.find() cursor.next() 获取下一条结果 cursor.hasNext() 查看是否有下一个对象 通过python操作 MongoDB: pymongo 模块 第三方模块 安装: sudo pip3 install pymongo 操作步骤: 1. 连接数据库,生成数据库连接对象 conn = pymongo.MongoClient('localhost',27017) 2. 选择要操作的数据库,生成数据库对象 (__setitem__) db = conn.stu db = conn['stu'] 3. 获取集合对象 myset = db.class0 myset = db['class0'] 4. 通过集合对象调用mongodb数据库操作函数 增删改查,聚合,索引。。。。。 5. 关闭数据库连接 conn.close() 插入文档: insert() 插入数据 功能同 mongoshell insert_many() 插入多条 insert_one() 插入一条 save() 插入数据,通过_id可以修改 查找操作: find() 功能 : 对数据库进行查找 参数 : 同mongoshell find() 返回值 : 返回游标对象 cursor = myset.find({},{'_id':0}) cursor的属性函数 next() limit() skip() count() sort() Python中sort和MongoDB的区别 并且Python中的数据是字典和MongoDB的数据不同 所以键和操作符号都必须要加引号 pymongo : sort([('age',-1),('name',1)]) mongoshell : sort({age:-1,name:1}) * 如果通过for或者next操作了游标对象,再调用limit,skip,sort会报错 find_one() 用法同mongoshell中 findOne() 返回一个字典 修改操作: update(query,update,upsert = False,multi = False) update_many() update_one() 删除操作: remove(query,multi = True) 功能: 删除文档 参数: query 筛选条件 multi 默认True表示删除所有符合条件的 False只删除一条 索引操作: ensure_index() 创建索引 list_indexes() 查看索引 drop_index() 删除一个索引 drop_indexes() 删除所有索引 聚合操作: aggregate([]) 参数和mongoshell一样 返回值和find()函数一样也是得到一个游标对象 pymongo进行文件存取操作: GridFS 文件提取: import gridfs 1. 连接数据库,获取相应的数据库对象 2. 通过 gridfs.GridFS(db) 获取集合对象(代表存储文件的两个集合) 3. 通过find()查找文件返回游标 4. 通过循环遍历游标获取指定文件对象,read()读取文件内容写入本地 以二进制的方式存取文件 import bson.binary 增删改查操作: from pymongo import MongoClient #创建连接 conn = MongoClient('localhost',27017) #创建数据库对象 db = conn.stu #创建集合对象 myset = db.class4 print(dir(myset)) # 插入操作 myset.insert({'name':'张铁林','King':'乾隆'}) myset.insert([{'name':'张国立','King':'康熙'},\ {'name':'陈道明','King':'康熙'}]) myset.insert_many([{'name':'唐国强','King':'雍正'},\ {'name':'陈建斌','King':'雍正'}]) myset.insert_one({'name':'郑少秋','King':'乾隆'}) myset.save({'_id':1,'name':'聂远','King':'乾隆'}) # 查找操作 cursor = myset.find({},{'_id':0}) # i为每个文档对应的字典 for i in cursor: print(i['name'],'--->',i['King']) myset = db.class1 # 操作符使用引号变为字符串 cursor = myset.find({'age':{'$gt':30}},{'_id':0}) cursor.limit(2)#获取前两个文档 cursor.skip(2) #跳过前两个 cursor.sort([('age',-1),('name',1)]) #对游标内容排序 for i in cursor: print(i) print(cursor.next()) #获取下一个文档 dic = {'$or':[{'age':{'$gt':35}},{'gender':'w'}]} data = myset.find_one(dic,{'_id':0}) print(data) # 修改操作 myset.update({'name':'张国立'},\ {'$set':{'king_name':'玄烨'}}) myset.update({'name':'霍建华'},{'$set':{'King':'乾隆'}},\ upsert = True) myset.update({'King':'乾隆'},\ {'$set':{'king_name':'弘历'}},multi = True) myset.update_one({'King':'康熙'},\ {'$set':{'king_name':'爱新觉罗玄烨'}}) myset.update_many({'King':'雍正'},\ {'$set':{'king_name':'胤禛'}}) # 删除操作 myset.remove({'King':'康熙'}) myset.remove({'King':'乾隆'},multi = False) #查找并删除 print(myset.find_one_and_delete({'King':'乾隆'})) #关闭连接 conn.close() 索引操作: from pymongo import MongoClient #创建连接 conn = MongoClient('localhost',27017) #创建数据库对象 db = conn['stu'] myset = db['class1'] # 删除所有索引 myset.drop_indexes() # 创建索引 index = myset.ensure_index('name') # 创建复合索引 index = myset.ensure_index([('name',-1),('age',1)]) print(index) # 删除一个索引 myset.drop_index('name_1') # 创建特殊索引 index = myset.ensure_index('name',name = "myIndex",\ unique = True,sparse = True) # 查看集合中的索引 for i in myset.list_indexes(): print(i) myset = db.class4 l = [ {'$group':{'_id':'$King','num':{'$sum':1}}}, {'$match':{'num':{'$gt':1}}} ] cursor = myset.aggregate(l) for i in cursor: print(i) conn.close() 文件的存取: from pymongo import MongoClient import bson.binary conn = MongoClient('localhost',27017) db = conn.images myset = db.img #存储 f = open('file.jpg','rb') #转换为mongodb的二进制数据存储形式 content = bson.binary.Binary(f.read()) #插入到数据库 myset.insert({'filename':'file.jpg','data':content}) #提取 data = myset.find_one({'filename':'file.jpg'}) #通过字典获取到数据库内容写入本地 with open(data['filename'],'wb') as f: f.write(data['data']) conn.close() 手动存入文件MongoDB默认创建的文件数据导出: from pymongo import MongoClient #pymongo绑定的模块 import gridfs conn = MongoClient('localhost',27017) db = conn.grid #获取gridfs对象 #fs综合了fs.files fs.chunks两个集合的属性内容 fs = gridfs.GridFS(db) #查文档生产游标 files = fs.find() #获取每一个文件的对象 for file in files: print(file.filename) if file.filename == 'file.jpg': with open(file.filename,'wb') as f: #从数据库读取出来 data = file.read() #写入本地 f.write(data) conn.close()

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册