技术文章

CentOS8 使用Docker容器中 SqlServer数据库 外部连接

为君一笑 提交于 2021-02-18 17:36:06
楔子 工作在win10环境下,使用Docker Windows桌面版容器化SqlServer数据库连接使用(主要是想用Docker),但是同时需要Linux系统测试,win10 下VMware 虚拟机安装CentOS 与Docker冲突(都是虚拟化技术,该冲突可以解决,但是切换麻烦略),想到Win10 Linux 子系统发现也是一样,关键Win10 Linux 子系统安装Docker无法运行,最后干脆在CentOS 虚拟机下安装Docker 然后容器化SqlServer 让外界访问使用 需要步骤(所需工具) VMware Workstation 15 Pro CentOS 8 SQL Server Docker DataGrip 方便数据库连接 安装 VMware Workstation 15 Pro(略) 虚拟机安装 CentOS 8 建议 内存大于2G (sqlserver 需要服务器的内存至少2G) 网络先设置自动获取(GUI桌面最好,方便手动设置网络而不用进入vi修改网络配置) Docker 安装步骤 下载docker-ce的repo curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo 安装依赖 yum install https:/

记一次神奇的sql查询经历,group by慢查询优化(已解决)

痞子三分冷 提交于 2021-02-18 17:35:26
一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下: 我在测试环境构造了500万条数据,模拟了这个慢查询。 简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。 说一下app_account字段的分布情况,随机生成了5000个不同的随机数,然后分布到了这500万条数据里,平均来说,每个app_account都会有1000个是重复的值,种类共有5000个。 二、看执行计划 可以看到,group by字段上我是加了索引的,也用到了。 三、优化 说实话,我是不知道该怎么优化的,这玩意还能怎么优化啊!先说下,下面的思路都是没用的。 思路一: 后面应该加上 order by null;避免无用排序,但其实对结果耗时影响不大,还是很慢。 思路二: where条件太复杂,没索引,导致查询慢,但我给where条件的所有字段加上了组合索引,也还是没用 思路三: 既然group by慢,换distinct试试??(这里就是本篇博客里说的神奇的地方了) 卧槽???!!!这是什么情况,瞬间这么快了??!!! 虽然知道group by和distinct有很小的性能差距,但是真没想到,差距居然这么大!!!大发现啊!! 四、你以为这就结束了吗 我是真的希望就这么结束了,那这个问题就很简单的解决了

Conflux与TEEX达成战略合作

☆樱花仙子☆ 提交于 2021-02-18 17:35:08
7月4日,Conflux与可信计算平台TEEX达成战略合作。 Conflux的Layer-1系统将与TEEX链下隐私安全解决方案相结合,旨在为现有区块链提供更加隐私、安全以及可扩展的基础设施,并通过可信技术进一步促进多区块链与真实世界的联系。 Conflux与TEEX在区块链隐私保护和可信技术方面拥有相同的愿景。双方将持续地在技术合作上沟通与探讨,为用户提供安全方便且兼顾隐私的基础设施与生态。 Conflux创始人龙凡博士表示,一个出色的区块链底层协议不应该以牺牲去中心化和安全性的方式来追求高性能,并且这项技术在数据沟通场景中能超越互联网信息传递而达成革命性的应用。TEEX在数据的应用及可验证计算策略可以确保数据的隐私性并具备高效的性能与兼容性。Conflux相信通过与TEEX这样优秀的分布式可信计算机平台合作实现丰富的商业应用场景,实现区块链在信息沟通上的革命性意义。 TEEX联合创始人余炀博士也认为,TEEX和Conflux在区块链隐私安全方面的合作,将TEEX安全增强解决方案与Conflux底层技术结合,以保证数据隐私和安全密钥管理,并且相信,强强联合必将进一步推动区块链与真实世界的连接及应用落地。 此次战略合作将先从Conflux的底层公链系统与TEEX可信技术的初始集成开始,设计模式和技术集成等细节将在双方的最终研究和讨论中再进一步公布。 随着双方对彼此技术的深入了解

测试容易被开发鄙视,是真的有原因的

时光怂恿深爱的人放手 提交于 2021-02-18 17:34:49
不知道是不是年底了,大家都焦虑了,最近经常收到后台留言:现在的工作学不到东西,技术水平难以提升,薪资也很难有涨幅。 测试工作做到两三年的时候,基本就能掌握测试需要的大部分知识了, 很多人就会感觉到发展瓶颈了,很快 对工作失去了激情,日复一日地跟开发、产品撕逼扯淡,这样「充实地」过着每一天。几乎没有时间,也没有精力,更没有兴趣关注行业的一些动态和新技术。 这怕是许多测试小伙伴都遇到的问题,那该怎么解? 首先,我就想问,你学不到东西还是说没去主动学习,如果工作没有辣么的忙,拜托你为自己找点时间来主动学习。通过项目学习固然是快,但你工作中遇不到双 11 这种大项目,怎么办,就坐以待毙了么? 其次,你平时工作的项目中所用的编程语言你都会了么,开发框架你都了解么?就比如测试 Web 程序,你起码要了解 HTML,CSS,JavaScript, jQ uery 吧,否则你就测了个寂寞嘛,也难怪技能和薪资都原地踏步嘛… 对于测试工程师来说,虽然不是人人都会开发,到了现在这个测试自动化极其重要的时代, 只会做手动测试的人还不愿去学习提升的,基本就是找「死 」 。 身边 有些 朋友去做测开了, 我们私下经常调侃,一个优秀的测试人员,可以写代码,水平甚至不输给一般开发。 说句实在话,想把测试开发做好非常不容易,优秀的测试开发人员需要具备: - 广阔的知识面 :编程语言、开发框架、操作系统、移动开发

关于SMR,IMR的调研

点点圈 提交于 2021-02-18 17:33:41
这段时间在关注新型存储设备——SMR,IMR,大致浏览了一下相关论文(10篇左右,未细读),总结了一下我对这两者的认知,算是一个调研,看看IMR领域的前景以及研究的可行性。 直接放个思维导图吧,东西太杂了,自己的理解也不是很细致。主要可以参考一下近5年这个领域上研究方向的概览。 References都放在了这里: https://paste.ubuntu.com/p/W9kxrmjdRt/ 来源: oschina 链接: https://my.oschina.net/u/4310326/blog/4740472

最长回文子序列和最长回文子串

断了今生、忘了曾经 提交于 2021-02-18 17:33:07
对于回文子序列,因为是不连续的肯定是不能直接枚举,那么利用动态规划。 我们可以知道对于任意字符串,如果头尾字符相同,那么字符串的最长子序列等于去掉首尾的字符串的最长子序列加上首尾;如果首尾字符不同,则最长子序列等于去掉头的字符串的最长子序列和去掉尾的字符串的最长子序列的较大者。那么转移方程:dp[i][j]=dp[i+1][j-1] + 2 if(s[i] == s[j]) dp[i][j]=max(dp[i+1][j],dp[i][j-1]) if (s[i] != s[j]) #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int maxn= 1005 ; char s[maxn]; int dp[maxn][maxn]; int main() { scanf( " %s " ,s); int len= strlen(s); for ( int i=len- 1 ;i>= 0 ;i-- ) { dp[i][i] = 1 ; for ( int j=i+ 1 ;j<=len;j++ ) { if (s[i]== s[j]) dp[i][j] =dp[i+ 1 ][j- 1 ]+ 2 ;

网络流24题小结

做~自己de王妃 提交于 2021-02-18 17:30:28
1.飞行员配对方案问题 二分图最大匹配。 #include<bits/stdc++.h> using namespace std; inline int read(){ int x= 0 ,f= 1 ; char ch= getchar(); while (ch< ' 0 ' ||ch> ' 9 ' ){ if (ch== ' - ' )f=- 1 ;ch= getchar();} while (ch>= ' 0 ' &&ch<= ' 9 ' ){x=(x<< 3 )+(x<< 1 )+ch- ' 0 ' ;ch= getchar();} return x* f; } #define MN 2005 #define S 0 #define T 205 #define inf 200000000 struct edge{ int to,w,nex;}e[MN* T]; int hr[T+ 5 ],cnt= 1 ,d[T+ 5 ]; int q[T+ 5 ],top,ans; int m,n; void ins( int f, int t, int w){ e[ ++cnt]=edge{t,w,hr[f]};hr[f]= cnt; e[ ++cnt]=edge{f, 0 ,hr[t]};hr[t]= cnt; } bool bfs(){ memset(d, 0 , sizeof d);

算法——算法的时间与空间复杂度

人盡茶涼 提交于 2021-02-18 17:28:58
算法的时间与空间复杂度 事后分析法 缺点:不同的数据规模,不同的机器下算法运行的时间不同,无法做到计算运行时间 事前分析法 大O时间复杂度 渐进时间复杂度 随着n的增长,程序运行时间跟随n变化的趋势 几个原则 去掉常数项 2(n^2) =n^2 一段代码取时间复杂度最高的 test(n) { //时间复杂度n^3 for(int i = 0; i < n ; i++){ for(int i = 0; i < n ; i++){ for(int i = 0; i < n ; i++){ print(n); } } } //时间复杂度n^2 for(int i = 0; i < n ; i++){ for(int i = 0; i < n ; i++){ print(n); } } //时间复杂度n for(int i = 0; i < n ; i++){ print(n); } } 这段代码的时间复杂度为n^3+n^2+n 当n足够大时,n^2和n与n^3相比太小,可以忽略不计 常见复杂度 o(1) i = i + 1; o(n) test(n){ for(int i = 0 ;i < n;i++){ print(i); } } o(n^2) test(n){ for(int i = 0 ;i < n;i++){ print(i); for(int j = 0 ;j < n;j++)

机器学习常见算法分类汇总

五迷三道 提交于 2021-02-18 17:28:32
来源: IT经理网 机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的。这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性。 学习方式 根据数据类型的不同,对一个问题的建模有不同的方式。在机器学习或者人工智能领域,人们首先会考虑算法的学习方式。在机器学习领域,有几种主要的学习方式。将算法按照学习方式分类是一个不错的想法,这样可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果。 监督式学习: 在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network) 非监督式学习: 在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等

Zookeeper系列四:Zookeeper实现分布式锁、Zookeeper实现配置中心

给你一囗甜甜゛ 提交于 2021-02-18 17:26:59
一、Zookeeper实现分布式锁 分布式锁主要用于在分布式环境中保证数据的一致性。 包括跨进程、跨机器、跨网络导致共享资源不一致的问题。 1. 分布式锁的实现思路 说明: 这种实现会有一个缺点,即当有很多进程在等待锁的时候,在释放锁的时候会有很多进程就过来争夺锁,这种现象称为 “惊群效应” 2. 分布式锁优化后的实现思路 3. Zookeeper分布式锁的代码实现 准备工作: 1)安装Zookeeper,具体参考我前面的我文章 Zookeeper系列一:Zookeeper介绍、Zookeeper安装配置、ZK Shell的使用 2)新建一个maven项目ZK-Demo,然后在pom.xml里面引入相关的依赖 < dependency > < groupId > com.101tec </ groupId > < artifactId > zkclient </ artifactId > < version > 0.10 </ version > </ dependency > 3.1 Zookeeper分布式锁的核心代码实现 实现逻辑参考“ 2. 分布式锁优化后的实现思路 ”中的流程图 package com.study.demo.lock; import java.util.Collections; import java.util.List; import java.util