watermark

看动画学算法之:排序-选择排序

空扰寡人 提交于 2020-07-27 13:58:35
简介 选择排序就是从数组中选择出来最大或者最小的元素,然后将其和队首或者队尾的元素进行交互。 因为首先做的是一个选择的过程,所以叫做选择排序。 选择排序的例子 假如我们有一个数组:29,10,14,37,20,25,44,15,怎么对它进行选择排序呢? 先看一个动画: 选择排序的原理如下: 8个数字,我们需要进行7轮排序。 以第一轮为例,我们对对所有的数据进行比较,找到其中最小的那个10,然后把10放在数组的第一个。 当第二轮时,因为数组的第一个元素10已经排好序了,我们只需要从第二个位置开始就行了,同样的,第二轮我们找到后面几个元素中最小的那个14,将其放在数组的第二个位置。 以此类推进行7轮排序就得到了最后的结果。 选择排序的java代码实现 我们把上面的逻辑用java代码实现如下: public class SelectionSort { public void doSelectionSort(int[] array){ log.info("排序前的数组为:{}",array); //外层循环,遍历所有轮数 for(int i=0; i< array.length-1; i++){ //内层循环,找出最小的那个数字 int minIndex=i; for(int j=i+1;j<array.length;j++) { if(array[j] < array[minIndex]

一分钟让你读懂优秀PM与普通PM的区别

倖福魔咒の 提交于 2020-07-27 13:13:04
近期跟同行业的几位大咖聊天,被问到: “你觉得该如何定义现在的产品经理?” 作为一名有着丰富产品工作的笔者而言,这个问题应该是很容易回答的,但是当时竟然无语,不知道该如何定义。 进而又涉及到了更深刻的三个问题: “每个企业都有市场部,都有产品经理,但是产品经理的职责明确吗?” “公司对产品经理的能力要求有哪些?” “产品经理生存现状如何?” 半个小时的交流之后,忽然有一种脊背发凉的感觉,不是为自己,而是为了行业里被认为是精英中的精英的产品经理! 想要判断一个产品经理够不够优秀 优秀的产品经理该具备什么样的能力 就看他做了什么,怎么做,这就可以避免踩到更多雷坑 现在,请欣赏优秀产品经理大战普通产品经理! 1、理解能力 项目中存在许多细节性的问题,解决问题第一步——理解团队的需求,优秀的PM学会把问题交给团队解决,而不是单兵作战替团队决策。 2、项目管理能力 一个好的产品经理能为团队成员做好示范,以身作则管理好项目与工作,无限追求完美和个人主义是不利于团队协作,更不利于产品的设计与管理。 3、沟通能力 产品经理的沟通力,可谓一种天生技能。优秀的产品经理不仅能够说服他人,推动项目进展,而且时刻保持谦逊善良的心,做啥都贼稳! 4、团队协调能力 每个产品经理老司机,对于如何与技术角色合作,如何做到在设计与实现之间游刃有余,如何带领整个产品和团队走向成功,都会有自己的一套方法。更好地凝聚团队

在以太坊合约中访问链下数据【ChainLink教程】

泄露秘密 提交于 2020-07-27 12:10:31
在这个教程中,我们将学习如何搜索Chainlink Market以找到满足需求的Chainlink预言机(Oracle),以及如何编写Solidity智能合约实现通过预言机访问区块链外部数据(例如货币价格)的功能。 用自己熟悉的语言学习 以太坊DApp开发 : Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart 由于区块链生态系统的本质,从链上的智能合约直接访问链下数据是不可能的。但是,Chainlink为区块链预言机提供了一个平台,这些预言机充当链上和链外数据之间的桥梁。预言机使智能合约能够从区块链外部获取数据。 可以将每个预言机节点配置为执行各种任务,具体取决于其支持的适配器。其中一些适配器包括HTTP GET,HTTP POST,JSON Parse,Multiply等的实现。 1、Chainlink预言机简介 假设我们要创建一个智能合约,该合约将根据CoinGecko上的以太坊美元价格做出不同的响应。我们知道智能合约没有办法调用外部HTTP API,但是oracle节点可以。 通过请求-响应周期处理,智能合约就可以从oracle节点请求数据,该节点被配置为执行HTTP GET请求,并为oracle实现一个回调函数以执行响应: 我们不能简单地使用任意预言机

利用USB摄像头,免费快速搭建浏览器远程监控

安稳与你 提交于 2020-07-27 10:08:57
用OpenCV实现桌面的摄像头程序很简单,把这部分代码集成到一个简单的HTTP server上就可以实现浏览器远程监控。 OpenCV安装 我这里使用了 opencv4nodejs : npm i opencv4nodejs 安装的时间会有点长,需要先下载OpenCV源码再编译。如果发现编译不通过,请阅读错误信息,再检查系统是否安装了需要的工具。 简单的Node.js桌面摄像头应用 创建一个desktop.js文件: const cv = require('opencv4nodejs'); const vCap = new cv.VideoCapture(0); const delay = 10; while (true) { let frame = vCap.read(); if (frame.empty) { vCap.reset(); frame = vCap.read(); } cv.imshow('OpenCV Node.js', frame); const key = cv.waitKey(delay); // Press ESC to quit if (key == 27) {break;} } 运行程序: node desktop.js 通过浏览器访问摄像头 原理 启动一个简单的web服务,并不断获取摄像头数据

vscode不写一行配置,用cmake傻瓜式搭建C++编译调试环境

空扰寡人 提交于 2020-07-27 09:04:03
网上看了一些用vscode+cmake搭建C++编译调试环境的帖子,基本差不多,都要写一个配置文件。其实根本不用这么麻烦。安装的工具是一样的,但是操作可以更加简单。 VSCode + CMake超简单用法 首先安装好平台上的C++编译器,这里不多说。 然后安装vscode中的C++,cmake,cmake tools插件。 准备工作完成之后,按F1,选择cmake:Quick Start就可以创建一个cmake工程。 接下来点击左侧栏的CMake工具按钮。 右键可执行文件,选择Debug。 进入调试界面。 就这么简单,工程目录下不用手动编写任何配置文件。 来源: oschina 链接: https://my.oschina.net/yushulx/blog/4274425

【每日答疑】下图是仪放采集肌电信号的电路。在测试的时候,如果直接从信号发生器输出1MV 250HZ的

▼魔方 西西 提交于 2020-07-27 05:56:07
下图是仪放采集肌电信号的电路。在测试的时候,如果直接从信号发生器输出1MV 250HZ的信号出来,后面经放大后的数值正常放大,但是由于标准的要求,信号发生器的输出信号(1V 250HZ)需要经过非平衡电路衰减(1000倍)后再进入仪放,这样放大后的数据就偏大了,而且不稳定,经分析,是工频信号耦合进去了,从仪放前端能去掉工频信号吗?怎么来提高仪放的CMRR呢?![( https://s4.51cto.com/images/blog/202007/05/023e80b288fdb2c78b06d017cd55e310.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk =) 标准里面的要求: A.首先针对于工频信号我们一般都是采用陷波滤波器的方式就是我们经常所说的带阻滤波器的一种,一般都是带宽比较窄主要是是消除工频的60Hz B.针对于如何提高仪表放大器的CMRR,首先我们需要知道CMRR的定义,共模抑制比=Adif/Acm=差模增益/共模增益 C.针对于普通运放其共模增益一般为1,大家可以以反向比例运算放大器为例! D.针对于仪表运放,关b理想情况下纪客老白,其共模增益为0

docker 启动 elasticsearch镜像,挂载目录后报错问题

点点圈 提交于 2020-07-27 02:56:45
从docker hub下载了一个es的镜像,版本为6.4.2,详细信息如下: 比较重要的就是这两条,第一个是工作目录,挂载目录也需要和这里对应;第二个是启动命令,这里是指定了一个预先写好的启动脚本。所以我启动了一个空容器去查看了下容器内的情况: 容器内部目录结构如上图,data是用来存放数据,logs用来存放日志。 接着查看下启动脚本 /usr/local/bin/docker-entrypoint.sh 前半部分我也是看的一知半解,不过真正和挂载目录相关的是最后这部分,这里处理了挂载目录后的操作,大致意思是: 如果是root用户(docker启动容器,默认是以root用户身份),并且 TAKE_FILE_OWNERSHIP 变量存在,则将/usr/share/elasticsearch/{data,logs},这两个目录都改变为1000用户所属(这里也可以看到最终存储数据的路径为data,所以挂载时应该挂载到data下)。 id为1000的用户: 正是elasticsearch用户,所以如果不挂载任何目录直接启动容器即可,如果挂载,那么就添加一个变量,任意赋值,es可以正常启动。 docker run -itd -v /root/es-data/:/usr/share/elasticsearch/data -e TAKE_FILE_OWNERSHIP=111 -p 9200

重学数据结构之链表篇

核能气质少年 提交于 2020-07-27 02:28:11
本文是重学数据结构系列文章的第二篇,本文和大家一起探讨链表的相关知识。 重学数据结构之数组篇 @[toc] 链表是怎么样的数据结构 链表,不需要连续的内存空间,通过“指针(引用)”将一组零散的内存块串联起来的数据结构。 内存块在链表中也叫“结点”,每个结点除了存储数据,还需要记录链上的下一个或者上一个结点的地址。 链表的特点 1.插入、删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效率低O(n)级别(需要从链头至链尾进行遍历)。 2.和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。 常见的链表结构 单链表 1.只有一个方向,每个结点只存储下一个结点的地址,记录下一个结点的指针成为后继指针(next) 2.有两个特殊结点,头结点和尾结点。头结点用来记录链表的基地址;尾结点指向一个空地址NULL,表示链表的最后一个结点 3.链表的插入和删除操作,因为不考虑内存空间的连续性,只需要关注相邻结点的指针变化,所以时间复杂度为O(1) 4.链表的随机访问操作,因为内存空间的不连续性,需要指针一个结点一个结点的依次访问,直到找到对应的结点,所以时间复杂度为O(n) 双向链表 1.有两个方向,每个结点既有指向后面结点的后继指针next,也有指向前面结点的前驱指针prev, 因为需要同时存储前后两个指针,因此双向链表占用更多的内存存储空间 2

分布式事务TCC机制

假装没事ソ 提交于 2020-07-27 01:15:49
前言 分布式事务是几乎所有分布式微服务系统中,最棘手也是最重要的一个点了。在讲解分布式事务前,先了解下数据库事务的特性;数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily),简称就是ACID。 CAP定理 CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的,他指出WEB服务无法同时满足一下3个属性: 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效) 可用性(Availability) : 每个操作都必须以可预期的响应结束 分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成 具体地讲在分布式系统中,在任何数据库设计中,一个Web应用至多只能同时支持上面的两个属性。显然,任何横向扩展策略都要依赖于数据分区。因此,设计人员必须在一致性与可用性之间做出选择。 BASE理论 在分布式系统中,我们往往追求的是可用性,它的重要程序比一致性要高,那么如何实现高可用性呢? 前人已经给我们提出来了另外一个理论,就是BASE理论,它是用来对CAP定理进行进一步扩充的。BASE理论指的是: Basically Available(基本可用) Soft state(软状态) Eventually

阿里巴巴Java 程序员常用的 10 款开源工具!用好了,事半功倍!

余生颓废 提交于 2020-07-26 23:31:43
本文主要介绍阿里巴巴Java程序员常用的一些基本和高级工具。如果你是一位经验丰富的Java开发人员,你可能对这些工具很熟悉,但如果不是,现在就是是开始学习这些工具的好时机。 Java世界中存在许多工具,从Eclipse,NetBeans和IntelliJ IDEA等著名的IDE开始到Java开发人员应该知道的JVM分析和监视工具,如JConsole,VisualVM,Eclipse Memory Analyzer等。 尽管如此,在本文中,我将重点介绍适用于各种Java开发人员的通用工具,例如核心Java 开发人员和Web开发人员。 1.JIRA Atlassian的JIRA是当前敏捷开发领域最重要的工具之一。它用于错误跟踪,问题跟踪和项目管理。如果你遵循敏捷开发方法,例如Sprint和Scrum,那么你必须了解JIRA。它允许您创建Spring循环并跟踪软件开发的进度。 JIRA 是目前比较流行的基于Java架构的管理系统,由于Atlassian公 司对很多开源项目实行免费提供缺陷跟踪服务,因此在开源领域,其认知度比其他的产品要高得多,而且易用性也好一些。 2.Git Git是Java程序员的另一个必备工具,它是一个免费的开源分布式版本控制系统,旨在快速高效地处理从很小到非常大的项目版本管理。Git易于学习,占用空间小,具有超强的性能。 最初 Git 的开发是为了辅助 Linux