全国大数据交易所及数据交易平台汇总
政府类:
贵阳大数据交易所
http://www.gbdex.com/website/
我国乃至全球第一家大数据交易所, 贵阳大数据交易所发展会员数目突破2000家,已接入225家优质数据源,经过脱敏脱密,可交易的数据总量超150PB,可交易数据产品4000余个,涵盖三十多个领域,成为综合类、全品类数据交易平台。
西咸新区大数据交易所
http://www.chinabdbank.com/index.htm
西咸新区沣西大数据产业发展平台,通过构建有效的市场机制,聚合政府、企业、社会等多类数据资源,整合大数据服务能力,全面运营大秦大数据银行线上服务平台和陕西省社会数据服务大厅线下服务平台。
东湖大数据交易中心
http://www.chinadatatrading.com/
武汉东湖大数据交易中心股份有限公司的业务涵盖数据交易与流通、数据分析、数据应用和数据产品开发等,聚焦“大数据+”产业链,提供有价值的产品和解决方案,帮助用户提升核心竞争力。
华东江苏大数据交易平台
http://www.bigdatahd.com/
华东江苏大数据交易中心(简称BDEX)是在实施“国家大数据战略”大背景下,经国家批准的华东地区首个领先的跨区域、标准化、权威性省级国有大数据资产交易与流通平台,2015年11月成立于国家级大数据产业基地——江苏盐城大数据产业园,承担助推江苏省国有数据增值开放流通、大数据产业发展之重任。
哈尔滨数据交易中心
http://www.hrbdataex.com/
哈尔滨数据交易中心由黑龙江省政府办公厅组织发起并协调省金融办、省发改委、省工信委等部门批准设立。结合政府数据资源、企业数据资源,打造成为立足东三省,辐射全国的大数据交易市场,构建围绕数据的生态系统支撑平台。
上海数据交易中心
https://www.chinadep.com/index.html
上海数据交易中心有限公司(简称“上海数据交易中心”),是经上海市人民政府批准,上海市经济和信息化委、上海市商务委联合批复成立的国有控股混合所有制企业,上海数据交易中心承担着促进商业数据流通、跨区域的机构合作和数据互联、政府数据与商业数据融合应用等工作职能。
中国工信数据
http://www.miit.gov.cn/n1146312/index.html
平台类:
京东万象
https://wx.jdcloud.com/
以数据开放、数据共享、数据分析为核心的综合性数据开放平台,拥有的数据类型主要包括金融、征信、电商、质检、海关、运营商数据
聚合数据
https://www.juhe.cn/
互联网专业数据科技服务商。主要提供两种核心服务:以API数据接口的形式,提供数据服务;以大数据技术,提供数据应用服务。
数据宝
https://www.chinadatapay.com/
中国领先的国有数据资产增值运营服务商,提供 公安、运营商、银联、交通、车辆、企业、税务、气象大数据。
百度智能云云市场
https://cloud.baidu.com/market/list/125
由百度智能云建立的云计算软件或商品的交易与交付平台,下设多个商品品类,包括镜像环境、建站推广、企业应用、人工智能、数据智能、区块链、泛机器人、软件工具、安全服务、上云服务、API服务等,商品数量数千种。
数粮
http://datasl.com/
大数据领域的流通平台,供数据资源和大数据技术应用产品进行交易,支持API接口、数据包下载、定制等交易模式。
阿凡达数据
https://www.avatardata.cn/Docs
API数据接口云服务,专注于数据的采集与分析处理工作,拥有106个数据种类。
HaoService
http://www.haoservice.com/
数据互联服务平台。提供30大类以上基础数据API服务、热门源码交易服务。
发源地
http://www.finndy.com/
大数据应用平台和大数据解决方案提供商。提供数据交易服务,目前总共拥有20246个数据源。
iDataAPI
https://www.idataapi.com/
数据服务提供商,已推出1300多种数据产品和50多种数据分析产品,涵盖30000个网站平台和全球移动APP平台。
天元数据
https://www.tdata.cn/
中国领先的云计算、大数据服务商。数据商品涵盖了线上零售、生活服务、企业数据、农业、资源能化等10大类。提供17个API接口、165个数据集、56个数据报告、278个政府开放数据。
中原大数据交易
http://www.zybigdatae.cn/
数据资源提供商、数据资产运营商和数据交易服务商,向客户提供大数据全产业链平台与技术服务。提供223个API接口、177个数据集、89个数据报告、2个数据应用。
环境云
http://www.envicloud.cn/home?title=0
环境大数据开放平台。拥有3702家注册用户、收录1,041,098,354条环境数据,以积分兑换和免费下载两种方式提供数据服务。
天眼查
https://www.tianyancha.com/vipintro/?jsid=SEM-BAIDU-PZ1907-SY-000100
天眼查收录了1.8亿+家社会实体信息(含企业、事业单位、基金会、学校、律所等),90多种维度信息全量实时更新。
企查查
https://www.qichacha.com/
提供企业工商信息、法院判决信息、关联企业信息、法律诉讼、失信信息、被执行人信息、知识产权信息、公司新闻、企业年报等企业数据交易服务,覆盖全国1.8亿家企业信息。
杭州钱塘大数据交易中心
http://www.qtbigdata.com/index.html
杭州钱塘大数据交易中心有限公司(简称“钱塘数据”)成立于2015年底,是国内一家工业大数据应用和交易平台。
中关村数海大数据交易平台
http://www.shuhaidata.com/
全国第一家数据交易平台,推动数据的流通,发挥数据的商品属性,促成数据交换、整合,将真正带动大数据产业繁荣。
大数据挖掘模型交易平台
http://mx.tipdm.org/
模型算法交易平台,配套完整建模数据,模型实现过程说明及源代码。
APIX
https://www.apix.cn/services/category
APIX是黑格科技旗下的一款SaaS云服务产品,专注为机构提供实时在线用户数据分析,信用评估,第三方数据接入服务。
抓手数据
https://zhuashou.net/
运用区块链底层技术,以生产数据产品、建立数据交易生态圈为主要目标,促进数据的开放共享和数据价值的释放
千教堂
http://d.askci.com/
全球大数据众享平台
中国数据商城
http://www.chinadatastore.cn/index.html
中国领先的大数据交易平台
中国管理大数据
http://www.chn-source.com/
管理大数据RBD=平台运营商+数据供应商
数据星河
http://www.bdgstore.cn/
是全球首款大数据产业链生态平台,基于国际主流的大数据生态技术研发,结合先进的大数据资产运营理念,汇聚全球近千家大数据公司 。
相关阅读:
最全的中国开放数据(Open Data)及政府数据开放平台汇总
国外最全的开放数据(Open Data)及政府数据开放平台汇总
【Open Data】国外开放数据中心及政府数据开放平台汇总
纽约政府开放数据平台
https://opendata.cityofnewyork.us/
美国官网数据超市
提供230,256个数据集、14个数据目录
新加坡政府开放数据平台
提供1700个数据集、9个数据目录
休斯顿市开放数据门户网站
247个数据集、12个数据目录
Academic Torrents
共享大量数据集的分布式系统,提供445.96TB的研究数据
Hadoopilluminated.Com
http://hadoopilluminated.com/hadoop_illuminated/Public_Bigdata_Sets.html
提供国外开放数据网站相关信息,目前已集合35个查询途径
United States Census Bureau
美国人口普查局
Usgovxml.Com
USGovXML.com是美国政府提供的公共Web服务和XML数据源的索引。USGovXML.com索引来自 美国政府所有3个分支机构以及董事会,委员会,公司和独立机构的数据来源。
Enigma.Com
快速搜索和分析政府、公司和组织发布的数十亿份公共记录。
Datahub.Io
发现和分享高质量数据集,与他人联系和分享知识。
Aws.Amazon.Com/Datasets
https://registry.opendata.aws/
帮助人们发现和共享通过AWS资源提供的数据集。
Databib.Org
开放数据网站导航
Quandl.Com
金融,经济和替代数据集的主要来源,为投资专业人士提供服务。Quandl的平台被超过40万人使用,其中包括来自世界顶级对冲基金,资产管理公司和投资银行的分析师。
Figshare.Com
研究论文上传网站,已有2600万+浏览量、750万+下载、800,000+上传、200万+文章
GeoLite Legacy Downloadable Databases
https://dev.maxmind.com/geoip/geoip2/geolite2/
IP地理定位数据库
Quora's Big Datasets Answer
https://www.quora.com/Where-can-I-find-large-datasets-open-to-the-public
公共开放数据集汇总
Kaggle Datasets
https://www.kaggle.com/datasets
数据文档,拥有20394个数据集
A Deep Catalog Of Human Genetic Variation
https://www.internationalgenome.org/data
国际基因组样本资源
Google Public Data
https://www.google.com/publicdata/directory
谷歌公开数据搜索网站
World Bank Data
世界银行开放数据搜索网站
NYC Taxi Data
http://chriswhong.github.io/nyctaxi/
纽约出租车数据开放平台
Open Data Philly
https://www.opendataphilly.org/
费城开放数据平台、16个数据目录、354个数据集
Grouplens.Org
https://grouplens.org/datasets/
提供9个数据集,关于书籍、电源、wiki数据集
UC Irvine Machine Learning Repository
http://archive.ics.uci.edu/ml/index.php
加州大学欧文机器学习库,提供481个数据集
Research-Quality Data Sets By Hilary Mason
http://web.archive.org/web/20150320022752/https://bitly.com/bundles/hmason/1
公共数据集汇总
National Climatic Data Center - NOAA
美国国家环境信息中心,监测,评估和提供国家气候和历史天气数据和信息
ClimateData.Us
美国宇航局公布的美国气候数据
R/Datasets
https://www.reddit.com/r/datasets/
开放数据集汇总网站
MapLight
关于货币的数据集
GHDx
健康指标和评估研究所 - 来自世界各地的健康和人口统计数据集目录,包括IHME结果
St. Louis Federal Reserve Economic Data - FRED
圣路易斯联邦储备银行数据开放网站,该网站提供丰富的经济数据和信息,以促进经济教育和加强经济研究。
New Zealand Institute Of Economic Research – Data1850
新西兰经济研究所,可在该网站下载自1850年以来的相关经济数据。
Dept. Of Politics @ New York University
http://www.nyu.edu/projects/politicsdatalab/datasupp_datasources.html
纽约大学政治数据中心
Open Data Sources
https://github.com/datasciencemasters/data
Github网站上的开放数据源总结
UNICEF Statistics And Monitoring
https://www.unicef.org/statistics/index_24287.html
联合国儿童基金会官网,开放世界各国家、地区的儿童状况报告
Undata
http://data.un.org/Default.aspx
联合国国际统计数据库,包含6,000多万个数据点,涵盖广泛的统计主题,包括农业,犯罪,通信,发展援助,教育,能源,环境,金融,性别,健康,劳动力市场,制造业,国民核算,人口与移民,科学技术,旅游,运输和贸易。
NASA SocioEconomic Data And Applications Center - SEDAC
https://sedac.ciesin.columbia.edu/
社会经济数据和应用中心,是美国国家航空航天局地球观测系统数据和信息系统(EOSDIS)中的分布式主动档案中心(DAAC)之一。
The GDELT Project
https://www.gdeltproject.org/#intro
GDELT博客是世界上最大的人类社会开放研究平台的最新新闻,公告,信息和应用程序的官方一站式存储库。
Sweden, Statistics
瑞典统计局,提供瑞典国家统计数据,包含26个数据集。
Github Free Data Source List
https://www.datasciencecentral.com/profiles/blogs/great-github-list-of-public-data-sets
Github公共数据集
StackExchange Data Explorer
https://data.stackexchange.com/
一个开源工具,用于对来自StackExchange网络的公共数据进行任意查询。
San Fransisco Government Open Data
旧金山政府开发数据网站
IBM Blog Abour Open Data
https://www.datasciencecentral.com/profiles/blogs/the-free-big-data-sources-everyone-should-know
数据科学中心
Liver Tumor Segmentation Challenge Dataset
https://competitions.codalab.org/competitions/17094
Public Git Archive
https://github.com/src-d/datasets/tree/master/PublicGitArchive
Git Hub开放数据平台汇总
GHTorrent
Microsoft Research Open Data
来自Microsoft Research的免费数据集,以推进自然语言处理,计算机视觉和特定领域科学等领域的最新研究。
Open Government Data Platform India
印度开放政府数据(OGD)平台-data.gov.in-是一个用于支持印度政府开放数据倡议的平台。
Google Dataset Search (Beta)
https://toolbox.google.com/datasetsearch
谷歌数据集搜索门户
Data.Gov
它是美国政府免费提供有关气候和犯罪等各种惊人信息的门户。
Data.Gov.Uk
有来自英国所有中央部门以及许多其他公共部门和地方当局的数据集。它充当有关一切信息的门户,包括商业与经济,犯罪与正义,国防,教育,环境,政府,卫生,社会和交通运输。
美国人口普查局(US Census Bureau)
该网站是有关政府掌握的有关美国公民生活的统计数据,包括人口,经济,教育,地理等。
中央情报局世界概况
https://www.cia.gov/library/publications/the-world-factbook/
世界上每个国家的事实;重点研究267个国家/地区的历史,政府,人口,经济,能源,地理,通讯,运输,军事和跨国问题。
欧盟开放数据门户
http://open-data.europa.eu/en/data/
数据的增长包括欧盟内部的经济发展以及欧盟机构内部的透明度,包括地理,地缘政治和金融数据,统计数据,选举结果,法律法规以及犯罪,健康,环境,交通运输和科学研究的数据。
加拿大开放数据
包含许多政府和地理空间数据集的试点项目。它可以帮助您探索加拿大政府如何通过开放数据,开放信息和开放对话来提高透明度,加强问责制,提高公民参与度并推动创新和经济机会。
Datacatalogs.Org
https://opengovernmentdata.org/
它提供来自美国,欧盟,加拿大,CKAN等的开放政府数据。
美国国家教育统计中心
国家教育统计中心(NCES)是收集和分析与美国和其他国家/地区的教育相关数据的主要联邦实体。
英国数据服务
https://www.ukdataservice.ac.uk/
英国数据服务集合包括英国政府资助的主要调查,跨国调查,纵向研究,英国人口普查数据,国际总量,商业数据和定性数据。
史上最全Vue相关开源项目库汇总
目录
UI组件
- element ★13489 - 饿了么出品的Vue2的web UI工具套件
- Vux ★8133 - 基于Vue和WeUI的组件库
- iview ★6634 - 基于 Vuejs 的开源 UI 组件库
- mint-ui ★6253 - Vue 2的移动UI元素
- muse-ui ★3705 - 三端样式一致的响应式 UI 库
- vue-material ★3328 - 通过Vue Material和Vue 2建立精美的app应用
- vuetify ★2925 - 为移动而生的Vue JS 2组件框架
- Keen-UI ★2749 - 轻量级的基本UI组件合集
- vonic ★1913 - 快速构建移动端单页应用
- vue-multiselect ★1539 - Vue.js选择框解决方案
- eme ★1529 - 优雅的Markdown编辑器
- vueAdmin ★1455 - 基于vuejs2和element的简单的管理员模板
- bootstrap-vue ★1267 - 应用于Vuejs2的Twitter的Bootstrap 4组件
- Vue.Draggable ★1191 - 实现拖放和视图模型数组同步
- eagle.js ★1128 - hacker的幻灯片演示框架
- vue-awesome-swiper ★1012 - vue.js触摸滑动组件
- vue-table ★1009 - 简化数据表格
- vue-chat ★859 - vuejs和vuex及webpack的聊天示例
- vue-blu ★850 - 帮助你轻松创建web应用
- vue-recyclerview ★849 - 管理大列表的vue-recyclerview
- VueCircleMenu ★838 - 漂亮的vue圆环菜单
- vue-infinite-scroll ★779 - VueJS的无限滚动指令
- buefy ★755 - 响应式UI组件轻量级库
- vue-beauty ★749 - 由vue和ant design创建的优美UI组件
- vue-waterfall ★737 - Vue.js的瀑布布局组件
- radon-ui ★715 - 快速开发产品的Vue组件库
- vue-loop ★701 - 无限的内容循环
- vue-chartjs ★694 - vue中的Chartjs的封装
- vue-carbon ★684 - 基于 vue 开发MD风格的移动端
- vue-syntax-highlight ★655 - Sublime Text语法高亮
- vue-echarts ★649 - VueJS的ECharts组件
- vue-quill-editor ★615 - 基于Quill适用于Vue2的富文本编辑器
- vue-amap ★571 - 基于Vue 2和高德地图的地图组件
- vue-calendar ★536 - 日期选择插件
- vue-infinite-loading ★501 - VueJS的无限滚动插件
- vue-swipe ★481 - VueJS触摸滑块
- vue-music-player ★451 - Vuejs写一个音乐播放器
- vue-scroller ★444 - Vonic UI的功能性组件
- vue-datepicker ★436 - 日历和日期选择组件
- vue-core-image-upload ★393 - 轻量级的vue上传插件
- vue-progressbar ★379 - vue轻量级进度条
- Gokotta ★375 - 简单的音乐播放器
- vue-sortable ★373 - 轻松添加拖拽排序
- vue-picture-input ★352 - 移动友好的图片文件输入组件
- vue-echarts-v3 ★351 - VueJS组件封装
- markcook ★343 - 好看的markdown编辑器
- vue-video-player ★336 - VueJS视频及直播播放器
- vue-google-maps ★334 - 带有双向数据绑定Google地图组件
- vue-trend ★332 - 简单优雅的星光线条
- vuejs-datepicker ★314 - vue日期选择器组件
- vue-fullcalendar ★313 - 基于vue.js的全日历组件
- vue-html5-editor ★303 - html5所见即所得编辑器
- vue-upload-component ★298 - Vuejs文件上传组件
- DataVisualization ★298 - 数据可视化
- vue-tables-2 ★291 - 显示数据的bootstrap样式网格
- VueStar ★270 - 带星星动画的vue点赞按钮
- vue-data-tables ★266 - VueJS2数据表格
- vue-paginate ★261 - 分页数据的简约VueJS插件
- vue-ydui ★247 - 基于Vue2的移动端和微信UI
- vue-mugen-scroll ★239 - 无限滚动组件
- vue-virtual-scroller ★238 - 带任意数目数据的顺畅的滚动
- vue2-calendar ★236 - 支持lunar和日期事件的日期选择器
- vue-dropzone ★233 - 用于文件上传的Vue组件
- vue2-douban-market ★233 - 仿豆瓣市集webapp项目
- vue-js-modal ★228 - 移动友好的Vuejs2的modal
- vue-slider ★224 - vue 滑动组件
- vue-datetime-picker ★224 - 日期时间选择控件
- rubik ★217 - 基于Vuejs2的开源 UI 组件库
- vue-datasource ★210 - 创建VueJS动态表格
- vue-image-crop-upload ★205 - vue图片剪裁上传组件
- Vueditor ★204 - 所见即所得的编辑器
- mint-loadmore ★203 - VueJS的双向下拉刷新组件
- vue-slider-component ★202 - 在vue1和vue2中使用滑块
- vue-chat ★200 - Vue全家桶+Socket.io+Express/Koa2打造一个智能聊天室
- mavonEditor ★179 - 基于Vue的markdown编辑器
- vue-carousel-3d ★173 - VueJS的3D轮播组件
- vue-baidu-map ★170 - 基于 Vue 2的百度地图组件库
- sweet-modal-vue ★170 - 精美的点击提示对话框
- vue-particles ★168 - 粒子背景的vue组件
- vue-swiper ★167 - 易于使用的滑块组件
- vue-simplemde ★166 - VueJS的Markdown编辑器组件
- vue-slide ★161 - vue轻量级滑动组件
- vue-dragula ★157 - 使拖放变得简单
- vue-drag-and-drop-list ★156 - 创建排序列表的Vue指令
- vue2-editor ★155 - HTML编辑器
- vue-charts ★152 - 轻松渲染一个图表
- vue-data-grid ★151 - VueJS复杂桌面交互示例
- vuwe ★150 - 基于微信WeUI所开发的专用于Vue2的组件库
- vue-progressive-image ★148 - Vue的渐进图像加载插件
- vue-msgbox ★148 - vuejs的消息框
- vue-lazyload-img ★147 - 移动优化的vue图片懒加载插件
- vue-dragging ★146 - 使元素可以拖拽
- vue-instant ★143 - 轻松创建自动提示的自定义搜索控件
- vue-social-sharing ★142 - 社交分享组件
- vue-images ★139 - 显示一组图片的lightbox组件
- vue-impression ★134 - 移动Vuejs2 UI元素
- vue-mdEditor ★131 - 基于VUE的markdown文本编辑器
- vue-typer ★130 - 模拟用户输入选择和删除文本的Vue组件
- vue-highcharts ★130 - HighCharts组件
- vue-tooltip ★129 - 带绑定信息提示的提示工具
- vue-svgicon ★127 - 创建svg图标组件的工具
- wdui ★124 - 基于Vue2的UI组件库
- vue2-loading-bar ★118 - 最简单的仿Youtube加载条视图
- vue-tabs-component ★116 - 渲染tabs的Vue组件
- MagicMusic ★113 - 不一样的音乐
- vue-region-picker ★111 - 选择中国的省份市和地区
- vue-datatable ★102 - 使用Vuejs创建的DataTableView
- vue-loading ★102 - 元素中加载block的Vue指令
- vodal ★99 - 动画的vue模态
- vue-img-inputer ★97 - 基于Vue2的图片输入框
- vue-video ★96 - Vue.js的HTML5视频播放器
- vue-touch-ripple ★95 - vuejs的触摸ripple组件
- vue-event-calendar ★91 - 简单小巧的事件日历组件
- v-bar ★91 - 虚拟响应跨浏览器滚动条
- vue2-timepicker ★84 - 下拉时间选择器
- vuejs-paginate ★80 - 分页VueJS组件
- vue-toast-mobile ★79 - VueJS的toast插件
- vue-datepicker ★78 - 漂亮的Vue日期选择器组件
- vue-easy-slider ★77 - Vue 2.x的滑块组件
- vue-float-label ★76 - VueJS浮动标签模式
- vue-scrollbar ★76 - 最简单的滚动区域组件
- vant ★74 - 有赞出品的Vue2.0移动UI
- vue-json-tree-view ★74 - Vue的JSON树视图
- vue-slick ★73 - 实现流畅轮播框的vue组件
- vue-keynote ★73 - 实现声明性代码幻灯片
- vue-google-signin-button ★73 - 导入谷歌登录按钮
- vue-rate ★68 - Vue评分组件
- awesome-mask ★67 - 拥有独一无二mask的表单
- vue-radial-progress ★65 - Vue.js放射性进度条组件
- vue-quill ★65 - vue组件构建quill编辑器
- vue-date-picker ★63 - VueJS日期选择器组件
- coffeebreak ★62 - 实时编辑CSS组件工具
- vue-good-wizard ★61 - VueJS 2.x wizard plugin
- vue-loading ★60 - 使用SVG加载
- datepicker ★59 - 基于flatpickr的时间选择组件
- vue-placeholders ★58 - 处理占位符图片和乱码
- we-vue ★55 - Vue2及weui1开发的组件
- vue-fullcalendar ★55 - vue FullCalendar封装
- vue-chartkick ★53 - VueJS一行代码实现优美图表
- cxlt-vue2-toastr ★52 - 弹出提示的Vue2组件
- vue-formly ★51 - VueJS的JS表单
- vue2-autocomplete ★51 - vue2的自动完成组件
- vue-morris ★50 - Vuejs组件封装Morrisjs库
- veui ★50 - VueJS百度企业UI
- vue-components ★49 - 移动端UI组件库
- vue-star-rating ★49 - 简单高度自定义的星星评级组件
- vue-tagsinput ★48 - 基于VueJS的标签组件
- vue-tabs ★47 - 多tab页轻型框架
- vue-popup-mixin ★47 - 用于管理弹出框的遮盖层
- vue-ripple-directive ★45 - 使用Vue指令的Material波纹效果
- vue-cropper ★42 - 一个简单的vue 的图片裁剪插件
- vue-ztree ★41 - 用 vue 写的树层级组件
- vue-touch-keyboard ★41 - VueJS虚拟键盘组件
- cubeex ★40 - 包含一套完整的移动UI
- vue-chart ★40 - 强大的高速的vue图表解析
- vue-music-master ★40 - vue手机端网页音乐播放器
- vue-bootstrap-table ★39 - 可排序可检索的表格
- vue-emoji ★39 - 好用的emoji插件
- handsontable ★39 - 网页表格组件
- vue-form-2 ★37 - 全面的HTML表单管理的解决方案
- vue-area ★37 - 省市区三级联动插件
- vue-side-nav ★37 - 响应式的侧边导航
- vue-image-scroll ★36 - 仿网易云音乐的vue图片滚动插件
- vue-pull-to-refresh ★35 - Vue2的上拉下拉
- mint-indicator ★35 - VueJS移动加载指示器插件
- vue-image-clip ★34 - 基于vue的图像剪辑组件
- vue-material-design ★34 - Vue MD风格组件
- vue-simple-upload ★31 - 简单的VueJS上传组件
- chartjs ★29 - Vue Bulma的chartjs组件
- vue-lazy-background-images ★29 - 懒加载背景组件的Vue组件
- vue-ripple ★29 - 制作谷歌MD风格涟漪效果的Vue组件
- vue-scroll ★27 - vue滚动
- laravel-vue-pagination ★26 - VueJS分页组件
- vue-datepicker-simple ★26 - 基于vue的日期选择器
- vue-m-carousel ★26 - vue 移动端轮播组件
- vue-parallax ★23 - 整洁的视觉效果
- vue-img-loader ★22 - 图片加载UI组件
- vue-tree ★22 - vue树视图组件
- vue-verify-pop ★22 - 带气泡提示的vue校验插件
- vue-waves ★22 - waves的VueJS版本
- vue-smoothscroll ★20 - smoothscroll的VueJS版本
- vue-city ★19 - 城市选择器
- vue-laypage ★17 - 简单的VueJS分页组件
- vue-typewriter ★15 - vue组件类型
- vue-ios-alertview ★14 - iOS7+ 风格的alertview服务
- vue-cmap ★14 - Vue China map可视化组件
- paco-ui-vue ★12 - PACOUI的vue组件
- vue-cascading-address ★9 - vue地区选择器
- dd-vue-component ★7 - 订单来了的公共组件库
- vue-button ★5 - Vue按钮组件
开发框架
- vue.js ★56380 - 流行的轻量高效的前端组件化方案
- vue-admin ★4612 - Vue管理面板框架
- quasar ★2353 - 响应式网站和混合移动应用程序
- electron-vue ★2085 - Electron及VueJS快速启动样板
- vue-element-admin ★1986 - vue2管理系统模板
- vuepack ★1618 - 现代VueJS启动器
- N3-components ★656 - 快速构建页面和应用
- VueThink ★373 - 前后端分离框架
- vue-2.0-boilerplate ★358 - Vue2单页应用样板
- vue-spa-template ★344 - 前后端分离后的单页应用开发
- Framework7-Vue ★283 - VueJS与Framework7结合
- vue-bulma ★215 - 轻量级高性能MVVM Admin UI框架
- vuetiful ★189 - 创建业务及管理应用程序
- vue-stack-2.0 ★155 - Vue2项目样板
- vue2-admin-lte ★154 - vue2版本的adminLTE
- jspangAdmin ★140 - 基于Vue2的后台管理系统
- vue-fullstack ★140 - 实时的用户友好的后台系统
- vue-paper-dashboard ★120 - Vue的Tim Paper 仪表盘
- vue-webgulp ★113 - 仿VueJS Vue loader示例
- vue-element-starter ★83 - vue启动页
- vuemin ★17 - 基于Vue的企业级前端开发框架
- vue-team-template ★12 - 一种构建vue项目的选择方案
实用库
- vuex ★8043 - 专为 Vue.js 应用程序开发的状态管理模式
- vue-loader ★1847 - Vue.js 针对Webpack的组件装载插件
- vue-validator ★1807 - vue的验证器插件
- vue-lazyload ★1224 - 用于懒加载的Vue模块
- vuelidate ★1075 - 简单轻量级的基于模块的Vue.js验证
- vue-i18n ★1053 - VueJS的多语言切换插件
- qingcheng ★736 - qingcheng主题
- Vue-Socketio ★533 - VueJS的socketio实现
- vue-awesome ★532 - VueJS字体Awesome组件
- vue-desktop ★496 - 创建管理面板网站的UI库
- vue-axios ★491 - 将axios整合到VueJS的封装
- vue-meta ★467 - 管理app的meta信息
- vue-head ★396 - head标签的meta信息操作
- meteor-vue-component ★382 - vue和meteor整合
- avoriaz ★338 - VueJS测试实用工具库
- portal-vue ★239 - 在组件外部渲染DOM
- vue-flatpickr ★228 - 封装Flatpickr的Vue组件
- vue-timeago ★195 - VueJS的时间前组件
- blessed-vue ★181 - 编写命令行UI的VueJS运行时
- vue-unit ★179 - 创建单元测试组件
- vue-authenticate ★177 - 简单的VueJS身份认证库
- vue-scrollTo ★174 - 滚动到元素的VueJS指令
- vue-svg-icon ★157 - vue2的可变彩色svg图标方案
- vue-focus ★148 - 可重用VueJS组件的焦点指令
- meteor-vue ★134 - VueJS和Meteor的桥接
- element-admin ★130 - 支持 vuecli 的 Element UI 的后台模板
- vuep ★118 - 用实时编辑和预览来渲染Vue组件
- vuet ★116 - 一个跨页面、跨组件的状态管理插件
- vue-bootstrap-modal ★112 - vue的Bootstrap样式组件
- vue-animate ★106 - 跨浏览器CSS3动画库
- vue-property-decorator ★104 - VueJS和属性Decorator
- vue-aplayer ★100 - 便于配置的音乐播放器vue2组件
- vue-password-strength-meter ★97 - 交互式密码强度计
- vue-websocket ★91 - VueJS的Websocket插件
- vue-local-storage ★88 - 具有类型支持的Vuejs本地储存插件
- vue-recyclist ★88 - vuejs无限滚动列表
- vue-lazy-render ★87 - 用于Vue组件的延迟渲染
- vue-qart ★86 - 用于qartjs的Vue2指令
- vue-framework7 ★85 - 结合VueJS使用的Framework7组件
- vue-cordova ★85 - Cordova的VueJS插件
- http-vue-loader ★84 - 从html及js环境加载vue文件
- vue-parallax ★84 - 快速60fps视差滚动效果组件
- vue-clipboard ★84 - VueJS的剪贴板
- vue-kindergarten ★83 - 将kindergarten集成到VueJS应用
- vue-events ★83 - 简化事件的VueJS插件
- vue-notifications ★80 - 非阻塞通知库
- vue-online ★77 - reactive的在线和离线组件
- vue-shortkey ★74 - 应用于Vue.js的Vue-ShortKey 插件
- vue-bus ★71 - VueJS的事件总线
- vuex-i18n ★71 - 定位插件
- uiv ★70 - Vue实现的Bootstrap组件
- vue-router-transition ★69 - 页面过渡插件
- vue-gesture ★69 - VueJS的手势事件插件
- vue-clip ★67 - 简约的破解文件上传器
- vue-electron ★66 - 将选择的API封装到Vue对象中的插件
- cleave ★64 - 基于cleave.js的Cleave组件
- vuemit ★63 - 处理VueJS事件
- vue-worker ★56 - 使用webworkers的Vue插件
- vue-acl ★54 - VueJS访问控制列表插件
- vue-ts-loader ★54 - 在Vue装载机检查脚本
- Vue.resize ★51 - 检测HTML调整大小事件的vue指令
- vuedeux ★50 - 轻量级开源实用用层
- vue-ls ★49 - 适配Vuecontext中LocalStorage的Vue插件
- lazy-vue ★48 - 懒加载图片
- vue-pagination-2 ★46 - 简单通用的分页组件
- v-media-query ★44 - vue中添加用于配合媒体查询的方法
- vue-observe-visibility ★42 - 当元素在页面上可见或隐藏时检测
- vue-lazy-component ★38 - 懒加载组件或者元素的Vue指令
- vue-reactive-storage ★37 - vue插件的Reactive层
- vue-helmet ★37 - HTML标题管理器
- voir ★35 - 保持mutation与视图组件的分离
- vuex-shared-mutations ★34 - 分享某种Vuex mutations
- vue-drag-zone ★28 - 适用于Vue2的dom拖动组件
- vue-eslint-parser ★27 - ESLint自定义解析
- modal ★26 - Vue Bulma的modal组件
- vue-plan ★25 - Vuex-状态管理
- vue-file-base64 ★22 - 将文件转换为Base64的vue组件
- vue-methods-promise ★21 - 使vue方法支持promise
- Vue.ImagesLoaded ★20 - 检测图片加载的VueJS指令
- Famous-Vue ★16 - Famous库的vue组件
- leo-vue-validator ★15 - 异步的表单验证组件
- vue-titlecase ★13 - 用于字符串titlecased的VueJS过滤器
- Vue-Easy-Validator ★12 - 简单的表单验证
- vue-zoombox ★12 - 一个高级zoombox
- vue-truncate-filter ★10 - 截断字符串的VueJS过滤器
- vue-router-storage ★9 - vue历史路由持久化的解决方案
- vue-input-autosize ★9 - 基于内容自动调整文本输入的大小
- vue-data-validator ★4 - Vuejs2的数据验证插件
- vue-lazyloadImg ★4 - 图片懒加载插件
服务端
- nuxt.js ★4564 - 用于服务器渲染Vue app的最小化框架
- unvue ★310 - 使用简单的通用VueJS应用
- express-vue ★302 - 简单的使用服务器端渲染vue.js
- vue-ssr ★92 - 非常简单的VueJS服务器端渲染模板
- doubanMovie-SSR ★85 - Vue豆瓣电影服务端渲染
- vue-ssr ★80 - 结合Express使用Vue2服务端渲染
- vue-easy-renderer ★44 - Nodejs服务端渲染
辅助工具
- vue-play ★641 - 展示Vue组件的最小化框架
- DejaVue ★635 - Vuejs可视化及压力测试
- vscode-VueHelper ★228 - 目前vscode最好的vue代码提示插件
- vue-generate-component ★56 - 轻松生成Vue js组件的CLI工具
- vue-multipage-cli ★40 - 简单的多页CLI
- VuejsStarterKit ★29 - vuejs starter套件
应用实例
- koel ★7773 - 基于网络的个人音频流媒体服务
- pagekit ★4225 - 轻量级的CMS建站系统
- vue-manage-system ★2057 - 后台管理系统解决方案
- vuedo ★1265 - 博客平台
- jackblog-vue ★1120 - 个人博客系统
- PJ Blog ★1018 - 开源博客
- vue-cnode ★787 - 重写vue版cnode社区
- vms ★629 - vuejs2管理系统
- CMS-of-Blog ★541 - 博客内容管理器
- goldfish ★518 - 用于HashiCorp Vault的Admin UI
- rss-reader ★368 - 简单的rss阅读器
- vue-ghpages-blog ★254 - 依赖GitHub Pages无需本地生成的静态博客
- vue-blog ★143 - 使用Vue2.0 和Vuex的vue-blog
- swoole-vue-webim ★137 - Web版的聊天应用
- tomato5 ★134 - 实时的协作工具
- Loopa-News ★133 - 开源社会新闻应用
- vue2-management-platform ★74 - vue2.0+ elementUI 后台管理平台
- vue-dashing-js ★70 - nuvo-dashing-js的fork
- fewords ★63 - 功能极其简单的笔记本
- adminify ★46 - 一个基于Vuetify material的Admin面板
Demo示例
- vue2-elm ★8036 - 重写饿了么webapp
- Vue-cnodejs ★2491 - 基于vue重写Cnodejs.org的webapp
- NeteaseCloudWebApp ★1549 - 高仿网易云音乐的webapp
- vue2-happyfri ★1535 - vue2及vuex的入门练习项目
- vue-zhihu-daily ★1010 - 知乎日报 with Vuejs
- vue2-demo ★994 - 从零构建vue2 + vue-router + vuex 开发环境
- vue-wechat ★939 - vue.js开发微信app界面
- eleme ★882 - 高仿饿了么app商家详情
- vue-demo ★755 - vue简易留言板
- bilibili-vue ★694 - 全栈式开发bilibili首页
- spa-starter-kit ★646 - 单页应用启动套件
- VueDemo_Sell_Eleme ★636 - Vue2高仿饿了么外卖平台
- vue-music ★621 - Vue 音乐搜索播放
- douban ★606 - 基于vue全家桶的精致豆瓣DEMO
- vue-Meizi ★604 - vue最新实战项目
- maizuo ★603 - vue/vuex/redux仿卖座网
- vue-WeChat ★558 - 基于Vue2高仿微信App的单页应用
- vue-demo-kugou ★500 - vuejs仿写酷狗音乐webapp
- vue2-manage ★457 - 基于 vue + element-ui 的后台管理系统
- zhihudaily-vue ★455 - 知乎日报web版
- vue-163-music ★448 - vue仿网易云音乐客户端版
- vue-axios-github ★448 - 登录拦截登出功能
- douban ★440 - 模仿豆瓣前端
- vue-shopping ★404 - 蘑菇街移动端
- vue2.0-taopiaopiao ★402 - vue2.0与express构建淘票票页面
- xyy-vue ★396 - 大学生交流平台
- easy-vue ★370 - 使用Vue实现简易web
- vue2.x-douban ★360 - Vue2实现简易豆瓣电影webApp
- vue2-MiniQQ ★351 - 基于Vue2实现的仿手机QQ单页面应用
- mi-by-vue ★291 - VueJS仿小米官网
- daily-zhihu ★275 - 基于Vue2的知乎日报单页应用
- vue-leancloud-blog ★268 - 一个前后端完全分离的单页应用
- VueMusic-PC ★260 - Vue.js高还原网易云音乐系列
- node-vue-server-webpack ★253 - Node.js+Vue.js+webpack快速开发框架
- beauty ★245 - 豆瓣美女clone
- vue-adminLte-vue-router ★243 - vue和adminLte整合应用
- vue-fis3 ★217 - 流行开源工具集成demo
- notepad ★216 - 本地存储的记事本
- vue-demo-maizuo ★210 - 使用Vue2全家桶仿制卖座电影
- Pixel-Web ★198 - 一个 Vue 微博客户端
- netease_yanxuan ★198 - vue版网易严选
- tmdb-app ★194 - TMDbVueJS应用
- vue-express-mongodb ★189 - 简单的前后端分离案例
- vue-zhihudaily ★187 - 知乎日报 Web 版本
- Vdo ★179 - VueJS与MD重构豆瓣
- vue-blog ★171 - 单用户博客
- Wuji ★168 - 吾记网页版
- hello-vue-django ★160 - 使用带有Django的vuejs的样板项目
- Zhihu-Daily-Vue.js ★157 - Vuejs单页网页应用
- tencent-sports ★154 - Vue全家桶仿腾讯体育
- gouyan-movie-vue ★151 - 基于vue的在线电影影讯网站
- x-blog ★145 - 开源的个人blog项目
- vue-musicApp ★132 - 使用vue全家桶制作的音乐播放器
- vue-cnode ★131 - vue单页应用demo
- webpack-vue-vueRouter ★130 - webpack及vue开发的简单项目实例
- vue-koa-demo ★128 - 使用Vue2和Koa1的全栈demo
- vueBlog ★127 - 前后端分离博客
- websocket_chat ★127 - 基于vue和websocket的多人在线聊天室
- houtai ★125 - 基于vue和Element的后台管理系统
- vue-toutiao ★121 - vuejs高仿今日头条移动端
- vue-cnode ★121 - 开源的CNode社区
- vue-mini-shop ★121 - VueJS在线商店
- photoShare ★120 - 基于图片分享的社交平台
- iview2-management-system ★119 - 后台管理系统解决方案简单示例
- doubanMovie ★119 - 豆瓣电影展示
- eleme-vue2 ★112 - 仿饿了么H5纯前端Vue版
- vue-zhihu-daily ★111 - 基于Vue全家桶开发的知乎日报
- Vue-News ★107 - 基于vue全家桶的仿知乎日报单页应用
- douban-movie ★107 - 仿豆瓣电影wap端
- generator-loopback-vue ★104 - 典型前后端分离项目模板
- vue-quasar-admin-example ★99 - 将Quasar和VueJS应用于SPA项目
- vue-zhihudaily-2.0 ★97 - 使用Vue2.0+vue-router+vuex创建的zhihudaily
- vue-todos ★95 - vue最新实战项目教程
- vue-music ★91 - 网易云音乐Demo
- vue-qqmusic ★90 - Vue全家桶+Mint-Ui打造高仿QQMusic
- vue2.x-Cnode ★88 - 基于vue全家桶的Cnode社区
- vue-ruby-china ★86 - VueJS框架搭建的rubychina平台
- doubanMovie-SSR ★85 - Vue豆瓣电影服务端渲染
- vue-jd ★76 - 京东移动web商城
- vue-nReader ★73 - 使用vue2.0 + vue-router + vuex 的一个多页面小说阅读webapp
- VueBlog ★73 - 前后端分离的个人博客
- Zhihu_Daily ★73 - 基于Vue和Nodejs的Web单页应用
- vue-koa2-login ★67 - 使用 VueJS & NodeJS 实现的登录注册
- webApp ★64 - Vue2的移动端webApp音乐播放器
- vue-trip ★64 - vue2做的出行webapp
- seeMusic ★63 - 跨平台云音乐播放器
- github-explorer ★63 - 寻找最有趣的GitHub库
- vue-cli-multipage-bootstrap ★60 - 将vue官方在线示例整合到组件中
- vue-XiaoMi-Shop ★59 - 高仿小米商城的项目
- Vue-NetEaseCloudMusic ★59 - 模仿IOS版网易云音乐的手机网站
- life-app-vue ★59 - 使用vue2完成多功能集合到小webapp
- doubanApp ★55 - 用vue2实现仿豆瓣app
- ios7-vue ★52 - 使用vue2.0 vue-router vuex模拟ios7
- canvas-vue ★50 - 一个Vue+Cnavas酷炫后台管理
- vue-bushishiren ★49 - 不是诗人应用
- vue-ssr-boilerplate ★48 - 精简版的ofvue-hackernews-2
- vuecommunity ★47 - vue.js中文社区
- vue-music163 ★47 - 音乐VueJS项目
- Vue2-MV ★45 - 仿网易云音乐MV的webapp
- musiccloudWebapp ★44 - 用vuejs仿网易云音乐
- cnode-vue ★40 - 基于vue和vue-router构建的cnodejs web网站SPA
- Framework7-VueJS ★38 - 使用移动框架的示例
- m-eleme ★37 - 基于Vue全家桶仿饿了么移动端webapp
- sls-vuex2-demo ★37 - vuex2商城购物车demo
- eagles ★36 - 各种组件封装
- Todos_Vuejs ★35 - vuejs2搭建的极简的todolist
- vue-cnode ★35 - 用 Vue 做的 CNode 官网
- HyaReader ★35 - 移动友好的阅读器
- Vue-Admin ★33 - 基于Vue2的Admin系统
- vue2-hybridapp-haoshiqi ★32 - 实现单页面webapp以及hybridapp
- zhihu-daily ★32 - 轻松查看知乎日报内容
- gank ★32 - gankio资源的阅读应用
- vue-h5plus ★31 - 前卫的vue及html5plus跨平台demo
- vue-cnode-mobile ★29 - 搭建cnode社区
- vue-weather ★26 - 基于vue.js 2.0的百度天气应用
- vue-user-center ★26 - vuejs直播类应用web端个人中心
- zhihu-daily-vue ★22 - 知乎日报
- vue-cnode ★22 - 使用cNode社区提供的接口
- vue-starter ★22 - VueJs项目的简单启动页
- node-vue-fabaocn ★21 - 基于 node 和 vue 实现的移动官网
- vue-memo ★20 - 用 vue写的记事本应用
- v-notes ★20 - 简单美观的记事本
- vue-flexible-app ★19 - vue开发的一个简易app
- simply-calculator-vuejs ★19 - 用VueJS实现简易计算器
- vue-dropload ★19 - 用以测试下拉加载与简单路由
- Vuejs-SalePlatform ★19 - vuejs搭建的售卖平台demo
- vue-shopping-mall ★16 - 基于Vue.js 2.x系列 + vue2-router + axios + iview 商城
- qqmusic ★13 - QQ音乐vue
- vue-weather ★12 - VueJS天气demo
Web前端面试题目汇总
以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中有一些未解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢迎指正,水平有限,望各位不吝指教。:)
HTML/CSS部分
1、什么是盒子模型?
在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或区域。4个部分一起构成了css中元素的盒模型。
2、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
行内元素:a、b、span、img、input、strong、select、label、em、button、textarea
块级元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote
空元素:即系没有内容的HTML元素,例如:br、meta、hr、link、input、img
3、CSS实现垂直水平居中
一道经典的问题,实现方法有很多种,以下是其中一种实现:
HTML结构:
<div class="wrapper">
<div class="content"></div>
</div>
CSS:
.wrapper {
position: relative;
width: 500px;
height: 500px;
background-color: #ddd;
}
.content{
background-color:#6699FF;
width:200px;
height:200px;
position: absolute; //父元素需要相对定位
top: 50%;
left: 50%;
margin-top:-100px ; //二分之一的height,width
margin-left: -100px;
}
4、简述一下src与href的区别
href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。
src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
5、什么是CSS Hack?
一般来说是针对不同的浏览器写不同的CSS,就是 CSS Hack。
IE浏览器Hack一般又分为三种,条件Hack、属性级Hack、选择符Hack(详细参考CSS文档:css文档)。例如:
// 1、条件Hack
<!--[if IE]>
<style>
.test{color:red;}
</style>
<![endif]-->
// 2、属性Hack
.test{
color:#090\9; /* For IE8+ */
*color:#f00; /* For IE7 and earlier */
_color:#ff0; /* For IE6 and earlier */
}
// 3、选择符Hack
* html .test{color:#090;} /* For IE6 and earlier */
* + html .test{color:#ff0;} /* For IE7 */
6、简述同步和异步的区别
同步是阻塞模式,异步是非阻塞模式。
同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;
异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
7、px和em的区别
px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。
浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em
8、什么叫优雅降级和渐进增强?
渐进增强 progressive enhancement:
针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 graceful degradation:
一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
区别:
a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给
b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要
c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带
9、浏览器的内核分别是什么?
IE: trident内核
Firefox:gecko内核
Safari:webkit内核
Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核
Chrome:Blink(基于webkit,Google与Opera Software共同开发)
JavaScript部分
怎样添加、移除、移动、复制、创建和查找节点?
1)创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
2)添加、移除、替换、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入
3)查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值
getElementById() //通过元素Id,唯一性
实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。
/**
* 对象克隆
* 支持基本数据类型及对象
* 递归方法
*/
function clone(obj) {
var o;
switch (typeof obj) {
case "undefined":
break;
case "string":
o = obj + "";
break;
case "number":
o = obj - 0;
break;
case "boolean":
o = obj;
break;
case "object": // object 分为两种情况 对象(Object)或数组(Array)
if (obj === null) {
o = null;
} else {
if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {
o = [];
for (var i = 0; i < obj.length; i++) {
o.push(clone(obj[i]));
}
} else {
o = {};
for (var k in obj) {
o[k] = clone(obj[k]);
}
}
}
break;
default:
o = obj;
break;
}
return o;
}
如何消除一个数组里面重复的元素?
// 方法一:
var arr1 =[1,2,2,2,3,3,3,4,5,6],
arr2 = [];
for(var i = 0,len = arr1.length; i< len; i++){
if(arr2.indexOf(arr1[i]) < 0){
arr2.push(arr1[i]);
}
}
document.write(arr2); // 1,2,3,4,5,6
在Javascript中什么是伪数组?如何将伪数组转化为标准数组?
伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。
function log(){
var args = Array.prototype.slice.call(arguments);
//为了使用unshift数组方法,将argument转化为真正的数组
args.unshift('(app)');
console.log.apply(console, args);
};
Javascript中callee和caller的作用?
caller是返回一个对函数的引用,该函数调用了当前函数;
callee是返回正在被执行的function函数,也就是所指定的function对象的正文。
请描述一下cookies,sessionStorage和localStorage的区别
sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。
web storage和cookie的区别
Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。
除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。
统计字符串中字母个数或统计最多字母数。
var str = "aaaabbbccccddfgh";
var obj = {};
for(var i=0;i<str.length;i++){
var v = str.charAt(i);
if(obj[v] && obj[v].value == v){
obj[v].count = ++ obj[v].count;
}else{
obj[v] = {};
obj[v].count = 1;
obj[v].value = v;
}
}
for(key in obj){
document.write(obj[key].value +'='+obj[key].count+' '); // a=4 b=3 c=4 d=2 f=1 g=1 h=1
}
jQuery的事件委托方法on、live、delegate之间有什么区别?
如何理解闭包?
跨域请求资源的方法有哪些?
谈谈垃圾回收机制方式及内存管理
开发过程中遇到的内存泄露情况,如何解决的?
HTTP
一次完整的HTTP事务是怎样的一个过程?
基本流程:
a. 域名解析
b. 发起TCP的3次握手
c. 建立TCP连接后发起http请求
d. 服务器端响应http请求,浏览器得到html代码
e. 浏览器解析html代码,并请求html代码中的资源
f. 浏览器对页面进行渲染呈现给用户
HTTP的状态码有哪些?
HTTPS是如何实现加密?
算法相关
手写数组快速排序
关于快排算法的详细说明,可以参考阮一峰老师的文章快速排序
"快速排序"的思想很简单,整个排序过程只需要三步:
(1)在数据集之中,选择一个元素作为"基准"(pivot)。
(2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
参考代码:
var quickSort = function(arr) {
if (arr.length <= 1) { return arr; }
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++){
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
};
JavaScript实现二分法查找
二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:
(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
(3)如果某一步数组为空,则表示找不到目标元素。
参考代码:
// 非递归算法
function binary_search(arr, key) {
var low = 0,
high = arr.length - 1;
while(low <= high){
var mid = parseInt((high + low) / 2);
if(key == arr[mid]){
return mid;
}else if(key > arr[mid]){
low = mid + 1;
}else if(key < arr[mid]){
high = mid -1;
}else{
return -1;
}
}
};
var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result = binary_search(arr,10);
alert(result); // 9 返回目标元素的索引值
// 递归算法
function binary_search(arr,low, high, key) {
if (low > high){
return -1;
}
var mid = parseInt((high + low) / 2);
if(arr[mid] == key){
return mid;
}else if (arr[mid] > key){
high = mid - 1;
return binary_search(arr, low, high, key);
}else if (arr[mid] < key){
low = mid + 1;
return binary_search(arr, low, high, key);
}
};
var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result = binary_search(arr, 0, 13, 10);
alert(result); // 9 返回目标元素的索引值
Web安全
你所了解到的Web攻击技术
(1)XSS(Cross-Site Scripting,跨站脚本攻击):指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击。
(2)SQL注入攻击
(3)CSRF(Cross-Site Request Forgeries,跨站点请求伪造):指攻击者通过设置好的陷阱,强制对已完成的认证用户进行非预期的个人信息或设定信息等某些状态更新。
前端性能
如何优化图像、图像格式的区别?
浏览器是如何渲染页面的?
设计模式
对MVC、MVVM的理解
正则表达式
写一个function,清除字符串前后的空格。(兼容所有浏览器)
function trim(str) {
if (str && typeof str === "string") {
return str.replace(/(^\s*)|(\s*)$/g,""); //去除前后空白符
}
}
使用正则表达式验证邮箱格式
var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/;
var email = "example@qq.com";
console.log(reg.test(email)); // true
职业规划
对前端工程师这个职位你是怎么样理解的?
a. 前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好
b. 参与项目,快速高质量完成实现效果图,精确到1px;
c. 与团队成员,UI设计,产品经理的沟通;
d. 做好的页面结构,页面重构和用户体验;
e. 处理hack,兼容、写出优美的代码格式;
f. 针对服务器的优化、拥抱最新前端技术。
MySQL 用户权限详细汇总
1,MySQL权限体系
MySQL 的权限体系大致分为5个层级:
全局层级:
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON .和REVOKE ALL ON .只授予和撤销全局权限。
数据库层级:
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db表中。GRANT ALL ON db_name.和REVOKE ALL ON db_name.只授予和撤销数据库权限。
表层级:
表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
列层级:
列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
子程序层级:
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。
这些权限信息存储在下面的系统表中:
mysql.user
mysql.db
mysql.host
mysql.table_priv
mysql.column_priv
mysql. procs_priv
当用户连接进来,mysqld会通过上面的这些表对用户权限进行验证!
2, 千里追踪之5表
相对于Oracle来说,mysql的特性是可以限制ip,用户user、ip地址host、密码passwd这3个是用户管理的基础,权限的细节基本在mysql.user、mysql.db、mysql.host、mysql.table_priv、mysql.column_priv这几张表就可以看到很多细节,接下来仔细分析这些表就可以知道权限的奥秘。
演示过程中需要建立用户来演示,先简单介绍下如何创建用户:
GRANT priv_type ON database.table
TO user[IDENTIFIED BY [PASSWORD] ‘password’]
[,user [IDENTIFIED BY [PASSWORD] ‘password’]…]
示例:
GRANT SELECT, INSERT, UPDATE, DELETE ON d3307.* TO zengxiaoteng@’%’ IDENTIFIED BY ‘0523’;
2.1db表
2.1.1 表结构如下:
mysql> desc mysql.db;
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| Db | char(64) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
+-----------------------+---------------+------+-----+---------+-------+
22 rows in set (0.02 sec)
2.1.2分析如下:
db表存储了所有对一个数据库的所有操作权限。创建用户的时候,都会往Host字段,User字段,Password字段录入用户信息;
而当执行 GRANT SELECT,INSERT ON d3307.* TO u4@’%’ IDENTIFIED BY ‘u40523’;类似的授权语句的话,Select_priv和Insert_priv字段的值会变成Y其它字段仍然是N;
当你执行了GRANT ALL ON d3307.* TO u4@’%’ IDENTIFIED BY ‘u40523’;类似的复制语句的话,后面的字段都会变成Y的值;
2.1.3 创建单个select、insert授予权限
创建用户:
GRANT SELECT,INSERT ON d3307.* TO user4@'192.168.52' IDENTIFIED BY 'user0523';
应该除了Host、db、user字段有值,除了Select_priv、Insert_priv值为Y外,其它的都是N。
查看mysql.db表的记录正是如此,如下所示:
mysql> SELECT * FROM mysql.`db` where user='user4'\G;
*************************** 1. row ***************************
Host: 192.168.52
Db: d3307
User: user4
Select_priv: Y
Insert_priv: Y
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Execute_priv: N
Event_priv: N
Trigger_priv: N
1 row in set (0.01 sec)
ERROR:
No query specified
2.1.4 授予ALL权限
执行sql语句建立用户:
GRANT ALL ON d3307.* TO dba5@'192.168.52.1' IDENTIFIED BY 'dba0523';
建立用户的时候,如下所示,除了Host、db、user字段外,所有的*_priv字段记录都会变成Y值,(Grant_priv仍然是N值除非加了WITH* GRANT OPTION执行GRANT ALL ON d3307.* TO dba5@’192.168.52.1’ IDENTIFIED BY ‘dba0523’ WITH GRANT OPTION 😉
如下所示:
mysql> SELECT * FROM mysql.`db` where user='dba5'\G;
*************************** 1. row ***************************
Host: 192.168.52.1
Db: d3307
User: dba5
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Execute_priv: Y
Event_priv: Y
Trigger_priv: Y
1 row in set (0.00 sec)
ERROR:
No query specified
2.2 user表
2.2.1 表结构:
mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | YES | | | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+---------+-------+
43 rows in set (0.10 sec)
2.2.2 分析
存储用户记录的表,存储了用户的信息,每一次创建用户的时候,都会往这个表里录入记录,当你执行了,都会往Host字段,User字段,Password字段录入数据,但是后面的Select_priv、Insert_priv、Update_priv等字段的值,只有赋予GRANT ALL ON . TO timdba@’192.%’ IDENTIFIED BY ‘timdba0523’;类似的对所有库的操作权限的时候才会被记录成Y,否则都记录成N。
2.2.3 创建对库所有表有操作权限的普通用户
创建用户:
GRANT SELECT,UPDATE ON d3307.* TO user6@'192.168.52.1' IDENTIFIED BY 'user0523';
分析结果:存储在mysql.user表里面的记录当中,Host、User、Password是有值的,但是其它的Select_priv等*_priv字段值都是N。
验证结果,去查看表里的存储记录,如下所示:
mysql> SELECT * FROM mysql.user where user='user6'\G;
*************************** 1. row ***************************
Host: 192.168.52.1
User: user6
Password: *A4D1F6ACEBC5D3EB0F6D33C7DCC629E8BE55B75A
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string:
password_expired: N
1 row in set (0.00 sec)
ERROR:
No query specified
2.2.4 创建对于所有表有操作权限的用户
创建用户:
mysql> GRANT SELECT,UPDATE ON *.* TO user7@'%' IDENTIFIED BY 'user0523';
Query OK, 0 rows affected (0.00 sec)
分析:
基本的Host、User、Password字段有记录值,然后grant了select和update所以关于*_priv字段中select和update字段有值为Y,其它*_priv字段值应该是N。
查看记录结果,分享正确,如下所示:
mysql> SELECT * FROM mysql.user where user='user7'\G;
*************************** 1. row ***************************
Host: %
User: user7
Password: *A4D1F6ACEBC5D3EB0F6D33C7DCC629E8BE55B75A
Select_priv: Y
Insert_priv: N
Update_priv: Y
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string:
password_expired: N
1 row in set (0.00 sec)
ERROR:
No query specified
2.3 tables_priv表
2.3.1 查看表结构
mysql> desc mysql.tables_priv;
+-------------+-----------------------------------------------------------------------------------------------------------------------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------+------+-----+-------------------+-----------------------------+
| Host | char(60) | NO | PRI | | |
| Db | char(64) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Table_name | char(64) | NO | PRI | | |
| Grantor | char(77) | NO | MUL | | |
| Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| Table_priv | set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') | NO | | | |
| Column_priv | set('Select','Insert','Update','References') | NO | | | |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------+------+-----+-------------------+-----------------------------+
8 rows in set (0.00 sec)
2.3.2 分析:
记录了对一个表的单独授权记录,只有执行grant insert on dbname.tablename to user1@’%’identified by ‘pwd’;类似的授权记录才会在这个表里录入授权信息;其中各个字段涵义如下:
字段 | 存储的数据 |
---|---|
Host字段 | 用户的登录ip范围 |
User字段 | 表所在的数据库名称 |
Table_name字段 | 授权的表的名称 |
Grantor字段 | 执行grant建立用户的授权者 |
Timestamp字段 | 0000-00-00 00:00:00 |
Table_priv字段 | 所授予的操作表的权限,比如select、udate、delete等 |
Column_priv字段 | 对这个表的某个字段单独授予的权限 |
另外当赋予all在某张表上的时候,Table_priv列会多处所有关于表的授权记录,描述如下:
Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,Create View,Show view,Trigger。
2.3.3 创建单独操作这个表的用户
创建用户:
mysql> GRANT INSERT,SELECT,UPDATE ON d3307.t TO user8@'192.168.52.1' IDENTIFIED BY 'dba0523';
Query OK, 0 rows affected (0.00 sec)
分析结果:
应该是Host、Db、User、Table_name、Grantor、Timestamp、Table_priv是有值的,但是Column_priv没有值,因为没有单独对某一个列做了授权限制的。
查看权限,如下所示:
mysql> SELECT * FROM mysql.tables_priv where user='user8'\G;
*************************** 1. row ***************************
Host: 192.168.52.1
Db: d3307
User: user8
Table_name: t
Grantor: root@localhost
Timestamp: 0000-00-00 00:00:00
Table_priv: Select,Insert,Update
Column_priv:
1 row in set (0.00 sec)
ERROR:
No query specified
2.3.4 单独为某个列授权
授权语句操作:
mysql> GRANT UPDATE(created_time) ON d3307.t TO user8@'192.168.52.1';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT(uname) ON d3307.t TO user8@'192.168.52.1';
Query OK, 0 rows affected (0.00 sec)
分析:
单独为某个列授权,会记录在这个表的Column_priv字段里面,会记录下对单个列的授权操作记录
查看记录:
mysql> SELECT * FROM mysql.tables_priv where user='user8'\G;
*************************** 1. row ***************************
Host: 192.168.52.1
Db: d3307
User: user8
Table_name: t
Grantor: root@localhost
Timestamp: 0000-00-00 00:00:00
Table_priv: Select,Insert,Update
Column_priv: Select,Update
1 row in set (0.00 sec)
ERROR:
No query specified
而且还会在另外一个权限表mysql.columns_priv留下记录单独的授权记录,如下所示:
mysql> SELECT * FROM mysql.columns_priv WHERE USER='user8';
+--------------+-------+-------+------------+--------------+---------------------+-------------+
| Host | Db | User | Table_name | Column_name | Timestamp | Column_priv |
+--------------+-------+-------+------------+--------------+---------------------+-------------+
| 192.168.52.1 | d3307 | user8 | t | created_time | 0000-00-00 00:00:00 | Update |
| 192.168.52.1 | d3307 | user8 | t | uname | 0000-00-00 00:00:00 | Select |
+--------------+-------+-------+------------+--------------+---------------------+-------------+
2 rows in set (0.00 sec)
2.4 columns_priv表
2.4.1 表结构如下:
mysql> desc mysql.columns_priv;
+-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
| Host | char(60) | NO | PRI | | |
| Db | char(64) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Table_name | char(64) | NO | PRI | | |
| Column_name | char(64) | NO | PRI | | |
| Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| Column_priv | set('Select','Insert','Update','References') | NO | | | |
+-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
7 rows in set (0.04 sec)
2.4.2 分析
单独对某一列有操作权限的时候,会将权限信息记录在这个表里面,比如新建立一个账号GRANT UPDATE(uname) ON d3307.t TO user9@’192.168.52.%’ IDENTIFIED BY ‘user0520’; 那么就会在这个表上录入授权信息记录,重点看Column_name字段和Column_priv字段的值。
2.4.3 实际操作
创建用户操作:
mysql> GRANT UPDATE(uname) ON d3307.t TO user9@'192.168.52.%' IDENTIFIED BY 'user0520';
Query OK, 0 rows affected (0.00 sec)
查看结果,会在这个columns_priv表留下一条记录:
mysql> SELECT * FROM mysql.columns_priv WHERE USER='user9';
+--------------+-------+-------+------------+-------------+---------------------+-------------+
| Host | Db | User | Table_name | Column_name | Timestamp | Column_priv |
+--------------+-------+-------+------------+-------------+---------------------+-------------+
| 192.168.52.% | d3307 | user9 | t | uname | 0000-00-00 00:00:00 | Update |
+--------------+-------+-------+------------+-------------+---------------------+-------------+
1 row in set (0.00 sec)
2.5 procs_priv表
2.5.1 表结构
mysql> desc proxies_priv;
+--------------+------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------+------+-----+-------------------+-----------------------------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Proxied_host | char(60) | NO | PRI | | |
| Proxied_user | char(16) | NO | PRI | | |
| With_grant | tinyint(1) | NO | | 0 | |
| Grantor | char(77) | NO | MUL | | |
| Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+------------+------+-----+-------------------+-----------------------------+
7 rows in set (0.04 sec)
2.6.2分析:
procs_priv表可以对存储过程和存储函数进行权限设置。主要字段:proc_priv。
3,创建用户
3.1、CREATE USER创建用户
使用CREATE USER语句创建用户,必须要拥有CREATE USER权限。其格式如下:
CREATE USER user[IDENTIFIED BY [PASSWORD] 'password'],
[user[IDENTIFIED BY [PASSWORD] 'password']]...
其中,user参数表示新建用户的账户,user由用户名(User)和主机名(Host)构成;IDENTIFIED BY关键字用来设置用户的密码;password参数表示用户的密码;如果密码是一个普通的字符串,就不需要使用PASSWORD关键字。可以没有初始密码。
例如
CREATE USER 'sys'@'%' IDENTIFIED BY 'sys';
执行之后user表会增加一行记录,但权限暂时全部为‘N’。
3.2、用INSERT语句新建普通用户
可以使用INSERT语句直接将用户的信息添加到mysql.user表。但必须拥有mysql.user表的INSERT权限。
另外,ssl_cipher、x509_issuer、x509_subject等必须要设置值,否则INSERT语句无法执行。
示例:
INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) VALUES(‘%’,’newuser1’,PASSWORD(‘123456’),”,”,”)
执行INSERT之后,要使用命令:FLUSH PRIVILEGES;命令来使用户生效。
3.3、用GRANT语句来新建普通用户
用GRANT来创建新的用户时,能够在创建用户时为用户授权。但需要拥有GRANT权限。
语法如下:
GRANT priv_type ON database.table
TO user[IDENTIFIED BY [PASSWORD] 'password']
[,user [IDENTIFIED BY [PASSWORD] 'password']...]
priv_type:参数表示新yoghurt的权限;
databse.table:参数表示新用户的权限范围;
user:参数新用户的账户,由用户名和主机构成;
IDENTIFIED BY关键字用来设置密码;
password:新用户密码;
PS:GRANT语句可以同时创建多个用户。.与db.*的区别在于。.对所有数据库生效,所以user表的SELECT会变为Y。而db.*user表为’N’,更改的是Db表。
4,删除用户
4.1 drop user删除用户
DROP USER语句删除普通用户,需要拥有DROP USER权限。
语法如下:
DROP USER user[,user]...
user是需要删除的用户,由用户名(User)和主机名(Host)构成。
4.2 DELETE语句删除普通用户
可以使用DELETE语句直接将用户的信息从mysql.user表中删除。但必须拥有对mysql.user表的DELETE权限。DELETE FROM mysql.user WHERE Host = ‘%’ AND User = ‘admin’; 删除完成后,一样要FLUSH PRIVILEGES才生效。
5,修改用户密码
5.1 使用mysqladmin命令来修改root用户的密码
语法:
mysqladmin -u -username -p password "new_password"
新密码(new_password)必须用括号括起来,单引号会报错。
示例,修改中要输入旧的密码来验证:
[root@data02 ~]# mysqladmin -u timman -p password "tim" --socket=/usr/local/mysql3307/mysql.sock
Enter password:
[root@data02 ~]#
[root@data02 ~]# mysql --socket=/usr/local/mysql3307/mysql.sock -utimman -ptim -e "select @@port";
+--------+
| @@port |
+--------+
| 3307 |
+--------+
[root@data02 ~]#
5.2 修改user表
UPDATE user表的passwor字段的值,也可以达到修改密码的目的;
UPDATE user SET Password = PASSWORD('123') WHERE USER = 'myuser';
FLUSH PRIVILEGES;
刷新后生效。
5.3 使用SET语句来修改密码
使用root用户登录到MySQL服务器后,可以使用SET语句来修改密码:
修改自己的密码,不需要用户名
SET PASSWORD = PASSWORD("123");
修改其他用户密码:
SET PASSWORD FOR 'myuser'@'%'=PASSWORD("123456") FOR 用户名@主机名
5.4 GRANT语句来修改普通用户的密码
使用GRANT语句修改普通用户的密码,必须拥有GRANT权限。
GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
示例:
GRANT SELECT ON *.* TO 'user10'@'%' IDENTIFIED BY '123'
5.5 忘记用户密码的解决办法
普通用户,直接用root超级管理员登录进去修改密码就可以了,但是如果root密码丢失了,怎么办呢?
5.5.1 msyqld_saft方式找回密码
停止mysql:service mysqld stop;
安全模式启动:mysqld_safe –skip-grant-tables &
无密码回车键登录:mysql -uroot –p
重置密码:use mysql; update user set password=password(“”) where user=’root’ and host=’localhost’; flush privileges;
正常启动:service mysql restart
再使用mysqladmin: mysqladmin password ‘123456’
5.5.2 使用普通账号来找回密码
–>(1):有一个修改test库的用户:grant create,delete,update,insert,select on d3307.* to test@’%’ identified by ‘t1’;
–>(2):复制user表文件到test库下并且赋予mysql用户访问权限:
cp /home/data/mysql/data/mysql/user.* /home/data/mysql/data/test/;chown mysql.mysql /home/data/mysql/data/test/user.*
–>(3):mysql -utest -pt1登录修改root密码:
–>(4):将test库的user表文件覆盖 mysql库的user表文件
cp /home/data/mysql/data/mysql/user.* /tmp/; mv /home/data/mysql/data/test/user.* /home/data/mysql/data/mysql/ ; chown mysql.mysql /home/data/mysql/data/mysql/user.*;
–>(5):查找mysql进程号,并且发送SIGHUP信号,重新加载权限表。
pgrep -n mysql; kill -SIGHUP 12234;
–>(6):无密码登录,再使用mysqladmin重新设置密码。
PS:请参考第20课的视频,那里有详细的记录整个过修改密码的过程。
6,收回用户权限
查看权限:
SHOW GRANTS; SHOW GRANTS FOR user10@'%';
或者直接执行sql命令去mysql数据库下的user表中查看存储着用户的基本权限:
SELECT * FROM mysql.user WHERE USER='user10' AND HOST='%';
使用revoke关键字来收回权限:
REVOKE priv_type[(column_list)]
ON database.table
FROM user[,user]
示例:
REVOKE EXECUTE ON d3307.* FROM user10@'%';
7,数据库用户划分
7.1 普通数据管理用户:
赋予对业务表的查询维护权限即可,授权sql如下:
GRANT SELECT, INSERT, UPDATE, DELETE ON d3307.* TO zengxiaoteng@'%' IDENTIFIED BY '0523';
7.2 开发人员账户:
赋予增删改查的权限,授权sql如下:
GRANT SELECT,INSERT,DELETE,UPDATE ON d3307.* TO huyan@'%' IDENTIFIED BY '0523';
授予创建、修改、删除 MySQL 数据表结构权限。
GRANT CREATE ON d3307.* TO huyan@’192.168.52.11’;
GRANT ALTER ON d3307.* TO huyan@’192.168.52.11’;
GRANT DROP ON d3307.* TO huyan@’192.168.52.11’;
授予操作 MySQL 外键权限:
GRANT REFERENCES ON d3307.* TO huyan@’192.168.52.11’;
授予操作 MySQL 临时表权限:
GRANT CREATE TEMPORARY TABLES ON d3307.* TO huyan@’192.168.52.11’;
授予操作 MySQL 索引权限:
GRANT INDEX ON d3307.* TO huyan@’192.168.52.11’;
授予操作 MySQL 视图、查看视图源代码 权限:
GRANT CREATE VIEW ON d3307.* TO huyan@’192.168.52.11’;
GRANT SHOW VIEW ON d3307.* TO huyan@’192.168.52.11’;
授予操作 MySQL 存储过程、函数 权限:
GRANT CREATE ROUTINE ON d3307.* TO huyan@’192.168.52.11’;
GRANT ALTER ROUTINE ON d3307.* TO huyan@’192.168.52.11’;
GRANT EXECUTE ON d3307.* TO huyan@’192.168.52.11’;
7.3 DBA人员账户
授予普通DBA管理某个MySQL数据库(test)的权限:
GRANT ALL PRIVILEGES ON test TO sysdba@'192.168.52.%';
授予高级 DBA 管理 MySQL 中所有数据库的权限:
GRANT ALL ON *.* TO sysdba@'192.168.52.%';
7.4 数据分析人员只读账号
只需要分配只读的权限:
GRANT SELECT ON d3307.* TO dataquery@'192.168.52.129' IDENTIFIED BY '20150523';
甚至有些用户,可以只分配读取某些表列的权限,如下所示:
GRANT SELECT ON test.* TO dataquery@’192.168.52.%’ IDENTIFIED BY ‘20150523’;
GRANT SELECT(id,uname) ON d3307.t TO dataquery@’192.168.52.%’ ;
示列权限登录操作:
[root@data02 ~]# mysql --socket=/usr/local/mysql3307/mysql.sock -u dataquery -p20150523 -h192.168.52.130 -P3307
Welcome TO the MySQL monitor. Commands END WITH ; OR \g.
Your MySQL CONNECTION id IS 18
SERVER VERSION: 5.6.12-LOG Source distribution
Copyright (c) 2000, 2013, Oracle AND/OR its affiliates. ALL rights reserved.
Oracle IS a registered trademark of Oracle Corporation AND/OR its
affiliates. Other NAMES may be trademarks of their respective
owners.
TYPE 'help;' OR '\h' FOR help. TYPE '\c' TO clear the current input statement.
mysql> SELECT * FROM d3307.t;
ERROR 1142 (42000): SELECT command denied TO USER 'dataquery'@'data02' FOR TABLE 't'
mysql>
mysql> SELECT id,uname FROM d3307.t;
+----+-------+
| id | uname |
+----+-------+
| 1 | a |
+----+-------+
1 ROW IN SET (0.00 sec)
8,权限划分一般原则
数据库一般划分为线上库,测试库,开发库。
8.1对于线上库:
DBA:有所有权限,超级管理员权限
应用程序:分配insert、delete、update、select、execute、events、jobs权限。
测试人员:select某些业务表权限
开发人员:select某些业务表权限
原则:所有对线上表的操作,除了应用程序之外,都必须经由DBA来决定是否执行、已经什么时候执行等。
8.2 测试库
DBA:所有权限。
测试人员:有insert、delete、update、select、execute、jobs权限。
数据分析人员:只有select查询权限
开发人员:有select权限。
原则:DBA有所有权限,而且严格控制表结构的变更,不允许除了dba之外的人对测试环境的库环境进行修改,以免影响测试人员测试。所有对测试库的表结构进行的修改必须由测试人员和DBA一起审核过后才能操作。
8.3 开发库
DBA:所有权限
测试人员:有库表结构以及数据的所有操作权限。
开发人员:有库表结构以及数据的所有操作权限。
数据分析人员:有库表结构以及数据的所有操作权限。
这里大家可以愉快的玩耍了,只要不mysql服务不hang不downtime都OK了。
大总结-JS-挖 “掘” 淘 “金” 之 前端闯关历险记学习资料汇总
世间万物,为我所用。
掘金不仅是一个很好的在线同性交友平台,也是一个学习交流和分享技术场所,更是程序猿和程序媛获取养料的精神家园。
分享是一个杂乱无章的环节,这无可厚非,因为在这里人人平等,每个人都可以分享自己看到的精品文章,也可以创作记录分享自己的成果,这是平台带给大家的优势,同时,面对零零散散的文章,对于我们来说,很困惑,我到底该学什么,从入门到精通的过程是怎样的?我该如何系统的学习这门语言?
汪洋大海,我该如何探寻所需的宝藏?
学习路途,我该如何寻找最佳的曲线?
去年开始看掘金,收藏了很多文章,也收获了很多知识,但是对于上面的疑问一直也在摸索当中,这里先感谢掘金这个平台,让我能学习到很多新的未知的东西,但在用掘金的这段时间内,也发现看的东西虽然很多,但是很杂,没有系统化的去深入了解一个东西,于是诞生了把自己看到过的,错过的,还有将要发表的,一起做一个整理和集合。
看见好的文章就收藏,后来发现收藏了几百篇,很多都是重复的,也不够系统化,资源如浩瀚大海,找起来也麻烦,无疑给自己增加了负担,在此,为了方便大家系统的学习前端这门课程,找准自己的定位,我利用空余时间,把掘金有屎以来分享的前端文章做了一个归类,方便掘金的朋友学习和收藏,喜欢的朋友可以收藏一下,这篇文章会持续更新,也欢迎关注【我的GitHub博客】获取最新动态。
贵有恒何必三更眠五更起,最无益只怕一日曝十日寒。 一天更新一点,每天看一点,坚持就是胜利,如果只整理和收藏不花时间看,一切都是徒劳。✌️
一、推荐规则
- 推荐内容全部来自广大码农朋友的分享和专栏的原创,也就是掘金能搜索到的内容;
- 每个分类原则上不多于3篇,除非这一分类优秀的文章特别多;
- 每个文章我都有粗略阅读,排名按照收藏数和个人感觉关联度;
- 文章日期全部来自2017-3月之前,会不定期更新,如果遗漏非常精彩的文章,可以及时联系我
- 由于工程量大,推荐和排版难免出错,还望见谅,如果错误请底下及时评论反馈
二、代码规范篇
没有规矩,无以成方圆。
为什么把这个放在首位呢?好的代码规范不仅自己看起来赏心悦目,心情舒畅,我怎么就这么牛逼写出这么好看的代码(熏疼自己三秒钟,这往往只是错觉),别人看起来也直观一目了然,后来接手维护的人看了这种高逼格的代码也不会出现这种情况:这尼玛什么几把玩意,简直一坨翔,坑死劳资了(反正我走了也听不到?,你就骂吧)
2.1 前端开发规范总览
2.2 HTML规范
2.3 CSS规范
2.4 JS规范
《JavaScript风格指南》
《JavaScript 代码整洁之道》
《Airbnb 的 JavaScript 编程规范》
2.5 ES6规范
三、前言
国学大师王国维自己的著作《人间词话》中说:
古今之成大事业、大学问者,必经过三重境界:
第一境界:昨夜西风凋碧树,独上高楼,望尽天涯路。
第二境界:衣带渐宽终不悔,为伊消得人憔悴。
第三境界:众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
其实我觉得学习JavaScript也要经历类似的三种阶段:
第一境界:看山是山,看水是水。
第二境界:看山不是山,看水不是水。
第三境界:看山还是山,看水还是水。
国学大师王国维精妙地以三句词道破人生之路:起初的迷惘,继而的执着和最终的顿悟。
我以瞎几把乱扯三句词道破学习JavaScript之路:起初的表象,继而的本质和最终的本质回归到现象。
四、JavaScript基础篇
看是是山,看水是水。
万丈高楼平地起,胸有丘壑宏图画。
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。任何事情都要从基础做起,打好基础,不浮躁,才能做好一件事,学习一门语言也是一样,从“Hello World!"开始,踏踏实实,夯实基础,基础知识是整个学习体系的根本,没有牢固的基础知识作为根基,我们的学习和努力必将事倍功半,学习提纲是巩固基础知识的一种有效手段.
《思维导图来学习Javascript基础知识》
《多年 JavaScript 学习笔记整理》
《javascript 基础小结篇》
《前端开发基础 - JavaScript》
《你不知道的 Javascript》
五、JavaScript进阶篇
看山不是山,看水不是水。
其实地上本没有坑,踩的人多了,于是就有了。
JS是一门玄学,是一门很灵活的语言,当然里面有很多不好懂的概念,尤其是学完基础之后,对执行环境
、this
、类型转换
、作用域链
、闭包
、原型链
、继承
、eval
、JS左值与引用
、浅复制与深复制
、IIFE
、模块化
、函数式编程
等等都有着这样或那样的不解之惑,想要成为JS大神这些门槛和坑不得不踩。
5.1 内存空间
因为JavaScript具有自动垃圾回收机制,所以对于前端开发来说,内存空间并不是一个经常被提及的概念,很容易被大家忽视。特别是很多不是计算机专业的朋友在进入到前端之后,会对内存空间,内存管理,内存释放的认知比较模糊,甚至有些人干脆就是一无所知。
《前端基础进阶:详细图解 JavaScript 内存空间》
《JavaScript 内存管理》
《JavaScript 中的内存释放》
5.2 执行上下文与作用域
首先来说说js中的执行环境,所谓执行环境(也称执行上下文–execution context)它是JavaScript中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据 ,决定了它们各自的行为。而每个执行环境都有一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链包含了执行环境栈中的每个执行环境对应的变量对象.通过作用域链,可以决定变量的访问和标识符的解析。
《前端基础进阶:详细图解 JavaScript 执行上下文》
《深入探讨 JavaScript 的执行环境和栈》
《图解 JS 上下文与作用域》
5.3 变量对象
深入理解执行上下文中的变量对象,从原理上解释变量提升,为接下来理解作用域链,闭包,原型打下坚实的理论基础,值得基础知识不牢固的盆友一阅。
5.4 作用域链与闭包
当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链包含了执行环境栈中的每个执行环境对应的变量对象.通过作用域链,可以决定变量的访问和标识符的解析。
关于闭包的概念,是婆说婆有理。因而,我就翻阅了**红皮书(p178)**上对于闭包的陈述:
闭包是指有权访问另外一个函数作用域中的变量的函数
这概念有点绕,拆分一下。从概念上说,闭包有两个特点:
- 1、函数
- 2、能访问另外一个函数作用域中的变量
在ES 6之前,Javascript只有函数作用域的概念,没有块级作用域(但catch捕获的异常 只能在catch块中访问)的概念(IIFE可以创建局部作用域)。每个函数作用域都是封闭的,即外部是访问不到函数作用域中的变量。
《前端基础进阶:详细图解,彻底搞懂闭包与作用域链》
《JavaScript 闯关记之作用域和闭包》
《你想知道的关于 JavaScript 作用域的一切 (译)》
《弄懂 JavaScript 的作用域和闭包》
5.5 this
This,传说中的天使还是魔鬼?对于新手来说,this的指向一直是很头疼的地方,用的好就是天使,用的差就是魔鬼了,人人都想成为代码中的天使,为了避免成为魔鬼,我们必须好好深入学习一下this的作用机理和一些常见的坑。
《前端基础进阶:全方位解读 this》
《JavaScript 中的 this 陷阱的最全收集 -- 没有之一》
《Javascript 深入浅出 this》
《从 ECMA 规范深入理解 js 中的 this》
5.6 原型链
在JS里,万物皆对象。方法(Function)是对象,方法的原型(Function.prototype)是对象。因此,它们都会具有对 象共有的特点。 即:对象具有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例 能够访问在构造函数原型中定义的属性和方法。
《JavaScript原型详解》
《三张图搞懂JavaScript的原型对象与原型链》
《JavaScript 原型中的哲学思想》
《一张图搞懂 Javascript 中的原型链、prototype、__proto__的关系》
5.7 继承
Javascript 这门语言对于习惯了众多传统 OOP 语言 (c++,Java 等) 的 coder 来说其实是一门很奇怪的语言, 因为 Javascript 的 OOP 方式是基于原型的, 而非传统的类继承,主要有原型链继承,借用构造函数继承,组合继承,寄生式继承,寄生组合继承。
《js 原型链继承,借用构造函数继承, 组合继承,寄生式继承,寄生组合继承》
《Javascript 三招两式之对象继承 (上)》
《JavaScript 三招两式之对象继承 (下)》
《征服 JavaScript 面试系列:类继承和原型继承的区别》
《谈一谈 JavaScript 继承》
5.8 arguments
每个函数都会有一个 Arguments 对象实例 arguments,它引用着函数的实参,可以用数组下标的方式”[]” 引用 arguments 的元素。arguments.length 为函数实参个数,arguments.callee 引用函数自身。
《Arguments 对象深入了解》
《javascript arguments(callee、caller) 详解》
《Javascript 中的 arguments 对象》
5.9 类型转换
如果把通过函数或方法调用,明确的将某种类型转换成另一种类型称为显示转换 ,相反则称为隐式类型转换 。google和维基百科中没有找到“显示类型转换”,“隐式类型转换”的字眼。暂且这么称呼。 JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可和数字相加。之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式类型转换的,如下是数值类型和布尔类型的相加:
3 + true; // 4
结果是一个数值型!如果是在C或者Java环境的话,上面的运算肯定会因为运算符两边的数据类型不一致而导致报错的!但
是,在JavaScript中,只有少数情况下,错误类型才会导致出错,比如调用非函数,或者读取null或者undefined的属
性时。
《从 []==![] 为 true 来剖析 JavaScript 各种蛋疼的类型转换》
《一篇文章搞定 JS 类型转换》
《聊一聊 JS 中的『隐式类型转换』》
5.10 IIFE
全拼Imdiately Invoked Function Expression,立即执行的函数表达式。立即执行函数在模块化中也大有用处。用立即执行函数处理模块化可以减少全局变量造成的空间污染,构造更多的私有变量。
立即执行函数写法大全:
// 最常用的两种写法
(function(){ /* code */ }()); // 老道推荐写法
(function(){ /* code */ })(); // 当然这种也可以
// 括号和JS的一些操作符(如 = && || ,等)可以在函数表达式和函数声明上消除歧义
// 如下代码中,解析器已经知道一个是表达式了,于是也会把另一个默认为表达式
// 但是两者交换则会报错
var i = function(){ return 10; }();
true && function(){ /* code */ }();
0, function(){ /* code */ }();
// 如果你不怕代码晦涩难读,也可以选择一元运算符
!function(){ /* code */ }();
~function(){ /* code */ }();
-function(){ /* code */ }();
+function(){ /* code */ }();
// 你也可以这样
new function(){ /* code */ }
new function(){ /* code */ }() // 带参数
《javascript模块化编程-详解立即执行函数表达式IIFE》
《Javascript 的匿名函数与自执行》
《js 匿名自执行函数中闭包的高级使用(前端必看)》
这一篇掘金没有推荐过,不过我认为真的写的很全很详细,这里也推荐一下:
《详解javascript立即执行函数表达式(IIFE)》
5.11 setTimeout
平时的工作中,也许你会经常用到setTimeout这个方法,可是你真的了解setTimeout吗?本系列想通过总结setTimeout的用法,顺便来探索javascript里面的事件执行机制。在一个基础阶段,理解JavaScript定时器的工作原理的是非常重要的。通常它们看起来不那么直观,因为它们处于单线程中。
《[译] JavaScript 中的定时器是如何工作的?》
《关于 JavaScript 定时器我的一些小理解》
《JavaScript 定时器及相关面试题》
《【原】以 setTimeout 来聊聊 Event Loop》
5.12 Object.defineProperty()函数
该方法允许精确添加或修改对象的属性。一般情况下,我们为对象添加属性是通过赋值来创建并显示在属性枚举中(for...in 或 Object.keys 方法), 但这种方式添加的属性值可以被改变,也可以被删除。而使用 Object.defineProperty() 则允许改变这些额外细节的默认设置。例如,默认情况下,使用 Object.defineProperty() 增加的属性值是不可改变的。 对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个拥有可写或不可写值的属性。存取描述符是由一对 getter-setter 函数功能来描述的属性。描述符必须是两种形式之一;不能同时是两者。
《理解 JavaScript 的 Object.defineProperty() 函数》
《解析神奇的 Object.defineProperty》
《双向绑定的简单实现 - 基于 ES5 对象的 getter/setter 机制》
5.13 call、apply、bind
今天看博客时,看到了这样的一段js代码: var bind = Function.prototype.call.bind(Function.prototype.bind); 上面那段代码涉及到了call、bind,所以我想先区别一下call、apply、bind的用法。这三个方法的用法非常相似,将函数绑定到上下文中,即用来改变函数中this的指向。这个系列就是让大家深入理解其中的差异。
《JS 中 call、apply、bind 那些事》
《JavaScript 中的 call、apply、bind 深入理解》
《回味JS基础:call apply 与 bind》
《深入浅出妙用 Javascript 中 apply、call、bind》
5.14 深拷贝与浅拷贝
eg:有A、B两个对象,且都有子对象
深拷贝:将B对象拷贝到A对象中,包括B里面的子对象;
浅拷贝:将B对象拷贝到A对象中,但不包括B里面的子对象;
首先深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。
《JavaScript 深拷贝》
《javaScript 中的浅拷贝和深拷贝》
《深入剖析 JavaScript 的深复制》
5.15 正则表达式
还记得被称为正则小王子的jQuery作者吗?但正则表达式对于我来说一直像黑暗魔法一样的存在。手机正则去网上搜,邮箱正则去网上搜,复杂点的看看文档拼凑一下,再复杂只能厚着脸皮让其他同事给写一个。从来没有系统的学习过,搞完这个系列是不是准备拿下它。
《正则表达式 - 理论基础篇》
《正则表达式学习笔记》
《正则表达式实践篇》
《常见的正则表达式可视化描述》
《最全面的常用正则表达式大全》
5.16 事件
JavaScript 程序采用了异步事件驱动编程(Event-driven programming)模型,维基百科对它的解释是:
事件驱动程序设计(英语:Event-driven programming)是一种电脑程序设计模型。这种模型的程序运行流程是由用户的动作(如鼠标的按键,键盘的按键动作)或者是由其他程序的消息来决定的。相对于批处理程序设计(batch programming)而言,程序运行的流程是由程序员来决定。批量的程序设计在初级程序设计教学课程上是一种方式。然而,事件驱动程序设计这种设计模型是在交互程序(Interactive program)的情况下孕育而生的
《JavaScript 浏览器事件解析》
《深入理解 - 事件委托》
《我也来说说 JS 的事件机制》
《DOM 事件深入浅出(一)》
《DOM 事件深入浅出(二)》
《JS 中的事件绑定、事件监听、事件委托是什么?》
5.17 其他混淆点
其他一些容易混淆的难点就不单独开一个类型,这里就统一做一个系列说明,也是平时经常遇到的一些痛点和难点吧,主要是区分一些概念,知道彼此之间的异同,以下简称一张图系列。
《一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some》
《一张图看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别》
《一张图彻底掌握 scrollTop, offsetTop, scrollLeft, offsetLeft......》
《一张图看懂 Function 和 Object 的关系及简述 instanceof 运算符》
六、JavaScript高手篇
看山还是山,看水还是水。
如果学习JavaScript不是为了成为高手,那将毫无意义。
其实,高手有一颗寂寞的心,因为高手的造就本就是用寂寞堆积而成。
6.1 JavaScript数据结构与算法篇
程序设计=数据结构+算法
6.1.1 数组去重
6.1.2 排序
6.1.3 查找
6.1.4 数据结构
《学习JavaScript数据结构(一)——栈和队列》
《学习 JavaScript 数据结构(二)——链表》
《学习 JavaScript 数据结构(三)——集合》
《学习 javascript 数据结构 (四)——树》
《javaScript的数据结构与算法(五)——字典和散列表》
6.1.5 其它
《前端面试中常见的算法问题读后整理》
《常见数据结构 (一)- 栈, 队列, 堆, 哈希表》
《常见数据结构 (二)- 树 (二叉树,红黑树,B 树)》
《算法学习笔记》
《javascript array js 缓存算法、数组随机抽取、字母串转数字,数字转字符串》
《JavaScript 算法练习》
6.2 JavaScript跨域
** 由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。具体可以查看下表(来源)**
《前端跨域问题及解决方案》
《直白的话告诉你在 javascript 中如何用 jsonp 实现跨域请求》
《前端 Ajax 跨域请求方案沙里淘金》
《你所不知道的跨域资源共享(CORS)》
《带你一步一步的理解前端跨域的原理及实践》
《HTML5 跨域通信 API - window.postMessage》
《前端跨域整理》
《跨域问题,解决之道》
6.3 JavaScript设计模式
为什么要学习设计模式? 做事情之前问个为什么总是好的。关于设计模式的好坏,我在知乎上也看过一些讨论,有知友对其提出过一些疑问,里面有一些关于设计模式的观点:
- 设计模式有何不妥,所谓的荼毒体现在哪?
- 设计模式是不是有点太玄了?
任何事物的出现都有其道理,任何语言都有其不足之处,设计模式是对语言不足的补充(Peter Norvig)。设计模式也是编程经验的总结,我想学习它对像我这样的前端新手的能力会有很大的提升。
细说说它的好处:
- 设计模式能让你用更少的词汇做更充分的沟通;
- 谈话在模式层次时,不会被压低到对象和类这种琐碎的事情上;
- 懂设计模式的团队,彼此之间对于设计的看法不容易产生误解;
- 共享词汇能帮助初级人员快速成长。
《学习设计模式前需要知道的事情》
《常用的 JavaScript 设计模式》
《JavaScript 设计模式》读后感觉很复杂
《JavaScript 设计模式》
《听飞狐聊 JavaScript 设计模式系列 13》
6.4 JavaScript函数式编程
什么是函数式编程?
- 与面向对象编程(Object-oriented programming)和过程式编程(Procedural programming)并列的编程范式。
- 最主要的特征是,函数是第一等公民。
- 强调将计算过程分解成可复用的函数,典型例子就是map方法和reduce方法组合而成 MapReduce 算法。
- 只有纯的、没有副作用的函数,才是合格的函数。
《函数式编程入门教程》
《想学函数式编程?》
《给 JavaScript 开发者讲讲函数式编程》
《前端基础进阶(七):函数与函数式编程》
《『翻译』JavaScript 函数式编程》
《JavaScript 函数式编程》
6.5 JavaScript高阶函数
具体来说,在 JavaScript 中,我们可以将一个函数 A 作为参数传给另一个函数 B,或者,在函数 B 中将函数 A 作为返回值返回。那么这里的函数 B 就是上面所说的高阶函数。 在《javascript设计模式和开发实践》中是这样定义的。 函数可以作为参数被传递; 函数可以作为返回值输出。
《javascript 高阶函数介绍》
《程序媛学 JS 小记一笔——高阶函数》
《高阶函数对系统的 “提纯”》
《JavaScript 之闭包与高阶函数(一)》
6.6 JavaScript性能优化
天下武功,无坚不摧,唯快不破。
Javascript是一门非常灵活的语言,我们可以随心所欲的书写各种风格的代码,不同风格的代码也必然也会导致执行效率的差异,作用域链、闭包、原型继承、eval等特性,在提供各种神奇功能的同时也带来了各种效率问题,用之不慎就会导致执行效率低下,开发过程中零零散散地接触到许多提高代码性能的方法,整理一下平时比较常见并且容易规避的问题。
《吹毛求疵的追求优雅高性能JavaScript》
《天生就慢的 DOM 如何优化?》
《Javascript 高性能动画与页面渲染》
《一个关于 js 线程和性能优化的文档,有例子哦!》
《合理使用 IIFE 优化 JS 引擎的性能》
《高性能 JavaScript》读书笔记
6.7 JavaScript 柯里化
就像最早听到斐波拉切数列一样,第一次听到柯里化我也是懵逼的
柯里化又称部分求值,字面意思就是不会立刻求值,而是到了需要的时候再去求值。如果看的懵逼,没事,看完整篇文章再回过头来看这里你就会豁然开朗。 反柯里化的作用是,当我们调用某个方法,不用考虑这个对象在被设计时,是否拥有这个方法,只要这个方法适用于它,我们就可以对这个对象使用它。
《前端高手必备:详解 JavaScript 柯里化》
《简单理解JavaScript中的柯里化和反柯里化》
《浅谈函数式编程柯里化的魔法》
《从一道面试题谈谈函数柯里化 (Currying)》
《掌握 JavaScript 函数的柯里化》
6.8 JavaScript调试
如今 Chrome 浏览器无疑是最受前端青睐的工具,原因除了界面简洁、大量的应用插件,良好的代码规范支持、强大的 V8 解释器之外,还因为 Chrome 开发者工具提供了大量的便捷功能,方便我们前端调试代码,我们在日常开发中是越来越离不开 Chrome,是否熟练掌握 Chrome 调试技巧恐怕也会成为考量前端技术水平的标杆。 介绍 Chrome 调试技巧的文章很多,本文结合我自己的开发经验,希望从实际运用的角度为大家再一次谈一谈这些功能,也希望对大家都有所帮助和启发。 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量对象,闭包,this等关键信息的变化。因此,断点调试对于快速定位代码错误,快速了解代码的执行过程有着非常重要的作用,这也是我们前端开发者必不可少的一个高级技能。
《前端高手必备技能:如何在 chrome 开发者工具中观察函数调用栈、作用域链与闭包》
《比 console.log 更多-chrome 调试命令》
《JavaScript30 中文指南 - 09 Console 调试技巧指南》
《聊一聊移动端调试那些事》
《前端 chrome 浏览器调试总结》
《我的职业是前端工程师【五】: 前端工程师必会的六个调试技能》
《九个 Console 命令,让 js 调试更简单》
《再谈 Chrome 实用调试技巧》
《调试 CSS 的方法》
《前端调试效率低?试试这 10 个 Chrome 开发者工具 使用技巧》
《前端开发中的 JS 调试技巧》
6.9 前端安全
天下武功,唯快不破。算法越快,越容易破。
《如何让前端更安全?——XSS 攻击和防御详解》
《HTTPS 互联网世界的安全基础》
《关于 Web 安全,99% 的网站都忽略了这些》
《Web 前端慢加密》
6.10 技巧和效率
技巧恰似黑魔法,效率堪比加速器,都是开发过程中不可或缺的一部分,善用技巧,提高效率。
高手之所以高,很大一部分在于技巧巧妙,效率高,让人自愧不如,所以成了我们眼中的高手,其实高手也是从菜鸟过来的,由于长期的学习和经验的积累,再加上善于总结,自然一步步成长成为高手,为了加速自己成为高手,我们可以向高手取经,学习他们分享的一些技巧和解决问题思维方式。
《34 个实用的 webAPP 开发技巧分享,值得收藏》
《不造个轮子,你还真以为你会写代码了? | 掘金技术征文》
《【译】帮助你更快学习 JavaScript 的六个思维技巧》
《提升效率黑科技》
《【译】六个漂亮的 ES6 技巧》
《【译】45种 Javascript 技巧大全》
《程序员应该掌握的 10 个搜索技巧》
《你必须『收藏』的Github技巧》
《老司机教你更好的进行 CSS 编程 70 个技巧》
《聊一聊这些常见而且实用的 css 技巧》
七、JavaScript框架篇
青,取之于蓝而青于蓝;冰水为之而寒于水。
jQuery:一年没写链式JQ了,在这个人手一个MVVM框架的年代,JQuery就不做推荐,想要了解可以自行学习。
vue.js react.js,angularjs···此处省略一万篇文章和略干文字。
关于框架的学习,最好多看看官方文档,多多实践,我这里就不多做介绍了,框架太多,我用的也不多,这里也就不献丑推荐什么的,自己对框架也一知半解,没有深入去研究底层的实现,仅仅停留在够用就行没去深究的层面,大家想学什么框架可以自己去搜索相关资料和教程。
八、HTTP和HTTPS篇(待续,下一步学习中)
九、前端工程化篇
解放双手,成就你的梦想。
十、全栈篇之Node.js(待续,正在学习中nodejs)
十一、面试篇
11.1 简历模板
简历好比人的一张脸,不能丑了别人,爽了自己。
对于开发者与设计师们,一封好的的简历会让自己的面试增色不少。本次分享的简历简介精致,而且样式多种多样。包含 INDD、IDML、PDF、PSD、DOCX 等格式,方便自由修改和学习。
《Talk is cheap, show me the code - 用 github 数据辅助你完善简历》
《27 款优质简洁的个人简历打包下载》
《10+ 优秀简洁的个人简历下载(五)》
《15 款优质实用简洁的个人简历模板打包下载 (一)》
《5 款精致简洁求职简历》
11.2 面试题
任凭风吹雨打,胜似闲庭信步。
首先我希望表达的一点,就是面试的评判跟学校里的考试完全是两回事,太多的人把面试当做考试而把注意力放在题目上。 事实上面试中未必是所有题目全都回答"正确"就一定会通过或者较高评价。面试是面试官和面试者双方"挖掘与展示才能"的过程,参考前面提到的面试过程,全部回答正确的情况很可能是因为面试官不感兴趣懒得追问。 对于面试官而言,基本评判原则就是"我要不要这个人做我的同事?",多数情况下,这个答案会非常清楚。一些题目是充分的,也就是"回答对了说明这个人具有可以依靠的才能",一些题目则是必要的,也就是"回答错了说明这个人无法胜任我们的工作"。
《最近遇到的前端面试题》
《大厂前端面试题汇总》
《前端面试集合》
《前端面试题精选》
《一道 JS 面试题所引发的 "血案",透过现象寻本质,再从本质看现象》
11.3 面试技巧、经验与感悟
他山之石,可以攻玉。
经验犹如一所大学校,它能使你认识到自己是个什么样的傻瓜。
人生就是不断的推销自己,不停的面试,狭义的面试我们认为就是工作上的面试,而广义的面试就是做人的面试,到处就是展示推销自己。看看别人面试心得,取经一下,避免别人已经犯过的错误,也是一种进步。
《面试感悟:一名 3 年工作经验的程序员应该具备的技能》
《我的 web 前端面试经历 - 百度》
《1月前端面试记》
《关于前端面试》
《迟来的面试总结》
十二、资源汇总
积土成山,风雨兴焉;积水成渊,蛟龙生焉。
善于积累,善于总结,也是学习的一门功课,积累是一个循序渐进的过程,搜集总结同时也是一个费时费力的过程,看看别人的积累和总结,不禁感叹于别人的知识面和认真的态度,自己会觉得有压力从而产生动力,此时的自己会不会蠢蠢欲动,给自己所学所看来一个强势的总结呢?
《也许是史上最全的前端资源大汇总》
《JavaScript 开发者必备的资源合集》
《前端知识点大百科全书》
《100+ 超全的 web 开发工具和资源整理》
《Web 前端从入门菜鸟到实践老司机所需要的资料与指南合集》
《GitHub 上最全的前端入门资源汇总 快速入门前端》
《前端教程 & 开发模块化 / 规范化 / 工程化 / 优化 & 工具 / 调试 & 值得关注的博客 / Git & 面试 - 资源汇总》
《送给前端的你,推荐几篇前端汇总文章。 - 学习编程 - 知乎专栏》
《前端学习资源汇总——前端收藏夹》
《最全前端资源汇集》
十三、插件
插件是我们开发时候的左膀右臂。
平时自己写插件主要有下面几个问题:
(1)开发插件需要时间,可能拖延项目工期,如果工期紧急不建议选用这种方式
(2)自己造的轮子未必有现有轮子的好用,要考虑到队友是否适用
(3)需要比较高的开发水平
这里搜集一些常用的插件供大家参考使用。
十四、工具篇
工欲善其事,必先利其器。
张三和李四都要上山砍柴,但他们的斧头都有点钝了,张三没有理会,拿着斧头就上山了,因为他的斧头不利,砍的都是比较细的树柴……李四就不同了,他拿来磨刀石,用劲地把斧头先磨好,虽然他比张三慢了起步,但是他的准备工夫做到家了,砍柴砍得很快。到太阳下山了,张三只背了小小的一捆柴下来,但是李四,背着一大捆的柴下来…… 由此可见,准备工夫做好了,可以事半功倍!
《超全面 + 最流行的「前端速查表」高清版大全》
《成为专业程序员路上用到的各种优秀资料、神器及框架》
《前端切图神器 avocode》
《2015 年末必备前端工具集》
《【译】2016 年我最喜欢的前端工》
《前端新手可以浏览的网站》
《收集非常好用的 Mac 应用程序、软件以及工具,主要面向开发者和设计师。》
《工具武装的前端开发工程师》
《一个前端程序猿的 Sublime Text3 的自我修养》
《前端工程师的工具包》
十五、鸣谢
- 感谢党和国家
- 感谢美利坚创造了互联网
- 感谢掘金这个在线同性交友的场所
- 感谢掘金CEO以及工作人员创造了这个平台
- 感谢创作和分享的广大同行码农提供了本文原始素材
- 感谢各位大神愿意含辛茹苦的花时间观看鄙人这篇随便拼凑的文章
- 最后也厚颜无耻的感谢自己能静下心整理一篇文章和大家一起分享交流进步
十六、广告
本文分享首发【掘金】,同时收录在【我的GitHub博客】,觉得本文写的不算烂的,可以点击【我的GitHub博客】顺便登录一下账号给个星星✨鼓励一下,关注最新更新动态,大家一起多交流学习,欢迎随意转载交流,不要钱,文末有福利哦?,你懂的?。
登高自卑,与君共勉。
十七、福利
文武之道,一张一弛,要劳逸结合,是不是?
老司机镇楼,投币上车。骚年,看了这么多这么累,是不是该撸一发呢?,我好想射点什么,先撸一盘LOL去了,哈哈,大家别想歪了。
待续的今后继续更新完善。
Mysql命令行技巧汇总
1) pager
pager真是一个很神奇的东西,它可以控制mysql的输出。默认值是stdout,直接输出。
艾,貌似讲不清楚啊,还是看几个例子吧:
mysql> SELECT mobile FROM profile WHERE mobile!=''; +-------------+ | mobile | +-------------+ | 13719001986 | | 123214234 | +-------------+ 2 ROWS IN SET (0.00 sec) mysql> mysql> pager grep "137" PAGER SET TO 'grep "137"' mysql> mysql> SELECT mobile FROM profile WHERE mobile!=''; | 13719001986 | 2 ROWS IN SET (0.00 sec) mysql> pager DEFAULT pager wasn't set, using stdout |
相当于在输出之后附加了 | grep “137″ ,是不是很震憾。
不止是grep, 所有linux上面的命令都可以的,自由发挥吧。
比如select很多行数据,就可以设置pager more,一页一页地看。
再比如要比较二次select的结果是否相同,可以设置pager md5sum,实在是太赞了。
再比如,只想看select语句运行需要多长时间,而不想看到select出来的结果集,可以使用
pager cat > /dev/null
再比如,看一下processlist里面Sleep的线程有多少,可以使用
pager grep Sleep | wc -l
2) edit
肯定有人会有这样的想法:在mysql命令行里面编辑一个复杂点的sql语句实在是太费神了,光标只能左右移动,要是有个vi就好多啦。
其实真的有….
mysql> edit
就这么简单,谁用谁知道。
3) tee
如果想记录下来您所有的操作及输出,除了屏幕录象软件之外,还有这么一个神奇的东西tee。
mysql> tee /tmp/h.log Logging TO file '/tmp/h.log' mysql> mysql> mysql> SHOW engine innodb STATUS; ......... mysql> exit |
所有的一切都被记录在 /tmp/h.log文件中了。
4) prompt
快要去吃午饭了, 这时如果你又想看一条UPDATE语句究竟会执行多久,怎么办?
等下去就要饿死啦。
修改一下mysql的prompt提示符,轻松解决这个问题:
mysql> prompt \r:\m:\s\P>\_ PROMPT SET TO '\r:\m:\s\P>\_' 11:30:10am> 11:30:11am> 11:30:11am> 11:30:12am> 11:30:12am> 11:30:12am> 11:30:12am> |
输入UPDATE语句,回车走人。
吃完饭回来就可以看到执行结束的时间了。
5) ctrl+z
作为一个dba,每天都要在命令行中登陆mysql,运行完sql语句,随手就logout了,(快捷键是ctrl+d),
过一段时间又要login,又随手logout……
重复重复再重复,不仅浪费时间,而且输入mysql root的复杂密码也会烦死个人。
这个logout的坏习惯,一定要改掉。。。,哥已经改掉了。
mysql> mysql> mysql> SELECT now(); +---------------------+ | now() | +---------------------+ | 2012-12-25 15:33:16 | +---------------------+ 1 ROW IN SET (0.00 sec) mysql> 不要按ctrl+d了, 换成Ctrl+z , 暂停任务。 [1]+ Stopped /home/mysql/bin/mysql -uroot -p [MODIFY@www 8p]$ [MODIFY@www 8p]$ [MODIFY@www 8p]$ 需要用到mysql的时候, 输入fg回车: [MODIFY@www 8p]$ fg /home/mysql/bin/mysql -uroot -p mysql> mysql> |
是不是很爽。。。
6) html输出
-H
[root@www ~]# /home/mysql/bin/mysql -uroot -p -H -e "select host from mysql.user"; Enter password: <TABLE BORDER=1><TR><TH>host</TH></TR><TR><TD>localhost</TD></TR><TR><TD>localhost</TD></TR><TR><TD>localhost</TD></TR><TR><TD>localhost</TD></TR><TR><TD>localhost</TD></TR><TR><TD>localhost</TD></TR></TABLE>[root@www ~]# |
7) 最简化输出
如果只想要结果,不要那些边框,字段名称之类的东西,可以使用 –skip-line-numbers –skip-column-names
[root@www ~]# /home/mysql/bin/mysql -uroot -p -e "select count(*) from shipincon.share where add_time >= current_date()"; +----------+ | COUNT(*) | +----------+ | 850 | +----------+ [root@www ~]# /home/mysql/bin/mysql --silent --skip-line-numbers --skip-column-names -uroot -p -e "select count(*) from shipincon.share where add_time >= current_date()"; 850 |
8) help
在不方便上网查找mysql文档的情况下,help还是很靠谱的。
mysql> help string functions; You asked FOR help about help category: "String Functions" FOR more information, TYPE 'help <item>', WHERE <item> IS one OF the following topics: ASCII BIN BINARY OPERATOR BIT_LENGTH CAST CHAR FUNCTION CHARACTER_LENGTH CHAR_LENGTH CONCAT CONCAT_WS CONVERT ELT EXPORT_SET EXTRACTVALUE FIELD FIND_IN_SET FORMAT HEX ........ mysql> help instr; Name: 'INSTR' Description: Syntax: INSTR(str,substr) RETURNS the POSITION OF the FIRST occurrence OF SUBSTRING substr IN string str. This IS the same AS the two-argument form OF LOCATE(), EXCEPT that the ORDER OF the arguments IS reversed. URL: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html Examples: mysql> SELECT INSTR('foobarbar', 'bar'); -> 4 mysql> SELECT INSTR('xbar', 'foobar'); -> 0 |
HTML5 开发者需要了解的技巧和工具汇总
HTML5现在已经成为了Web开发中的热门话题,大多数现代浏览器(Safari、Chrome,Firefox,IE10和移动设备)都支持HTML5。即使HTML5的规范还没有制定完成,但许多开发者已经将其作为Web开发项目中的主要技术。一些网站巨头,如Google、Facebook、Twitter和YouTube等,都建立在HTML5基础上。
HTML5中最令人兴奋的功能莫过于画布(canvas)和强大的表单功能,画布功能已经可以在大部分浏览器中完美体验(除了IE),但对于新表单元素的支持还不是太好。对Web开发者来说,是时候开始HTML5开发了。
要进行HTML5开发,本文中的一些技巧、工具可以让你缩短学习的时间,提高开发的效率。
一、HTML5支持测试列表
在开始之前,你需要了解现代的浏览器以及移动平台对于HTML5的支持情况。
二、让HTML5元素可用
老版本的IE浏览器不能识别新的HTML元素。但是,可以使用一些JavaScript或CSS解决方案来弥补这个缺陷。
- HTML5Shiv:此脚本可以使IE浏览器识别HTML5元素。
- HTML5 Enabler:功能与HTML5Shiv类似。
- Modernizr:它使得开发者可以在支持HTML5和CSS3的浏览器中充分利用HTML5和CSS3的特性进行开发,同时又不会牺牲其他不支持这些新技术的浏览器的控制。
- HTML5 Reset:它提供了一组HTML、CSS文件,让你能够以最少的时间来启动一个新的项目。它使用modernizr来支持HTML5 和 CSS3。
三、浏览器插件
下面是一些JavaScript插件,可以弥补一些浏览器对HTML5的支持问题。
1. VideoJS
VideoJS是一个HTML5的视频播放器,可以在所有浏览器中使用,包括IE6和移动设备。对于不支持HTML5的浏览器则自动使用Flash播放器来播放。

2. AudioJS
HTML音频播放器。用来让HTML5 的 <audio> 标签可以在各种浏览器上使用,包括移动设备。

3. HTML5Widget
HTML5的表单模块,包括日历,调色板,滑动部件,客户端验证等。

4. Webforms2
HTML5 表单属性的支持,例如pattern、required和autofocus。

5. LimeJS
LimeJS是HTML5的游戏框架,用于为现代触摸设备和桌面浏览器创建快速、本地化的游戏。

6. FlexieJS
支持CSS3弹性盒子模型(Flexible Box Model)。

四、在线工具
此外,还有一些在线工具,可以帮助开发者加快HTML5项目的开发。
1. HTML5 Boilerplate
HTML5Boilerplate 是一个HTML / CSS /JS模板,是实现跨浏览器正常化、性能优化、稳定的可选功能如跨域Ajax和Flash的最佳实践。开发者称之为技巧集合,目的是满足你开发一个跨浏览器,并且面向未来的网站的需求。

2. Switch to HTML5
非常有用的在线工具,可以根据你的喜好生成HTML5文档结构。

3. Initializr
Initializr是一个HTML5模板生成器,以帮助你开始HTML5项目的开发 。它建立在HTML5 Boilerplate之上。




五、其他
你可以通过下面的链接来跟踪HTML5的更新。
HTML5追踪
你可以通过下面的链接获得HTML5网站的设计灵感。这个网站库中包含了大量的使用HTML5技术的网站。
HTML5Gallery
VIA http://www.queness.com/post/9375/tips-tricks-and-tools-you-will-need-to-start-using-html5-today
GIT乱码解决方案汇总
在处理一个有中文文件名的项目时却出现文件名乱码的问题。
情况重现
- 在一个使用cygwin的bash提交的git项目中,已经完成了所有的提交,但使用TortoiseGit查看的时候,却发现仍有文件没有提交,甚至是有文件还处于未暂存的状态。于是使用TortoiseGit提交;
- 再次用cygwin下的git status查看,这次又发现了未提交的情况。再次用git commit命令行提交;
- 回到TortoiseGit下查看,问题又出现了!此时准备返回两次提交前的版本,却因为文件名乱码的问题,无法返回了!
乱码原因
搜索一番,发现git文件名、log乱码,是普遍问题,这其中有编码的原因,也有跨平台的原因。主要原因是Windows 系统中的Git对中文文件名采用不同的编码保存所致。
Windows系统中使用的msysGit,采用的是系统编码来保存文件名;而Cygwin中的Git默认采用UTF-8编码来保存文件名。如果两个软件同时对一个版本库进行操作,且都认为对方是使用自己使用的编码来保存文件,就会导致文件名编码混乱,无法识别。
这就导致,如果一直使用TortoiseGit(实际调用MsysGit)提交,那么中文文件名没问题;一直使用cygwin提交,中文文件名也没问题。但一定不能交叉使用。
分别设置LANG、LC_CTYPE、LC_ALL参数为同样的编码,问题依旧。
cygwin官方网站提到了非拉丁语文件名的问题,也许研究后能解决该吧:Chapter 2. Setting Up Cygwin
这里还有一篇讲解Linux系统编码文章:locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
官方终极解决方案
这个问题的官方终极解决方案,就是更新到msysGit1.7.10或更新版本。这个版本之后,msysGit和Git for Windows已经采用了UTF-8编码来保存文件名,不会再出现乱码的情况。安装和使用可参考这篇文章:使用Git、Git GUI和TortoiseGit
不幸的是,对于使用老版本msysGit提交的版本库,升级到msysGit1.7.10或者更高会出现编码问题。
有两篇文章介绍了这个问题的解决办法:
- 升級到 msysgit 1.7.10 的檔名亂碼處理方式(需要翻墙)
- upgrading to msysGit 1.7.10 (or higher)
下面的文章,是历史遗留,可以不看。若希望知其所以然,则不妨观之。
乱码情景对号入座和解决方案
乱码情景1
在cygwin中,使用git-add添加要提交的文件的时候,如果文件名是中文,会显示形如274\232\350\256\256\346\200\273\347\273\223.png的乱码。
解决方案:
在bash提示符下输入:
git config --global core.quotepath false
core.quotepath设为false的话,就不会对0×80以上的字符进行quote。中文显示正常。
乱码情景2
在MsysGit中,使用git log显示提交的中文log乱码。
解决方案:
设置git gui的界面编码
git config --global gui.encoding utf-8
设置 commit log 提交时使用 utf-8 编码,可避免服务器上乱码,同时与linux上的提交保持一致!
git config --global i18n.commitencoding utf-8
使得在 $ git log 时将 utf-8 编码转换成 gbk 编码,解决Msys bash中git log 乱码。
git config --global i18n.logoutputencoding gbk
使得 git log 可以正常显示中文(配合i18n.logoutputencoding = gbk),在 /etc/profile 中添加:
export LESSCHARSET=utf-8
乱码情景3
在MsysGit自带的bash中,使用ls命令查看中文文件名乱码。cygwin没有这个问题。
解决方案:
使用 lls --show-control-chars
命令来强制使用控制台字符编码显示文件名,即可查看中文文件名。
为了方便使用,可以编辑 /etc/git-completion.bash
,新增一行 alias ls="ls --show-control-chars"
终极解决方案
终极的解决方案是通过修改git和TortoiseGit源码实现,有网友这么做了:让Windows下Git和TortoiseGit支持中文文件名/UTF-8,也可以直接访问这个开源的Google项目:utf8-git-on-windows。
如果不抗拒命令行的话,直接用Cygwin来提交Git库。因为Cygwin其实是一个在Windows平台上的模拟器,它完全模拟GNU/Linux的方式运行,所以Cygwin中的Git是采用UTF-8编码来保存中文的。
在操作git时,把区域设置修改为 中文GBK。这之后就可以进行git相关操作了。
在终端中跟windows保持一致
1
2
|
export LC_ALL=zh_CN.GBK; export LANG=zh_CN.GBK
terminal -> set charactor encoding -> gbk
|
切换回linux默认
1
2
|
export LC_ALL=en_US.utf8; export LANG=en_US.utf8
terminal -> set charactor encoding -> unicode(utf-8)
|
改变文件名的编码
如果已经造成乱码的恶果,还可以在utf8和gbk之间切换文件名。真的修改,而不是像上面那样修改显示的(解码的)效果。
PPT、EXCEL、SPSS、数据分析资料汇总
一、PPT
1、我的PPT培训
技巧培训1(成功标准、设计原则、统一字体)
技巧培训2---色彩应用
技巧一:快速对齐与分布
技巧二:快速改变图形形状
技巧三:快捷键
技巧四:快速移动复制
技巧五:快速选中
技巧六:自动连接
技巧七:参考线
技巧八:填充
技巧九:裁剪
技巧十:为PPT瘦身
PPT制作参考书介绍
2、其他
PPT自动循环反映技巧
PPT制作技巧--拿填充做文章
PPT“高手”的自我总结
ppt密技真言
高手做PPT的流程
PowerPoint高效达人的七大习惯
制作ppt引人注目的PPT的一些细节
在PPT里图表方式的选择
怎样正确地使用图表
如何选择恰当的图表类型
图表应用总结
如何制作精美的Excel与PPT图表
PPT表格使用123原则
PowerPoint 2007 SmartArt 图形类型简介
如何在内容繁多的幻灯片中轻松选取目标内容(07版)
PPT2007中批量删除备注页
为你的ppt找到好图片
如何快速找到合适的图片
PPT设计、排版创意借鉴
如何用图片进行演示
成功PPT的标准是什么?
如何在PPT里插入FLASH文件
自定义PPT音乐在幻灯片起始结束位置
PPT中强调数据
2008年最新ThemeGallery PPT模版打包下载
TG经典PPT模版饼图制作过程演示
TechNet中文网络广播office系列视频教程下载(一)
TechNet中文网络广播office系列视频教程下载(二)
PPT分屏放映操作设置详解
幻灯片放映快捷键使用
表格字型、字体的选择技巧
Office 2007转为PDF和XPS格式插件(好用)
PPT页码设计
PPT设计容易犯的十大错误
打印PPT讲义
《PPT演义》里的十个专业powerpoint绝招
如何在幻灯片中应用金字塔原理
PowerPoint 2010汉化界面
强烈推荐PPT演说之道资料
二、EXCEL
我的EXCEL培训
小蚊子EXCEL培训--文本数据导入
小蚊子EXCEL培训--快速选中单元格
小蚊子EXCEL培训--图表美化技巧
小蚊子EXCEL培训--数据透视表
小蚊子EXCEL培训--VLOOKUP函数使用技巧
图表技巧--折线图
图表技巧--柱形图
图表技巧--条形图
图表技巧--饼图
1、图表
专业商务图表的设计与制作原则
EXCEL图表资料下载
图表类型选择应用总结
统计图表类型选择应用总结(续)
麦肯锡 用图表说话(中文完整版)
Pareto Chart在EXCEL制作步骤
图表设置操作技巧
什么是交叉表
利用EXCEL做矩阵图(散点图) [Excel图表] 搞定散点图
正确使用excel的复合饼图
用图表说话--复合饼图
用图表说话--饼图
用图表说话--柱形图
用图表说话--选择合适的图表类型
如何制作对称条形图
制作经过原点的折线图
EXCEL如何添加平均线(操作演示)
07版本线柱图
创建一个温度计式的Excel图表
用EXCEL制作双坐标轴图表
用EXCEL制作瀑布图
金字塔图在EXCEL的作法
人口金字塔的制作
竖型折线图(蛇形图)绘制步骤
EXCEL动态图
如何制作断层图-图表组合法
直方图、分步柱形图、分步折线图、长城图
加强Excel图表表现能力的小技巧
EXCEL添加辅助标签制作详解
EXCEL中X轴不等间距标签问题
利用JWalk Chart Tools在EXCEL添加文本标签
输入新数据时Excel图表自动更新
Excel图表技巧
图表美化技巧
Excel 图表教程
如何看报表(如何做报表)
图表制作需要注意的事项
Excel图表中的条件格式化
真的需要这么多图表来说明问题吗
[新华图表分析] 失败和错误的案例分析
2、数据分析
EXCEL矩阵相乘MMULT函数应用介绍
Excel技巧:处理折线图表的缺失数据
Excel在统计中的应用
用EXCEL数据分析工具进行抽样
重要程度排序多选题的解题思路
用EXCEL数据分析工具进行抽样
3、其他技巧
EXCEL找不到的函数与错误值提示
如何保护你的EXCEL公式
如何在EXCEL隔7个数就取最大值
我的数据处理
【实用技巧】Excel自定义菜单栏随身带
如果利用EXCEL数据有效性建立下拉菜单
通过使用条件格式查找重复数据
VLOOKUP函数使用的技巧
Excel—通配符在函数里的应用
测测自己对EXCEL的了解程度
困扰已久的问题被VBA搞掂啦
EXCEl问卷制作视频教程
Excel2003函数应用完全手册
关于EXCEL超级链接被禁止的解决方法
EXCEL条件格式的运用
找出重复的数据的几种方法
EXCEL2007删除重复项功能
Access导入Excel 数据注意事项
如何在Access和Excel之间选择
EXCEL打印如何设置每页都显示标题栏
三、OFFICE 2010
OFFICE 2010 BETA安装错误提示
OFFICE2010新功能--PDF转换
EXCEL2010新功能--切片器
EXCEL2010新功能--迷你图
EXCEL2010新功能--条件格式设置增强功能
PPT2010新功能--动画刷
PPT2010新功能--修剪视频
PPT2010新功能--消除图片背景
PPT2010新功能--将幻灯片组织为逻辑节
PPT2010新功能--将鼠标指针转变为激光笔
PPT2010新功能--合并和比较演示文稿
PowerPoint 2010汉化界面
四、水晶易表
如果利用水晶易表制作单选效果
制作简单的水晶易表图
水晶易表从入门到精通(英文视频)
水晶易表2008
水晶易表精美实例(源文件)下载
水晶易表电子版与视频教程
水晶易表不足之处
对水晶易表又进一步了解
再次完工
电子地图终于完工啦
用水晶易表做快递费计算器
用水晶易表做车型市场分析
数据展现的艺术——精通水晶易表Xcelsius
五、SPSS
SPSS 16实用教程--PPT资料下载
SPSS操作快捷键
SPSS中异常值检验的几种方法介绍
在SPSS中将连续变量转化为离散变量
利用SPSS进行快速聚类分析
SPSS12中文菜单
如何显示SPSS一个操作的syntax命令?
如何用SPSS进行数据Z标准化
spss中tables的使用
SPSS问卷分析---编码录入及描述统计详解
利用General tables做多选交叉分析
多项选择题选项在SPSS的转化
SPSS主成分相关资料
SPSS自动生成Case ID程序
如何选择SPSS英文版、中文版、汉化版?
关于顺序问题的设计、分析及SPSS处理(Z)
时间序列预测技术之一
时间序列预测技术之二——SPSS18 软件操作
EpiData数据管理软件的操作与应用--视频教程