Hive的查询基本操作

文章目录 hive 查询语句一、select 句式查询员工表employess_table 包含了几个部门 二、Having子句查询员工信息表有平均薪资大于5000的部门 三、关系运算符1、查询员工信息表中年龄信息为36岁的员工信息2、查询员工信息表中部门Personnel Department的所有员工信息3、查询员工姓名首字母 四、算数运算符计算员工信息表employess_table中所有员工的实际工资计算员工信息表每位员工每天的薪资,以单月工作日为20天计算 五、逻辑运算符查询员工信息表employess_table中薪资大于等于5000,并且薪资小于等于8000的员工信息 六、复杂运算符1、查询学生考级成绩表student_exam_table中所有学生的第一个意向大学2、查询学生考试成绩表student_exam_table中学生的物理或历史成绩3、查询学生考试成绩表student_exam_table中所有学生的数学成绩 七、分组操作分组查询员工信息表employess_table的部门 八、排序操作1,order by(全局排序)2,sort by(局部排序)3,查询商品销售表sales_table中销售额排名前十的省份以及城市4,对商品销售表中不同省份内每个城市的销售额进行排序5、升序(ASC) 降序(DESC) 和 Cluster By 九、union 语句将学生信息表中301的班级学生和教室信息表中301的班级老师合并在一起 十、join 语句1、join语句的内连接,连接学生名单表和教师名单表2、join 语句的左外连接3、join 语句的右外连接4、join 语句的全外连接5、join语句的左半连接6、join 语句的笛卡尔积连接 十一、抽样查询1、随机抽样 随机从学生名单表中抽取三名学生2、分桶抽样3、数据块抽样 hive 查询语句 一、select 句式 查询员工表employess_table 包含了几个部门 输入命令: select * from employess_table 查看员工表的所有信息 输入命令: select distinct staff_dept from employess 对员工信息表的部门字段进行查询,distinct 去重 查看出来了员工信息表有五个部门 二、Having子句 HAVING子句的用法与WHERE子句的用法一致,都是在查询语句中指定查询条件,不同的是HAVING子句中可以使用聚合函数,并且HAVING子句必须配合GROUP BY子句一同使用,而WHERE子句中不能使用聚合函数,例如查询每个部门平均薪资大于5000的部门,具体命令如下 输入命令 查询员工信息表有平均薪资大于5000的部门 输入命令: select staff_dept from emplyess_table group by staff_table having AVG(staff_salary) > 5000 注意having 一定要 配聚合函数 group by 而where 不可以用聚合函数 gropy by 聚合的那个字段在前面的字段里面去找,要是只有一个那肯定就是

git 进阶系列简称--clone

git clone 功能介绍 拉取远程仓库到本地。 功能解析 git clone https://github.com/g-morty/g-morty.github.io.git git clone git@github.com:g-morty/g-morty.github.io.git 将远程仓库拉取一份到吧本地。可以选择https协议,也可以使用ssh协议。

【图像处理matlab】PCA+KNN人脸识别 ORL人脸数据集

文章目录 0.写在前面1. 数据集导入与划分2. train-PCA构建脸空间2.1 原始数据导入2.2 去中心化2.3 求解协方差矩阵、特征值、特征向量2.4 特征脸选取--脸空间 3. test-物以类聚 KNN分类3.1 KNN简介3.2 KNN实现步骤3.2.1 距离度量---欧式距离、豪斯多夫距离.......3.2.2 k值选择3.2.3 “投票”预测分类 4. 结果分析5. matlab代码实现参考 0.写在前面 本实验使用ORL数据集中的前100张人脸图像进行 实验整体思路为: PCA数据降维,使用train图片计算映射脸空间,以实现将每张人脸的二维灰度图矩阵降维至一维的点欧式距离,求出某张映射后test图片到所有映射后train图片的欧式距离KNN分类,2步骤求出的所有距离值升序排列,取最小前k个(k自定义),出现频数最多的label为test图片的预测类别验证并计算准确率 1. 数据集导入与划分 首先应明确以下几点: 数据集大小为100每行10张,为一个人的全部图像。共10人数据集的60%为训练集,40%为测试集。以实现交叉验证 接着:按照上图的排序对100张图片进行编号每个人对应label标签1-10每个人的前6张作为train训练集,后4张作为test测试集 经上述步骤,可将数据集结构抽象为下表: 接下来基于上表结构,介绍如何使用matlab实现数据集的导入与划分 导入 (1)dir函数 dataset=dir(‘path\ *.类型’)以读取指定文件夹path下的指定类型的全部文件 实验中图片均为.bmp格式,使用如下语句获取每张图片的信息: list_names=dir('C:\Users\ZKX\Desktop\ORL_100\*.bmp') 得到一个100*1的结构体,记录了每张图片的如下信息 创建以下变量 img_num:记录数据集大小folder:记录存储数据集文件夹路径 方便后续imread的导入 img_num = length(list_names);% 文件夹中图像的个数 folder=list_names.folder (2)imread函数 imread(‘path\文件名’)以读取指定图片 其中: 1)path由上一步folder获得 2)文件名由上一步结构体变量list_names(idx).name获得 3)idx下标范围为1-数据集大小img_num 在matlab中使用[str1,str2,…]进行字符串拼接,故每张图片imread路径可表示为:‘path\文件名’=[folder,’ \ ',list_names(idx).name] 构造DB矩阵存储所有图片的灰度值矩阵,可通过如下语句实现: DB= zeros(112,92,img_num); for idx = 1:img_num DB(:,:,idx) =imread([folder,'\',list_names(idx).name]);%读取图像数据,类似构建mat矩阵 end DB = reshape(DB, 112*92,100); 查看用于存储100张图片灰度值的变量DB

vite配置@别名,以及如何让vscode智能提示路经

vite配置@别名 vite.config.ts import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' // 配置@别名 import { resolve } from "path"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue()], // ↓解析配置 resolve: { // ↓路径别名 alias: { "@": resolve(__dirname, "./src") } } }) tsconfig.json { "compilerOptions": { "target": "ESNext", ... // 配置@别名 "baseUrl": ".", "paths": { "@/*": ["src/*"] }, }, } 如果运行不了或报错试下安装下 @types/node ,没有报错可以不用安装,有安装也没事 npm install @types/node vscode智能提示 如果没有提示先下载VScode插件(通用,不至vite,只要配置好@别名就行) Path-intellisense 安装好后,发现不加一个名字就会以下情况

clickhouse安装详细教程

1.前置准备 首先我们准备一台有linux系统的服务器 然后更改文件的所属者,这点很重要 下载解压jdk, 配置环境变量 接下来进入正题: 安装clickhouse 1.确定防火墙处于关闭状态 2.安装相关依赖:分别执行如下两行命令 sudo yum install -y libtool sudo yum install -y unixODBC 3.下载clickhouse安装包是四个,这里可以去官网下载: 4.执行安装rpm文件命令: 5.安装过程中尽量不要设置密码,直接回车就好,默认就是没有密码,不设置密码可以避免后续的很多问题: 6.查看所有的安装情况: 7.接下来修改配置文件,把<listen_host>::</listen_host>标签打开,也就是说把注释标签去掉,然后启动clickhouse-server,发现启动成功! 8.启动客户端: 或者浏览器输入:服务器地址+8123看是否出现ok 此时我们的clickhouse已经安装完毕,接下来就可以开始使用了!! 默认的一些文件存储路径: 参考文章: https://huaweicloud.csdn.net/6335508ed3efff3090b54074.html?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Eactivity-1-122367734-blog-127908997.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Eactivity-1-122367734-blog-127908997.pc_relevant_landingrelevant&utm_relevant_index=2

FPGA学习笔记(七): DSB调制解调的仿真

笔记七是DSB调制解调的仿真实现。 DSB调制解调的实现原理:首先使用DDS产生低频正弦波信号作为调制信号,再用DDS产生高频信号作为载波信号,然后使用乘法器将两者相乘产生DSB信号,DSB信号与载波信号相乘之后,再经过FIR低通滤波器解调出原调制信号。 1. 打开VIVADO,点击IP Catalog 2. 搜索DDS,点击DDS Complier 3. DDS参数配置 依照之前配置两个DDS IP核 依照上述步骤,加另外一个DDS IP核 4. 点击IP Catalog,搜索mult,选择Multiplier 5. 参数配置 同样配置另外一个Multiplier 6. 点击IP Catalog,搜索fir,选择FIR Complier 7. 配置参数 (1) 选择coe文件格式,将FIR 的coe文件加载进去 FIR的COE文件生成参考FPGA学习笔记(六): FIR IP核的使用_qq_47598782的博客-CSDN博客 (2) 采样频率 4MHz,时钟频率 50MHz (3) 输入信号位宽为16bit,选择Symmetric 8. 调制模块文件 module DSB_modulation( input clk, // 输入clk output [15:0] dds_out1, // 输出正弦信号1 output [15:0] dds_out2, // 输出正弦信号2 output [31:0] dout // 输出混频信号,即DSB信号 ); wire clk; wire [15:0] dds_out1; wire [15:0] dds_out2; // 例化 dds_compiler_0 U0_dds_compiler ( .

Mybatis源码详解

Mybatis源码详解 Mybatis相关全览一、JDBC与Mybatis对比JDBC调用Mybatis调用两者对比 二、Mybatis资源加载数据源获取SqlSessionFactoryBuilder.buildXMLConfigBuilder.parseXMLConfigBuilder.environmentsElement SQL语句获取1.入口2.两种方式3.XML方式获取SQL3.1 XMLMapperBuilder.parse()3.2 XMLMapperBuilder.configurationElement3.4 XMLMapperBuilder.buildStatementFromContext3.5 XMLStatementBuilder.parseStatementNode3.6 MapperBuilderAssistant.addMappedStatement 4.注解的方式获取SQL4.1 MapperRegistry.addMapper4.2 MapperAnnotationBuilder.parse4.3 MapperAnnotationBuilder.parseStatement 5.最终的SQL处理方法XMLLanguageDriver.createSqlSource动/静SQL判断静态SQL处理 6.如果两种配置方式我都配了会怎样?先走Xml解析,后走注解的方式先走注解的方式,后走Xml的解析 Mapper代理对象获取命名空间加载入口包/类名加载入口 总结 三、Mybatis语句执行1.代理对象的生成2.代理对象的执行方法3.方法的执行4.查询一条为例5.执行器执行5.1 获取StatementHandler5.2 获取连接并获取SQL5.2.1 预处理Statement5.2.2 SQL传参处理 5.3 执行并处理返回结果 6.总结 四、总结核心部件遗漏的知识点 本文用的是3.5.10版本 源码地址:https://github.com/mybatis/mybatis-3/releases 文档地址:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html 环境的搭建本文不做阐述了,文档里面有,本文适用已经对Mybatis使用有一定了解的人阅读! Mybatis相关全览 一. Mybatis源码详解 二. Mybatis二级缓存详解 三. Mybatis三大执行器介绍 四. Mybatis拦截器源码详解 一、JDBC与Mybatis对比 我们先看看Mybatis调用Mysql和JDBC调用Mysql有什么区别?这样就知道Mybatis帮我们做了哪些事了 JDBC调用 加载驱动后,先获取连接(数据源)获取操作对象(预编译)传参处理执行返回值处理 Connection connection =null; try { // 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //1.获取连接 数据源 connection = DriverManager.getConnection(url, user, password); //2.获取操作对象 PreparedStatement preparedStatement = connection.prepareStatement("select * from test_user where id=?"); //3.传参处理 preparedStatement.

Vue过滤器的与Boot CDN的使用

过滤器的定义:对显示的数据进行特定格式化后显示 先在如上网站找到一个js文件 找到如下文件: 复制链接后再浏览器打开: 可以保存在你编译过滤器的文件夹 最后就是在Vue中引入这个文件 格式是怎么样的呢?大家在刚刚准备工作里的dayjs里会看到Github仓库: 点进去 然后划到底部点击简体中文 你就能看到 书写格式了 过滤器也分局部过滤器和全局过滤器 接下来就是我的代码实操: 局部过滤器就是在Vue实例里: 执行后就是: 最后就是全局过滤器了: 全局过滤器是在Vue实例之前的: 全部代码如下 若有错误欢迎指责,若有提议欢迎留言,若有不足欢迎指正

最全动态规划题型详解

文章目录 前言数字三角形模型1. 数字三角形2. 最低通行费3. 方格取数总结 最长上升子序列模型1. 最长上升子序列(LIS)2. 怪盗基德的滑翔翼3. 最长公共子序列4. 最长公共上升子序列总结 背包问题模型01背包1. 01背包2. 装箱问题 完全背包1. 完全背包问题2. 买书 多重背包Ⅰ多重背包Ⅱ分组背包有依赖的背包问题背包问题求方案数总结 区间dp模型1. 石子合并2. 加分二叉树总结 状态机模型1. 大盗阿福2. 股票买卖Ⅳ3.股票买卖Ⅴ总结 状态压缩dp1.小国王(棋盘型状压dp)2. 玉米田总结 树形dp模型1.没有上司的舞会2. 树的最长路径3. 树的中心4. 战略游戏总结 数位dp模型1. 数的度量2. 数字游戏总结 插头dp模型dp的优化方法 前言 由于动态规划没有固定的套路并且个人认为也是算法里面最难的算法,所以这里讲解动态规划常见的几种模型,因为本文是自己学习后的总结,所以后面还会补充一些细节。 如有错误请及时指出 什么是动态规划(官方解释,但好像没什么用) 动态规划 Dynamic Programming,DP:是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果。 动态规划的核心思想 通俗的讲dp的核心就是记住已经解决过子问题的解,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。dp常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所消耗的时间往往远小于朴素解法。 分治和动态规划的区别 共同点:两者都要求原问题具有最优子结构性质,都是将原问题分而治之,分解成若干个规模较小的子问题,然后将子问题的解合并,最终得到答案。 不同点:分治法将分解后的子问题看成相互独立的,通常用递归来做。动态规划将分解后的子问题理解为相互间有联系,有重叠部分,需要记忆,通常用迭代来做。 动态规划性质 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势) 动态规划的步骤 确定dp数组及其下标的含义;(找出状态表示)确定递推公式;(确定状态转移)dp数组如何初始化;确定遍历顺序;举例推导dp数组。 求状态表示的小技巧: 一般由题目要求什么,状态表示就表示成什么。 求状态转移的小技巧: 可将所有物品(比如:背包问题中题目给出的物品就是‘物品’,子序列问题中每个数就是物品,股票问题中股票就是物品)看成一个集合,这个集合又是由几个集合组成,然后可以考虑某一个状态表示是由哪几个集合转移来的(前面的集合已经求出)。 举个例子:在背包问题中,可以将所有物品看成一个集合,那么这个集合可能由不同的集合组成,也就是不同的物品组合,然后在目前这个背包容量下可以是由前面哪个集合转移过来才能使价值最大(将哪个物品组装入才能使价值在不超过容量的前提下价值最大)。要是看不懂可以将后面背包问题看了在回来看这儿 哪种题型一般使用动态规划求解 最优解问题:数组中最大值型,比如:最长上升子序列,最大子数组,最长公共子序列等问题。求可行性问题:如果有这样一个问题,让你判断是否存在一条总和为 x 的路径(如果找到了,就是 True;如果找不到,自然就是 False),或者让你判断能否找到一条符合某种条件的路径,那么这类问题都可以归纳为求可行性问题,并且可以使用动态规划来解。求方案数问题:求方案总数也是比较常见的一类动态规划问题。比如说给定一个数据结构和限定条件,让你计算出一个方案的所有可能的路径,那么这种问题就属于求方案总数的问题。 数字三角形模型 ~~~~ 1. 数字三角形 解题思路 可将题目中所有元素看成一个集合,题目中要求路径中的数字和最大,并且题目中的元素的二维排列的,那么状态表示就可以是f[i][j]表示沿着某条路径走到第i行第j列这条路径上的数字和为多少,那状态转移怎么算呢?就像我们上面说的,我们可以看第i行第j列这个状态可能由哪些集合转移过来,可以看到第i行第j列可以由第i-1行第j列和第i-1行第j-1列转移而来,而第i-1行第j列和第i-1行第j-1列这两个状态可以表示成f[i-1][j],f[i-1][j-1](也就是上面提到的集合),虽然f[i][j]可以由f[i-1][j-1]表示,但是前提是这两个状态(也可以说成这两个集合)得求出来。 状态表示:f[i][j]表示从左上角走到第i行第j列的和的最大值 转移方程:f[i][j] = max(f[i-1][j-1],f[i-1][j])

【好文鉴赏】初创公司到底值不值得去?从以下几点考虑

关键词:【初创公司】【职业发展】【就业】 原文链接: https://tech.sina.cn/csj/2018-09-10/doc-ihiixyeu5565677.d.htmlhttps://www.zhihu.com/question/312725868/answer/693656577 有人说初创公司管理不成熟,未来不稳定; 有人说初创公司个人能力进步快,有机会弯道超车。 … 那么,我到底该不该去创业公司?什么样的初创公司值得去呢? 本文作者,硅谷知名互联网连续创业者和投资者,曾担任Y Combinator的合伙人,影响过900多家公司并资助了130多家公司的Justin Kan。将从多方面例举入职初创公司的缺点和优点,并提出建议,不偏不倚,供你参考; 为什么不该去初创公司 管理问题 初创公司普遍都有着非常突出的管理问题。这么说听起来有些夸张,但事实的确如此; 开玩笑说世界上有两种初创公司:一类是管理差劲的黑马公司,另一类则是管理差劲的其他初创公司。言下之意就是,如果你去了一家初创公司,尤其是处于创办早期的那种,那么你很可能无法在工作中得到足够的教导和指引。当然,如果你自己非常积极地敦促前辈来指导你,问题可能不至于那么严重。 缺乏指导也不见得一定是坏事,这点在文章后面会再提到。但敦促自己的领导和经理来指导自己这件事,很多人都会是非常抗拒的,对缺乏自主能力的人来说更是尤为困难。 说实话,如果要把初创公司的管理系统拿去跟一家著名的大公司比较的话,两者还确实是差的比较远; 大公司在各个管理领域都有着多年的经验:从员工入职,到管理培训、目标规划…它们能为员工提供完整的引导和教学,而这些也正是能助其走向成功的关键所在; 薪资水平 想要靠一份初创公司的工作发家致富是不太可能的,这一点在数据上也得到过证实。初创公司的薪资水平在许多人的印象里似乎很高,但事实并非如此。如果你是为了得到高薪而加入的初创公司,那么我必须告诉你,这绝对是最糟糕的理由。 有的人也许听过Google按摩师、Facebook油漆工分到大量股票的故事,于是幻想着同样的事情也会在自己身上发生。 如果你是抱着这样的幻想加入了初创公司、甚至决定在初创公司呆一辈子,那么你注定是会失望的。或许有朝一日你的确有可能获得晋升、有机会拿到比那些普通的朝九晚五工作更多的报酬,但同时也请你记得考虑一下其他几个方面的问题: 你的风险偏好;放弃稳定性及工作生活平衡的机会成本; 稳定性 在作者搬到硅谷的10年以来,有幸看到了这个地方日益成熟的过程。最早的时候,人们往往都是因参与一些有趣的前沿项目来到这里,但这批人员的规模极少。 而如今,每天都有大量的人才不断涌入硅谷。他们想在这里描绘出更好的职业轨迹、收获更高的薪酬。而成批的大型科技公司也能同时保证其工作的稳定性。 如果你想要的是上述所说的那些东西,那么你就不该来初创公司。近来身边有越来越多的员工,甚至包括那些最近才亲自招进来的员工,他们会找上门来问:“我在这儿的职业道路是怎样的?我的未来五年规划是什么?” 如果要实话实说的话,答案可能是:“我们连够五年用的资金都没有。”现在连资金都没着落,要做任何五年计划都是扯谈。从公司的角度来说,我们的计划自然是:努力存续下去、见招拆招、成为一家能延续数十载的公司; 作者:但如果你想要我今天就拍胸脯向你保证工作的稳定性,那我觉得你还是选择去Google的好 为什么要去初创公司 去初创公司的理由有哪些。在下面的每一条理由中,作者都援引了作为企业家的个人经历 有机会接触到自己不能胜任的工作 在初创公司,你能接触到自己完全无法胜任的、或是尚且无法做好的工作; 以下是作者的亲身经历: 这点我在 Justin.tv 工作的时候就深有体会:那是八年前,我同样是要去YC(Y Combinator)的一场初创公司博览会做演讲,演讲内容是介绍我当时的公司,我们还有幸通过那次活动招到了一名员工。 这位员工叫 Guillaume,来自法国,工作经历不是很长,只有几年。但仅仅在加入公司一年之内,他就掌管了我们铁路应用后端的工作。Justin.tv 在当时可是排名全球 Top 150 的网站,在铁路门类下的排名更是高达Top 20(当然那时是2010年,门槛比现在要低得多)。 而且说实话,当时的他是完全不够格做那种程度的工作的。如果不是因为他加入了一家人手短缺的初创公司,他可能永远都无法得到这样的工作机会。后来,Guillaume又转而成为了Justin.tv的衍生公司 Socialcam 的联合创始人; Socialcam 在 YC 经历了创业孵化后,在短短两个月内从零开始培养了1.28亿用户。这一过程的学习密度对他来说是颇为不可思议的。如今,他已经作为联合创始人创办了又一家公司Triplebyte。该公司的主要业务是帮助科技公司招募优秀的工程师; 自主创业之路上的垫脚石 如果你想创办自己的公司,那么在一家初创公司工作能让你学到许多宝贵的经验; 同样是作者亲身经历: 再举个例子——2012年的时候,我创办了一家叫做Exec的公司。同时我还招纳了一名非常有天赋的工程师,他的名字叫Finbarr。当时Finbarr还在Groupon工作,但他认为自己有朝一日要创办自己的公司,于是决定转而加入一家初创公司。从他身上我总结出了一点经验,那就是 🚩要把你自己放在一个身边的人都能推动你实现目标的环境之中;和我一起创办Twitch的联合创始人Emmett Shear就总对我说:“你是你最亲密的五个朋友的平均数。”如果你想创办公司,那么就该去跟初创公司的人做朋友。这点我是举双手认同的。 我们卖掉Exec以后,Finbarr和在Exec结识的同事一起,创办了自己的初创公司。虽然这家公司最终没能成功,但他却成功踏入了创业界,后来又创办了另一家名为Shogun的公司。这家公司最近才离开了YC的孵化,如今正在迅猛发展。 学习效率最优化 在作者看来这是三点中最重要的: 两个例子 例子的主人公是和我一起创办Cruise的两名联合创始人。我认为他们都体现出了学习效率的最优化,只不过他们最优化的环境不同,一个是在公司欣欣向荣时,一个是在公司日益衰败时。 第一名联合创始人叫做Kyle Vogt。他从MIT毕业后直接去了Justin.tv工作。Kyle专业学的是硬件,我们最初一起共事时研究的也是硬件领域的解决方案,但他最后却成为了一名联合创始人,同时兼任计算机工程部副总裁。此外,Kyle还是一名了不起的黑客及工匠手,总是能想方设法造出你需要的东西。但在我们创办Cruise之时,他在扩展系统方面还不太有经验,也不太会建造可扩展的技术架构。 虽然缺乏经验,但Kyle却从零开始,靠一己之力设计打造出了一个可扩展的、动态的视频直播系统。刚建成时,这个系统还会不时崩溃。于是我们每隔36到48小时就得把他叫来,好让系统起死回生。还有一次因为他休假了联系不上,我们只好点了一份披萨,让外卖员帮我们把消息送到他的宾馆去。 那时的Kyle并没有多少历史资料可以参考,于是他不得不在短时间内快速学习。后来Twich于2014年被Amazon收购。而彼时的视频直播系统,已经随着Kyle的不断改进,成为了北美带宽消耗量排名第四的平台。 另一名联合创始人叫Daniel,他在Justin.tv做实习生的时候认识了Kyle。在加入初创公司的头几年中,他也可以说是给自己上了一堂速成课。有一次,出于工作目的,他请了当时还没出名的Jonas Brothers乐队来Justin.tv的网站上做广播。 没想到,爆红的Jonas Brothers带来的流量直接导致了Justin.

Oracle VM VirtualBox上配置新的Ubuntu20.04

目录 一、VM VirtualBox的安装 二、下载ubuntu 20.04 三、解决 window10 没有64位系统选项的解决方法 四、创建虚拟机 下面我列举几个注意点,可供参考: 1)问题:没有工具栏,即管理、控制、视图那一栏 2)问题:比例不完整,很难看,有的还显示不完整,例如 3)找不到终端,快捷键或者点击左下角 九点 ,然后往下划找到终端,固定在任务栏即可 ​编辑 4)ubuntu打不开终端 5) vi编辑器中按上下左右键会出现ABCD,按 i 也进入不了插入模式 6)使用 sudo 前缀时报错 7)问题:安装好增强功能后重启打不开虚拟机 五、创建好虚拟机,便开始配置设置 1、打开共享粘贴板以及拖放 2、设置存储、分配光驱 3、网络可设可不设,设置桥接需要网线或者局域网 4、挂载共享文件夹,需要现在window主机上创建文件夹,以及在虚拟机中创建文件夹 5、更改下载源 六、安装 vim、git、vimplus 1)安装vim 2)安装git 3)安装 vimplus 一、VM VirtualBox的安装 两种方法: 1)进入Oracle VM VirtualBox官网下载 Oracle VM VirtualBox 2)找已经下载好的安装包进行解压安装 二、下载ubuntu 20.04 三种方法: 1)找已经下载好的安装包进行解压安装 2)网上找资源,如ubuntu16.04等等 ubuntu 16.04 镜像下载(国内开源镜像站)_dongjuexk的博客-CSDN博客_ubuntu16.04镜像 3)去官网下载 三、解决 window10 没有64位系统选项的解决方法 参考链接: VirtualBox 安装 Ubuntu 开发环境详细图文教程 - 知乎 (zhihu.com) 使用 Window 10 系统,运行 VirtualBox,可能会出现新建虚拟机没有 64位系统的选项,这与 Window 10 的 Hyper-V有关

...mapState 和 ...mapMutations入门使用

​ 1.首先要知道在vuex里面,state里面是存放数据的(类似于vue里面的data),mutations里面存放的是各种函数方法,用来改变state里面的数据的方法。 比如: import Vue from “vue”; import Vuex from “vuex”; Vue.use(Vuex); export default new Vuex.Store({ state: { leftFocus : ‘’, hasBg : ‘’, loadingNum : 0, }, mutations: { chooseLeft: (state,thisActive) => state.leftFocus = thisActive, updateBg: (state,hasBg) => state.hasBg = hasBg, addLoading : (state) => state.loadingNum += 1, subLoading : (state) => state.loadingNum = state.loadingNum > 0?state.loadingNum-1:0, } }); 2.state里面的数据在使用的时候,一般是挂在computed里面的,因为如果你挂在data上面,只会赋值一次,不会跟着vuex里面的变化而同步变化,当然也可以通过watch $store去解决这个问题,如下: computed: { hasBg(){ return this.$store.state.hasBg } }

【好文鉴赏】优秀的后端应该有哪些开发习惯

关键词:[后端] [编程习惯] [代码风格] 原文链接: https://juejin.cn/post/7072252275002966030https://www.51cto.com/article/721104.html 这里涉及到的主要是 Java 语言,当然也有通用的一些习惯; 拆分合理的目录结构 受传统的 MVC 模式影响,传统做法大多是几个固定的文件夹 controller、service、mapper、entity,然后无限制添加,到最后你就会发现一个 service 文件夹下面有几十上百个 Service 类,根本没法分清业务模块。正确的做法是在写 Service 上层新建一个 modules 文件夹,在 moudles 文件夹下根据不同业务建立不同的包,在这些包下面写具体的 service、controller、entity、enums 包或者继续拆分; 等以后开发版本迭代,如果某个包可以继续拆领域就继续往下拆,可以很清楚的一览项目业务模块。后续拆微服务也简单; ps:个人理解为把 功能模块化 转换为 业务模块化,但是又保证了单个业务下的功能模块化;随着整个系统不断扩张时,后者无论是在查询效率还是在扩展效率上都有显著提高;但应该要留意不同业务之间的交互; 封装方法形参 当你的方法形参过多时请封装一个对象出来… 下面是一个反面教材,谁特么教你这样写代码的! public void updateCustomerDeviceAndInstallInfo(long customerId, String channelKey, String androidId, String imei, String gaId, String gcmPushToken, String instanceId) {} 写个对象出来并给它赋予相应的意义,使用对象传参清晰明了,也方便后期扩展和维护; public class CustomerDeviceRequest { private Long customerId; private String channelKey; private String androidId; private String imei; private String gaId; private String gcmPushToken; private String instanceId; } public void updateCustomerDeviceAndInstallInfo(CustomerDeviceRequest cdr) {} 为什么要这么写?比如你这方法是用来查询的,万一以后加个查询条件是不是要修改方法?每次加每次都要改方法参数列表。封装个对象,以后无论加多少查询条件都只需要在对象里面加字段就行。而且关键是看起来代码也很舒服啊!

缓冲区 | 无需安装GIS软件,零代码创建缓冲区

1 前言 缓冲区---缓冲区是地理空间目标的一种影响范围或服务范围,具体指在点、线、面实体的周围,自动建立的一定宽度的多边,数学表达为:Bi=(x:d(xi,Oi)≤R)。 如下图,可以根据点、线、面,分别设置缓冲距离,创建缓冲图形。 可以应用在地理分析、区域展示、地理搜索等应用场景中。 本文介绍使用小O地图创建缓冲区图形,无需编码、无需安装专业GIS软件均可以快速批量创建缓冲区图形。 2 使用软件 小O地图EXE版0959,创建图形 / 创建缓冲区任务。 软件无需安装,绿色版本,下载解压缩文件后,启动Start.exe即可启动软件。 3 操作步骤 准备好需要创建的图形文件作为输入文件,格式支持:SHP、GeoJSON、Mapinfo Tab、KML等常用的GIS格式文件 点击【地图任务】选择新建 【创建图形 \ 创建缓冲区 】任务,在运行页面里设置缓冲区距离、选择输入和输出文件。 分别设置输入和输出文件的路径,输入文件和输出文件均支持SHP、GeoJSON、Mapinfo Tab、KML等格式。 设置完毕后,点击【执行】,程序按设置条件创建缓冲区图形,并将结果输出文件。 在本文案例中,我们创建的图形在QGIS中打开如下图 输入数据为杭州道路,为线段格式。下图绿线。输出数据为杭州-缓冲区,为多边形格式。下图咖啡色多边形。 4 结语 本文介绍使用小O地图创建缓冲区图形,无需编码、无需安装专业GIS软件均可以快速批量创建缓冲区图形。 除创建缓冲区图形,小O地图还支持创建圆形、泰森多边形、网格等图形,能够满足教学、科研、报告等日常GIS数据处理需求,小O地图一如既往为用户提供更多实用的GIS功能。

js 关于如何动态设置css的hover样式最佳方式,设置hover样式

效果图: 动态设置css的hover样式? 网上很多方式都是采用js监听dom的鼠标移入(onmouseover)移出(onmouseout)事件,进行控制这个dom的hover样式。消耗性能先不说,代码也很庞大,再加上如果是自定义主题(修改后能立马看到效果的,不是需要刷新)的功能可能就更麻烦了,要给所有的dom都绑定这样的事件。 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> :root{ --color:#aaa; } .btn{ cursor: pointer; display: inline-block; padding: 10px 40px; color:white; background: blue; border-radius: 8px; } .btn:hover{ background: var(--color); } </style> </head> <body> <div id="btn" class="btn">点击后悬浮效果变化</div> </body> </html> <script> document.getElementById('btn').addEventListener('click',function(){ document.body.style.setProperty('--color', '#FF6155'); }); </script>

Windows服务器配置证书

以windows server 2012为列 1.打开服务器管理器 2.添加角色和功能 3.点击下一步 4.继续下一步 5.继续下一步 6.选择证书服务 7.添加该功能 8.继续下一步 9.继续下一步 10.继续下一步 11.添加证书颁发机构和证书颁发机构web注册 ,然后点击下一步 12.点击安装 13.再次打开 服务器管理器,点击黄色感叹号(没有该步骤可跳过) 14.点击配置目标服务(没有该步骤可跳过) 15.点击下一步(没有该步骤可跳过) 16.再次点击证书颁发机构和证书颁发机构web注册 ,然后点击下一步(没有该步骤可跳过) 17.点击下一步 18.点击下一步 19.点击下一步 20.配置算法为SHA256 密钥长度为4096 提供程序选Storage提供的(sha1算法已被淘汰使用) 21.点击下一步 22. 配置有效年数,并点击下一步 23.继续下一步 24.点击配置 25.配置完成后,打开设备管理,点击服务,打开CertSvc证书服务(证书服务安装完成) 26.命令打开certsrv.msc 证书管理界面 27.点击右键属性可查看该证书加密相关情况

vs内存泄漏三种检测方式

1.采用重载new 详解:C++内存泄露检测原理_nodeathphoenix的专栏-CSDN博客 具体操作步骤: 1.重载头文件Memdect.h #pragma once /* GBK */ // VS支持的内存泄露检测 #define _CRTDBG_MAP_ALLOC #include<cstdlib> #include<crtdbg.h> #ifdef _DEBUG #ifndef DBG_NEW #define DBG_NEW new(_NORMAL_BLOCK,__FILE__,__LINE__) #define new DBG_NEW #endif // !DBG_NEW #endif // _DEBUG /* 内存检测 */ #define MEMORYDETECTION _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF) /* 指定位置进入内存申请断点 */ #define MEMORYPOSITIONING(a) _CrtSetBreakAlloc(a) /** * 说明: * 通过重新定义new,来实现定位到泄露的文件、行号 * 该行为定义为,只在debug模式下有效。 * 当您在debug模式下使用new申请内存时,产生的泄露,会给出具体的泄露位置。 * 当您在使用其他的内存申请工具时,只提示内存的申请次数。如malloc,您可通过定位宏在进入调试后进入泄露的位置。 */ /** * 使用方法: * 在你需要检测的函数内使用宏 MEMORYDETECTION 来检测此宏以下的内存申请 * 在你需要进入内存申请次数的位置时,使用宏 MEMORYPOSITIONING(a) 来指定位置,该参数通常使用 MEMORYDETECTION 来获得 */ (1)测试泄漏代码,new两个变量不释放

时间戳转化为天时分秒

方法: TimeInterval(timestamp) { //时间戳转化为天时分秒 // 总秒数 var second = Math.floor(timestamp/ 1000); // 天数 var day = Math.floor(second / 3600 / 24); // 小时 var hr = Math.floor(second / 3600 % 24); // 分钟 var min = Math.floor(second / 60 % 60); // 秒 var sec = Math.floor(second % 60); return (day?day + "天":'') + (hr?hr+ "小时":'') + ( min?min + "分钟":'') + sec + "秒"; }, 使用直接传入 时间戳作为参数即可 let appointTimestamp= this.