一、Vue基础 1.1、概述 作者:尤雨溪
官网:https://cn.vuejs.org
Vue.js是一套构建用户界面的渐进式框架。Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供驱动。(SPA单页面应用,所有的显示都在一个页面当中)
渐进式:一步一步,不是说你必须一次把所有的东西都用上
自底向上设计:是一种设计程序的过程和方法,就是先编写出基础程序段,然后再逐步扩大规模、补充和升级某些功能,实际上是一种自底向上构造程序的过程。
Vue从设计角度来讲,虽然能够涵盖这张图上所有的东西,但是你并不需要一上手就把所有东西全用上,都是可选的。声明式渲染和组件系统是Vue的核心库所包含内容,而路由、状态管理、构建工具都有专门解决方案。这些解决方案相互独立,我们可以在核心的基础上任意选用其他的部件,不一定要全部整合在一起。
1.2、声明式渲染和组件化 声明式渲染 Vue.js的核心是一个允许采用简洁的模板语法来声明式的将数据渲染进DOM的系统,例如:
<div id="app"> <!-- 渲染 --> {{ message }} </div> <script type='text/javascript'> var app = new Vue({ el: '#app', data: { // 声明一下变量 message: 'Hello Vue!' } }) </script> 组件化应用构建 组件系统是Vue的另一个重要概念(后续学习),因为它是一种抽象的允许我们使用小型、独立和通常可复用的“小积木”构建大型应用。几乎任意类型的应用界面都可以抽象为一个组件树。
1.3、开发模式 注意:开发模式≠设计模式
开发模式,就是一个开发项目的方式或者标准。
比较常见的三种开发模式:MVC、MVP、MVVM
MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑(C)、数据(M)、界面显示(V)分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
用户可以向 View 发送指令(DOM 事件),再由 View 直接要求 Model 改变状态。用户也可以直接向 Controller 发送指令(改变 URL 触发 hashChange 事件),再由 Controller 发送给 View。Controller 非常薄,只起到路由的作用,而 View 非常厚,业务逻辑都部署在 View。 优点
iphone 自动跳转应用
Apple, Inc. 苹果公司。 If you have “Do Not Disturb” enabled on your iPhone and someone sends you a text message, they may receive an “Auto-Reply” message as a response. Here’s how to configure that message and decide who gets to see it.
如果您在iPhone上启用了“ 请勿打扰 ”,并且有人向您发送短信,则他们可能会收到“自动回复”消息作为响应。 这是配置该消息并确定谁可以看到它的方法。 First, open “Settings” by tapping the grey-colored gear icon. It’s usually on the first page of your Home screen.
首先,通过点击灰色齿轮图标打开“设置”。 通常在主屏幕的首页上。 In “Settings,” tap “Do Not Disturb.
一、定义 前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。
同种类称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。
本节要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,图 1 所示的是海尔工厂和 TCL 工厂所生产的电视机与空调对应的关系图。
二、模式的定义与特点 抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。
使用抽象工厂模式一般要满足以下条件。
系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。系统一次只可能消费其中某一族产品,即同族的产品一起使用。 抽象工厂模式除了具有工厂方法模式的优点外,其他主要优点如下。
可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。 其缺点是:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。
三、模式的结构与实现 代码
/// <summary> /// 抽象工厂 /// </summary> interface AbstractFactory { Product newProduct1(); Product newProduct2(); } //抽象产品:提供了产品的接口 interface Product { void show(); } //具体产品1:实现抽象产品中的抽象方法 class ConcreteProduct1 : Product { public void show() { Console.WriteLine("具体产品1显示..."); } } //具体产品2:实现抽象产品中的抽象方法 class ConcreteProduct2 : Product { public void show() { Console.WriteLine("具体产品2显示..."); } } class ConcreteFactory1 : AbstractFactory { public Product newProduct1() { Console.
项目背景: 之前在做项目的时候,由于是采用微服务架构,所有服务通信使用 Redis 作为数据交互层。需求是不同类型的数据存储在不同的数据库中,不同的数据库就需要动态切换 Redis 数据库。
Redis 默认有 16 个数据库,index(值范围:0~15),默认 index=0。切换数据库命令为:select index。
但是呢,flask_redis 却没有这个功能。为什么会没有呢?因为 redis-py 就没有。flask_redis 是基于 redis-py 进行二次封装的库,redis-py 为了保证 Redis 实例的线程安全,没有实现 SELECT 指令。
Redis 客户端实例可以安全地在线程间共享。从内部实现来说,只有在命令执行时才获取连接实例,完成后直接返回连接池,命令永不修改客户端实例的状态。但是,有一点需要注意:SELECT 命令。SELECT 命令允许切换当前连接使用的数据库。新的数据库保持被选中状态,直到选中另一个数据库或连接关闭。这会导致在返回连接池时,连接可能指定了别的数据库。因此,redis-py 没有在客户端实例中实现 SELECT 命令。如果要在同一个应用中使用多个 Redis 数据库,应该给第一个数据库创建独立的客户端实例(可能也需要独立的连接池)。
参考:https://segmentfault.com/q/1010000012594548
解决方案 flask_redis 既然不能动态切换数据库,那我们就从根源入手——使用前都重新连接并指定数据库。
感觉是挺暴力的,其实,这是官方建议的做法。自己动手丰衣足食,接下来我们就来封装一个支持动态切换数据库的 Redis,需要满足用户在使用的时候无感知。
废话不多说,直接上代码:
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- import copy import datetime from redis import StrictRedis, ConnectionPool class RedisLib(object): def __init__(self, redis_db, redis_url, blacklist=None): self.redis = None self.redis_db = redis_db self.
soft attention(包括空间注意力、通道注意力)软注意学习的目的是选择细粒度的重要像素点,它们是pixel级。
hard attention( local 注意力) 硬注意学习则致力于搜索粗糙的潜在判别区域,它们是region级。
他们在功能上有很大的互补性。他们的结合使用可以提高模型的性能
下面讲解空间注意力、通道注意力、local 注意力的生成 空间注意力、通道注意力可行性解释 64个通道的采样图(如可生成见我博客)
通道注意力:
就是对于每个channel赋予不同的权重,比如1,2处马的形状比较明显,所以理所当然,对1,2通道的权重比较大,3,4处权重小。
空间注意力:
空间注意力是对64个通道进行mean的一个操作,得到一个(w x h)的权重,mean的操作就学到了所有通道的整体分布,而抛弃了奇异的通道。比如说1,2的图可以很好的描绘出马的形状,而3,4就不行(但本质上它也是要显示出马的形状),但是通过mean后,得到的w x h权值共享后,给了3,4一定的权值描述,相当于给3,4一定的注意力,这样它们也可以描绘出马的形状。
代码(展示的是Harmonious Attention Network for Person Re-Identification中SoftAttn生成的过程,与真实的通道注意力和空间注意力是有点差距的,忘知晓) class SpatialAttn(nn.Module): # 输入x.shape=(32,3,256,128),对第三维度通道求mean=(32,1,256,128),一个卷积照片缩小一半,upsample恢复,再经过1x1 conv def __init__(self): super(SpatialAttn, self).__init__() self.conv1 = ConvBlock(1, 1, 3, s=2, p=1) self.conv2 = ConvBlock(1, 1, 1) def forward(self, x): # global cross-channel averaging x = x.mean(1, keepdim=True) # x.shape=(32,3,256,128) x.mean.shape按照通道求均值=(32,1,256,128) # 3-by-3 conv x = self.conv1(x) # x.shape=(32,1,128,64) # bilinear resizing x = F.
mac app图标简单制作
If you’re seeing application icons on your Mac with a crossed-out symbol on top of them, it means that macOS can’t run the application. While there could be several causes, the most likely is that you recently upgraded macOS, and it no longer supports 32-bit applications. Here’s why—and what you can do about it.
如果您在Mac上看到应用程序图标,并在其顶部带有叉号,则表示macOS无法运行该应用程序。 尽管可能有多种原因,但是最有可能的原因是您最近升级了macOS,并且它不再支持32位应用程序。 这就是原因,以及您可以采取的措施。 第一:应用无法运行的其他原因 (First: The Other Reasons an App Won’t Run) Fundamentally, a crossed-out application icon means that something is preventing macOS from running the application.
Location(window)对象 1、href属性 获取整个URL地址
2、search属性 获取地址栏中的参数(?之后以及包括?)
例:我们在一个页面上利用表单的get方式发送数据到另一个页面上
<body> <form action="index.html"> 用户名: <input type="text" name="uname"> <input type="submit" value="登录"> </form> </body> 在另一个页面上通过location.search获取参数,再利用数组方法取出数据
<script> console.log(location.search); // ?uname=andy // 1.先去掉? substr('起始的位置',截取几个字符); var params = location.search.substr(1); // uname=andy console.log(params); // 2. 利用=把字符串分割为数组 split('='); var arr = params.split('='); console.log(arr); // ["uname", "ANDY"] var div = document.querySelector('div'); // 3.把数据写入div中 div.innerHTML = arr[1] + '欢迎您'; </script> 3、assign()方法 跳转页面,也叫重定向,可以后退(记录历史)
4、replace()方法 替换页面,不记录历史,不后退
5、reload()方法 重新加载,如果为true,则强制刷新
history对象方法
https://docs.geoserver.org/latest/en/user/styling/sld/cookbook/points.html#example-points-layer
给图层的样式添加文字标签
该标签在设定<TextSymbolizer>上 ,确定要在标签中显示的文本,在这种情况下,<ogc:PropertyName>num</ogc:PropertyName>是shp文件中的属性列的值。
<Fill> <CssParameter name="fill">#000000</CssParameter> </Fill>设置文本颜色。有关标签的所有其他详细信息均设置为渲染器默认值,这里是Times New Roman字体,黑色字体和10像素的字体大小。标签的左下方与该点的中心对齐。
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <NamedLayer> <Name>Simple point</Name> <UserStyle> <Title>GeoServer SLD Cook Book: Simple point</Title> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> </Mark> <Size>6</Size> </Graphic> </PointSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>num</ogc:PropertyName> </Label> <Fill> <CssParameter name="fill">#000000</CssParameter> </Fill> </TextSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor> 将标签label放到点的上方
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="
Open the Task Manager on Windows 10 and you’ll see an “Application Frame Host” background process running. This process has the file name “ApplicationFrameHost.exe” and is part of the Windows 10 operating system.
在Windows 10上打开任务管理器,您将看到一个“ Application Frame Host”后台进程正在运行。 该进程的文件名为“ ApplicationFrameHost.exe”,是Windows 10操作系统的一部分。
This article is part of our ongoing series explaining various processes found in Task Manager, like Runtime Broker, svchost.exe, dwm.exe, ctfmon.exe, rundll32.exe, Adobe_Updater.exe, and many others. Don’t know what those services are?
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录 前言一、pandas是什么?二、使用步骤1.引入库2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用步骤 1.引入库 代码如下(示例):
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore') import ssl ssl._create_default_https_context = ssl._create_unverified_context 2.读入数据 代码如下(示例):
data = pd.read_csv( 'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv') print(data.head()) 该处使用的url网络请求的数据。
总结 提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
A、B、C、F卡想必各位读者朋友们都或多或少有所了解,相对于A、B、F卡,C卡可能因为它处于风险管理的末尾-贷后流程中,使其在一些小规模的金融机构中不被开发和应用。
C卡其实是催收评分卡模型的简称(亦或是贷后模型),它是贷后催收模型整体的统称,贷后催收模型中根据不同的细分应用又包含不同的子评分模型。
本篇为大家介绍M1阶段三种细分应用催收评分模型:C-M1模型、CPD1-10模型及失联预测模型。
更多模型相关学习资料,请关注公众号【金科应用研院】
1、不同逾期类型客户对应的风险等级 评分模型的重要意义之一就是差异化客群风险之后进行精细化策略管理。具备这个模型意识之后,我们现在来讲解M1阶段的三种细分催收评分模型。
2、C-M1模型 C-M1模型开发的目的在于预测还款日前5天的客户是否会发生逾期,即CPD=1。对于贷后催收策略设计,主要用于Pre催收,降低违约风险提升还款率。常用的入模变量有:
一般C-M1(CPD1)模型的KS要求在0.5以上,AUC在80%以上。通过对评分模型分数进行风险等级划分,根据风险等级制定不同的催收策略,比如IVR催收、短信提醒等。
3、CPD1-10模型 CPD1-10模型开发的目的在于预测处于CPD1阶段的客户在10天内是否会还款,即预测CPD=1的客户CPD>=10的概率。
对于贷后催收策略设计,主要用于M1阶段精细化催收策略,如IVR、预测式外呼、预览式外呼。常用的入模变量有:
其中,TPC表示借款客户提供的联系人信息是否为第三方信息,BDR=Deat Burden Ratio,代表债务负担比率。一般CPD1-10模型的KS要求在0.45以上,AUC在0.75以上。
当客户处于CPD=1的状态时,就触发运行CPD1-10模型。
4、失联预测模型 失联预测模型开发的目的在于预测在CPD=10的客户,未来5天后是否会失联。即在CPD10的客户预测在CPD16时是否会失联。
对于贷后催收策略设计,主要用于失联信息修复和提前委外催收,常用的入模变量有:
一般失联预测模型的KS要求在0.5以上,AUC在0.8以上。对失联预测模型高风险的客群,催收策略可以采用一旦超过CPD16之后就进入委外催收流程。
贷后评分模型可以根据模型应用,进行不同逾期阶段的细分,结合评分模型分数等级矩阵交叉风险,保证多模型同级风险的一致性和不同级风险的区分性,最终应用在贷后催收风险策略上,实现贷后差异化风险管理。
注重版权,转载请注明原作者和原文链接
作者:码农BookSea
原文链接:https://blog.csdn.net/bookssea/article/details/107309591 先看后赞,养成习惯。
点赞收藏,人生辉煌。
讲解我们的爬虫之前,先概述关于爬虫的简单概念(毕竟是零基础教程)
爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。
为什么我们要使用爬虫 互联网大数据时代,给予我们的是生活的便利以及海量数据爆炸式的出现在网络中。
过去,我们通过书籍、报纸、电视、广播或许信息,这些信息数量有限,且是经过一定的筛选,信息相对而言比较有效,但是缺点则是信息面太过于狭窄了。不对称的信息传导,以致于我们视野受限,无法了解到更多的信息和知识。
互联网大数据时代,我们突然间,信息获取自由了,我们得到了海量的信息,但是大多数都是无效的垃圾信息。
例如新浪微博,一天产生数亿条的状态更新,而在百度搜索引擎中,随意搜一条——减肥100,000,000条信息。
在如此海量的信息碎片中,我们如何获取对自己有用的信息呢?
答案是筛选!
通过某项技术将相关的内容收集起来,在分析删选才能得到我们真正需要的信息。
这个信息收集分析整合的工作,可应用的范畴非常的广泛,无论是生活服务、出行旅行、金融投资、各类制造业的产品市场需求等等……都能够借助这个技术获取更精准有效的信息加以利用。
网络爬虫技术,虽说有个诡异的名字,让能第一反应是那种软软的蠕动的生物,但它却是一个可以在虚拟世界里,无往不前的利器。
爬虫准备工作 我们平时都说Python爬虫,其实这里可能有个误解,爬虫并不是Python独有的,可以做爬虫的语言有很多例如:PHP,JAVA,C#,C++,Python,选择Python做爬虫是因为Python相对来说比较简单,而且功能比较齐全。
首先我们需要下载python,我下载的是官方最新的版本 3.8.3
其次我们需要一个运行Python的环境,我用的是pychram
也可以从官方下载,
我们还需要一些库来支持爬虫的运行(有些库Python可能自带了)
差不多就是这几个库了,良心的我已经在后面写好注释了
(爬虫运行过程中,不一定就只需要上面几个库,看你爬虫的一个具体写法了,反正需要库的话我们可以直接在setting里面安装)
爬虫项目讲解 我做的是爬取豆瓣评分电影Top250的爬虫代码
我们要爬取的就是这个网站:https://movie.douban.com/top250
这边我已经爬取完毕,给大家看下效果图,我是将爬取到的内容存到xls中
我们的爬取的内容是:电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,相关信息。
代码分析 先把代码发放上来,然后我根据代码逐步解析
# -*- codeing = utf-8 -*- from bs4 import BeautifulSoup # 网页解析,获取数据 import re # 正则表达式,进行文字匹配` import urllib.request, urllib.error # 制定URL,获取网页数据 import xlwt # 进行excel操作 #import sqlite3 # 进行SQLite数据库操作 findLink = re.compile(r'<a href="(.*?)">') # 创建正则表达式对象,标售规则 影片详情链接的规则 findImgSrc = re.
文章目录 一、端口映射1、-P随机端口2、映射指定一个端口3、映射指定多个端口4、映射到指定端口的指定地址5、映射到指定端口的任意地址6、查看端口映射情况 二、数据卷与数据卷容器1、挂载宿主系统(数据卷)2、数据卷容器操作 三、容器互联1、--link 通过虚链路连接2、通过中转网卡连接 一、端口映射 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的。
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射。当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口
1、-P随机端口 通过docker ps命令查看具体端口映射
[root@localhost opt]# docker run -d --name nginx_1 -P nginx:latest 64a061f37a4948d4b8b4dc28d3b0c0b51ceb65e1aef98b36cbc063af69352e85 [root@localhost opt]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64a061f37a49 nginx:latest "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 0.0.0.0:32769->80/tcp nginx_1 91781d90ed6d nginx "/docker-entrypoint.…" 26 minutes ago Created nostalgic_kilby 通过浏览器访问本机ip地址加映射的端口 就能访问到容器内的nginx
[root@localhost opt]# docker logs nginx_1 '查看nginx_1容器的日志信息' /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.
Caused by: java.io.IOException: Did not receive successful HTTP response: status code = 404, status message = [Not Found] 求救 服务器端可以正常启动 但是客户端启动时报错 404 找了几个小时 依然无解 具体报错如下图
服务端 文件结构 依赖 <properties> <spring.version>4.0.7.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.0.4.RELEASE</version> </dependency> </dependencies> 配置文件 spring-mvc.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean class="com.song.service.HttpServiceImpl" id="httpService"/> <bean id="
import requests import re from bs4 import BeautifulSoup # 引入BS库 # 实现run方法 # 1.url列表 # 2.遍历,发送请求,获取响应 # 3.保存 class TiebaSpider: def __init__(self, tieba_name): self.tieba_name = tieba_name self.url_temp = "https://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}" self.headers = { "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Mobile Safari/537.36"} def get_url_list(self): # 构造url列表 # url_list = [] # for i in range(1000): # url_list.append(self.url_temp.format(i * 50)) # return url_list return [self.
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<string name="def_low_battery_sound" translatable="false">/product/media/audio/ui/LowBattery.ogg</string> <string name="def_desk_dock_sound" translatable="false">/product/media/audio/ui/Dock.ogg</string> <string name="def_desk_undock_sound" translatable="false">/product/media/audio/ui/Undock.ogg</string> <string name="def_lock_sound" translatable="false">/product/media/audio/ui/Lock.ogg</string> <string name="def_unlock_sound" translatable="false">/product/media/audio/ui/Unlock.ogg</string> <string name="def_wireless_charging_started_sound" translatable="false">/product/media/audio/ui/WirelessChargingStarted.ogg</string> <string name="def_charging_started_sound" translatable="false">/product/media/audio/ui/ChargingStarted.ogg</string> 有时候会发现某些音效无法播放,有可能是对应的音频文件没有编译到系统同,可以通过adb shell ls /product/media/audio/ui/ChargingStarted.ogg查看音频文件是否存在。如果不存在,可以检查对应的 frameworks/base/data/sounds/AllAudio.mk文件中是否有把对应的ogg文件编译进去。
手机app原型制作工具
When you start developing a big project, you don’t want to learn too late that your great idea isn’t quite as fun as you’d hoped. Developing a game requires time and resources, so you need to put your efforts into projects with the greatest possibility of success.
当您开始开发一个大型项目时,您不想太晚知道自己的好主意并不像您希望的那样有趣。 开发游戏需要时间和资源,因此您需要全力以赴才能成功。 How can you be sure that you’re pursuing a game concept that will make a great gaming experience for players?
参加技术峰会
Introducing the Unity for Humanity Summit, a free, one-day, online event spotlighting how creators around the globe are building experiences that have a positive or meaningful impact on society and the planet.
一项为期一天的免费在线活动,介绍了人类团结峰会,重点介绍了全球创作者如何建立对社会和地球产生积极或有意义影响的体验。 Real-time 3D is revolutionizing how people work, how they learn, and the scale of what they can create. Unity for Humanity, a Unity social impact program, began in 2018 to celebrate creators around the world who are building experiences that have a positive or meaningful impact on society and the planet.
乐高 斜面砖
New users can start creating in Unity faster than ever with the LEGO Microgame (currently in beta), our most recent addition to the Microgames series.
新用户可以通过我们最新添加的LEGO Microgame(目前处于测试版)开始以更快的速度在Unity中进行创建。 Unity’s Microgames are guided experiences designed to get new users working in the Editor quickly and easily. They’re designed to help you move swiftly from opening your first project to publishing your first game in about 45 minutes. Follow in-Editor tutorials to better understand how everything clicks together, while making your own creative decisions and personalizing along the way.
修改system文件
编辑/etc/system文件,添加下行
set noexec_user_stack=1
3.2创建project
检查用户配置文件
#id -p oracle
uid=101(oracle) gid=103(oinstall) projid=100(default)
如果是default,则添加proj配置
创建oracle用户的project
#projadd –p 1003 group.dba
在/etc/user_attr文件添加一行
oracle::::project=group.dba
修改内核参数
projmod -sK “project.max-shm-memory=(priv,100g,deny)” group.dba projmod -s -K “process.max-file-descriptor=(basic,65536,deny),(priv, 65536,deny)” group.dba -修改open files值
max-nprocs参数设置最大进程数
ulimit –S -n 8000 临时修改
根据Solaris相关文档,其他值保持默认即可。
查询配置的值
prctl –i project group.dba
----1. 获取所有的数据库名-----
SELECT NAME FROM MASTER.DBO.SYSDATABASES ORDER BY NAME
-----2. 获取所有的表名------
SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME
--XTYPE='U':表示所有用户表;
--XTYPE='S':表示所有系统表;
SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' AND SYSSTAT = '83'
----注意:一般情况只需要TYPE = 'U',但有时候会有系统表混在其中(不知道什么原因),加上后面一句后就能删除这些系统表了。
----3.获取所有字段名-----
SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('BCUSTOMER');
SELECT SYSCOLUMNS.NAME,SYSTYPES.NAME,SYSCOLUMNS.ISNULLABLE,SYSCOLUMNS.LENGTHFROM SYSCOLUMNS, SYSTYPES
WHERE SYSCOLUMNS.XUSERTYPE = SYSTYPES.XUSERTYPE AND SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER');
/*注意点:
----(A)这里为了重点突出某些重要内容,选取了其中几项信息输出。
(B)SYSCOLUMNS表中只含有数据类型编号,要获取完整的名字需要从SYSTYPES表中找,一般用户使用的数据类型用XUSERTYPE对应比较好,不会出现一对多的情况。
(C)SYSCOLUMNS.LENGTH得到的是物理内存的长度,所以NVARCHAR和VARCHAR等类型在数据库中的显示是这个的一半。*/
----4、得到表中主键所包含的列名------
SELECT SYSCOLUMNS.NAME ,SYSOBJECTS.XTYPE
FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYS
WHERE SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER')
问题导读:
1、如何进行写入瓶颈分析?
2、如何进行性能优化?
3、如何优化写入模型?
4、单节点写入能力如何提升?
滴滴ElasticSearch平台承接了公司内部所有使用ElasticSearch的业务,包括核心搜索、RDS从库、日志检索、安全数据分析、指标数据分析等等。平台规模达到了3000+节点,5PB 的数据存储,超过万亿条数据。平台写入的峰值写入TPS达到了2000w/s,每天近 10 亿次检索查询。为了承接这么大的体量和丰富的使用场景,滴滴ElasticSearch需要解决稳定性、易用性、性能、成本等诸多问题。我们在4年多的时间里,做了大量优化,积攒了非常丰富的经验。通过建设滴滴搜索平台,打造滴滴ES引擎,全方位提升用户使用ElasticSearch体验。这次给大家分享的是滴滴在写入性能优化的实践,优化后,我们将ES索引的写入性能翻倍,结合数据冷热分离场景,支持大规格存储的物理机,给公司每年节省千万左右的服务器成本。
一、背景
前段时间,为了降低用户使用ElasticSearch的存储成本,我们做了数据的冷热分离。为了保持集群磁盘利用率不变,我们减少了热节点数量。ElasticSearch集群开始出现写入瓶颈,节点产生大量的写入rejected,大量从kafka同步的数据出现写入延迟。我们深入分析写入瓶颈,找到了突破点,最终将Elasticsearch的写入性能提升一倍以上,解决了ElasticSearch瓶颈导致的写入延迟。这篇文章介绍了我们是如何发现写入瓶颈,并对瓶颈进行深入分析,最终进行了创新性优化,极大的提升了写入性能。
二、写入瓶颈分析
1、发现瓶颈
我们去分析这些延迟问题的时候,发现了一些不太好解释的现象。之前做性能测试时,ES节点cpu利用率能超过80%,而生产环境延迟索引所在的节点cpu资源只使用了不到50%,集群平均cpu利用率不到40%,这时候IO和网络带宽也没有压力。通过提升写入资源,写入速度基本没增加。于是我们开始一探究竟,我们选取了一个索引进行验证,该索引使用10个ES节点。从下图看到,写入速度不到20w/s,10个ES节点的cpu,峰值在40-50%之间。
这证明了瓶颈出在服务端,ES节点扩容后,性能提升,说明10个节点写入已经达到瓶颈。但是上图可以看到,CPU最多只到了50%,而且此时IO也没达到瓶颈。
2、 ES写入模型说明
这里要先对ES写入模型进行说明,下面分析原因会跟写入模型有关。
客户端一般是准备好一批数据写入ES,这样能极大减少写入请求的网络交互,使用的是ES的BULK接口,请求名为BulkRequest。这样一批数据写入ES的ClientNode。ClientNode对这一批数据按数据中的routing值进行分发,组装成一批BulkShardRequest请求,发送给每个shard所在的DataNode。发送BulkShardRequest请求是异步的,但是BulkRequest请求需要等待全部BulkShardRequest响应后,再返回客户端。
3、 寻找原因
我们在ES ClientNode上有记录BulkRequest写入slowlog。
`items`是一个BulkRequest的发送请求数; `totalMills `是BulkRequest请求的耗时; `max`记录的是耗时最长的BulkShardRequest请求; `avg`记录的是所有BulkShardRequest请求的平均耗时。 我这里截取了部分示例。
[xxx][INFO ][o.e.m.r.RequestTracker ] [log6-clientnode-sf-5aaae-10] bulkDetail||requestId=null||size=10486923||items=7014||totalMills=2206||max=2203||avg=37 [xxx][INFO ][o.e.m.r.RequestTracker ] [log6-clientnode-sf-5aaae-10] bulkDetail||reques 从示例中可以看到,2条记录的avg相比max都小了很多。一个BulkRequest请求的耗时,取决于最后一个BulkShardRequest请求的返回。这就很容易联想到分布式系统的长尾效应。
接下来再看一个现象,我们分析了某个节点的write线程的状态,发现节点有时候write线程全是runnable状态,有时候又有大量在waiting。此时写入是有瓶颈的,runnable状态可以理解,但却经常出现waiting状态。所以这也能印证了CPU利用率不高。同时也论证长尾效应的存在,因为长尾节点繁忙,ClientNode在等待繁忙节点返回BulkShardRequest请求,其他节点可能出现相对空闲的状态。下面是一个节点2个时刻的线程状态: 4、瓶颈分析
谷歌大神Jeffrey Dean《The Tail At Scale》介绍了长尾效应,以及导致长尾效应的原因。总结下来,就是正常请求都很快,但是偶尔单次请求会特别慢。这样在分布式操作时会导致长尾效应。我们从ES原理和实现中分析,造成ES单次请求特别慢的原因。发现了下面几个因素会造成长尾问题:
1)lucene refresh
我们打开lucene引擎内部的一些日志,可以看到:
write线程是用来处理BulkShardRequest请求的,但是从截图的日志可以看到,write线程也会会进行refresh操作。这里面的实现比较复杂,简单说,就是ES定期会将写入buffer的数据refresh成segment,ES为了防止refresh不过来,会在BulkShardRequest请求的时候,判断当前shard是否有正在refresh的任务,有的话,就会帮忙一起分摊refresh压力,这个是在write线程中进行的。这样的问题就是造成单次BulkShardRequest请求写入很慢。还导致长时间占用了write线程。在write queue的原因会具体介绍这种危害。
2)translog ReadWriteLock
ES的translog类似LSM-Tree的WAL log。ES实时写入的数据都在lucene内存buffer中,所以需要依赖写入translog保证数据的可靠性。ES translog具体实现中,在写translog的时候会上ReadLock。在translog过期、翻滚的时候会上WriteLock。这会出现,在WriteLock期间,实时写入会等待ReadLock,造成了BulkShardRequest请求写入变慢。我们配置的tranlog写入模式是async,正常开销是非常小的,但是从图中可以看到,写translog偶尔可能超过100ms。
3)write queue
ES DataNode的写入是用标准的线程池模型是,提供一批active线程,我们一般配置为跟cpu个数相同。然后会有一个write queue,我们配置为1000。DataNode接收BulkShardRequest请求,先将请求放入write queue,然后active线程有空隙的,就会从queue中获取BulkShardRequest请求。这种模型下,当写入active线程繁忙的时候,queue中会堆积大量的请求。这些请求在等待执行,而从ClientNode角度看,就是BulkShardRequest请求的耗时变长了。下面日志记录了action的slowlog,其中waitTime就是请求等待执行的时间,可以看到等待时间超过了200ms。
[xxx][INFO ][o.e.m.r.RequestTracker ] [log6-datanode-sf-4f136-100] actionStats||action=indices:data/write/bulk[s][p]||requestId=546174589||taskId=6798617657||waitTime=231||totalTime=538 [xxx][INFO][o.e.m.r.RequestTracker][log6-datanode-sf-4f136-100] actionStats||action=indic 4)JVM GC ES正常一次写入请求基本在亚毫秒级别,但是jvm的gc可能在几十到上百毫秒,这也增加了BulkShardRequest请求的耗时。这些加重长尾现象的case,会导致一个情况就是,有的节点很繁忙,发往这个节点的请求都delay了,而其他节点却空闲下来,这样整体cpu就无法充分利用起来。 5、论证结论 长尾问题主要来自于BulkRequest的一批请求会分散写入多个shard,其中有的shard的请求会因为上述的一些原因导致响应变慢,造成了长尾。如果每次BulkRequest只写入一个shard,那么就不存在写入等待的情况,这个shard返回后,ClientNode就能将结果返回给客户端,那么就不存在长尾问题了。 我们做了一个验证,修改客户端SDK,在每批BulkRequest写入的时候,都传入相同的routing值,然后写入相同的索引,这样就保证了BulkRequest的一批数据,都写入一个shard中。 优化后,第一个平稳曲线是,每个bulkRequest为10M的情况,写入速度在56w/s左右。之后将bulkRequest改为1M(10M差不多有4000条记录,之前写150个shard,所以bulkSize比较大)后,性能还有进一步提升,达到了65w/s。 从验证结果可以看到,每个bulkRequest只写一个shard的话,性能有很大的提升,同时cpu也能充分利用起来,这符合之前单节点压测的cpu利用率预期。 三、性能优化 从上面的写入瓶颈分析,我们发现了ES无法将资源用满的原因来自于分布式的长尾问题。于是我们着重思考如何消除分布式的长尾问题。然后也在探寻其他的优化点。整体性能优化,我们分成了三个方向: 横向优化,优化写入模型,消除分布式长尾效应; 纵向优化,提升单节点写入能力; 应用优化,探究业务节省资源的可能。 这次的性能优化,我们在这三个方向上都取得了一些突破。
作者:_BKing
地址:cnblogs.com/xiaowei123/p/13211403.html
最近都没看Redis,现在回来温习下,现在从Redis的三大缓存开始重新探一探有多深有多浅(^▽^)
让我来开始知识的醍醐灌顶把!是时候表演真正的技术了。(哔哔哔哔....)
铁子们,看在二哈这么卖力的份上,如果觉得本文对你有帮助的话,请动动你的小手,比个❥(^_-)爱心推荐哟。
接下来就开始我们的Redis的三大缓存问题之旅,让我们坐上二哈的小飞船游一游这圣女峰。
在Redis缓存中有三个必须要知道概念:缓存穿透、缓存击穿和缓存雪崩。
缓存穿透 那什么是缓存穿透,它就是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。它拿不到数据时,是会一直查询数据库,这样会对数据库的访问造成很大的压力。
如:用户查询一个 id = -1 的商品信息,一般数据库 id 值都是从 1 开始自增,很明显这条信息是不在数据库中,当没有信息返回时,会一直向数据库查询,给当前数据库的造成很大的访问压力。
这时候我们要想一想,该如何解决这个问题呢?o(╥﹏╥)o
一般我们可以想到从缓存开始出发,想如果我们给缓存设置一个如果当前数据库不存在的信息,把它缓存成一个空对象,返回给用户。
^_^没错,这是一个解决方案,也就是我们常说的缓存空对象(代码维护简单,但是效果不是很好)。
Redis 也为我们提供了一种解决方案,那就是布隆过滤器(代码维护比较复杂,效果挺好的)。
那接下来,二哈先解释下这两种方案:
缓存空对象 那什么是缓存空对象呀,二哈!别急,缓存空对象它就是指一个请求发送过来,如果此时缓存中和数据库都不存在这个请求所要查询的相关信息,那么数据库就会返回一个空对象,并将这个空对象和请求关联起来存到缓存中,当下次还是这个请求过来的时候,这时缓存就会命中,就直接从缓存中返回这个空对象,这样可以减少访问数据库的压力,提高当前数据库的访问性能。我们接下来可以看下面这个流程呀~
这时候,我们就会问了呀 ~,如果大量不存在的请求过来,那么这时候缓存岂不是会缓存许多空对象了吗~~~
没错哦!这也是使用缓存空对象会导致的一个问题:如果时间一长这样会导致缓存中存在大量空对象,这样不仅会占用许多的内存空间,还会浪费许多资源呀!。那这有没有什么可以解决的方法呢?我们来想一想:我们可以将这些对象在一段时间之后清理下不久可以了吗 ~
嗯嗯,没错!在想想 Redis 里是不是给我们提供了有关过期时间的命令呀(^▽^),这样我们可以在设置空对象的时间,顺便设置一个过期时间,就可以解决个问题了呀!
号外号外,大家可以关注公众号互联网架构师在后台回复2T可以获取一份我整理的最新面试题资料。
setex key seconds valule:设置键值对的同时指定过期时间(s) 在Java 中直接调用 API 操作即可:
redisCache.put(Integer.toString(id), null, 60) //过期时间为 60s 布隆过滤器 那布隆过滤器是不是不是一个过滤器,过滤东西的呀!哎呀,你太聪明了,没错它就是用来过滤东西的,它是一种基于概率的数据结构,主要使用爱判断当前某个元素是否在该集合中,运行速度快。我们也可以简单理解为是一个不怎么精确的 set 结构(set 具有去重的效果)。
但是有个小问题是:当你使用它的 contains 方法去判断某个对象是否存在时,它可能会误判。也就是说布隆过滤器不是特别不精确,但是只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率(这是可以接受的呀 ~)。当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在。
这里有个典型的例子呀,来自钱大:
打个比方,当它说不认识你时,肯定就不认识;当它说见过你时,可能根本就没见过面,不过因为你的脸跟它认识的人中某脸比较相似 (某些熟脸的系数组合),所以误判以前见过你。
在上面的使用场景中,布隆过滤器能准确过滤掉那些已经看过的内容,那些没有看过的新内容,它也会过滤掉极小一部分 (误判),但是绝大多数新内容它都能准确识别。这样就可以完全保证推荐给用户的内容都是无重复的。
说了这么久,那布隆过滤器到底有什么特点呢:
特点吗,多多来让一个个跟你吹吹(吹到你怀疑人生(≧∇≦)ノ)
一个非常大的二进制位数组(数组中只存在 0 和 1)
拥有若干个哈希函数(Hash Function)
Java详解剑指offer面试题38–字符串的排列 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
注意这道题求得是全排列。求若干字符组成的序列的所有排列可能,可以将字符序列分解成两部分:
第一个字符第一个字符之后的字符序列 这样就把一个大问题分解成了小问题,然后对小问题继续采用相同的策略即可!
因为所有字符都可能处于第一个位置,我们可以把第一个字符和其后的所有字符交换位置,这样就保证了所有字符都会位于第一个字符处;交换后固定第一个字符,然后对于其后的字符序列,继续分成两部分:第一个字符和其后的字符序列…这是一个递归过程!
第一个字符和其后的所有字符依次交换位置可以用一个for循环完成,对于循环中的每一次交换:在交换位置后要对除第一个字符外的字符序列进行递归。**这里一定要注意,第一个字符首先要和自己交换一下。**一次递归调用结束后,需要将之前的交换复原,以保证下次交换依然是和第一个字符交换。比如abcd,第一个字符和第二个字符交换后变成bacd,此后固定b对acd递归,递归结束后,需要将bacd复原成abcd,以便下次a和c交换位置变成cbad…
实现如下
package Chap4; import java.util.ArrayList; import java.util.Collections; /** * 通用的根据输入字符串得到全排列的程序,排序是为了保证字典序 */ public class Permutation { public ArrayList<String> permutation(String str) { ArrayList<String> list = new ArrayList<>(); if (str == null || str.length() == 0) { return list; } collect(str.toCharArray(), 0, list); // 保证字典序 Collections.sort(list); return list; } private void collect(char[] chars, int begin, ArrayList<String> list) { if (begin == chars.length - 1) { // 不能存入相同的排列 String s = String.
系列文章目录 阅读笔记Graph Representation Learning–Chapter2
阅读笔记Graph Representation Learning–Chapter3
阅读笔记Graph Representation Learning–Chapter4
阅读笔记Graph Representation Learning–Chapter5
阅读笔记Graph Representation Learning–Chapter6
阅读笔记Graph Representation Learning–Chapter8
文章目录 系列文章目录2.1 GRAPH STATISTICS AND KERNEL METHODS2.1.1 Node-level statistics and features(1)Node degree(2)Node centralityeigenvector centralitybetweenness centralitycloseness centrality (3)The clustering coefficient(聚集系数) 2.1.2 Graph-level features and graph kernels(1)Bag of nodes(2)The Weisfieler-Lehman kernel(3)Graphlets and path-based methods 2.2 Neighborhood Overlap Detection2.2.1 Local overlap measures2.2.2 Global overlap measuresKatz indexLeicht, Holme, and Newman (LHN) similarity 2.3 Graph Laplacians and Spectral Methods2.
解决方法如下:
需要更改下列2个地方为true;
在界面直接配置,有时候会出现下列错误
不允许对系统目录进行即席更新。 (Microsoft SQL Server,错误: 259)
解决方法:
EXEC master.dbo.sp_serveroption @server=N'自定义的连接名称', @optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'自定义的连接名称', @optname=N'rpc out', @optvalue=N'true'
一、遇到问题 目前使用Swagger2形成接口文档时,当系统设计的接口返回的类型不是实体对象时,Swagger2无法在接口文档页面中显示返回结果字段说明,比如返回json、map等可以存储key-val形式的类型;均无法在接口文档页面上显示返回的字段备注说明,所以怎么才能像实体对象一样显示正常的model字段说明是我们这次需要解决的问题;
二、实现思路 1、首先告诉Swagger2该接口需要返回的字段具体有哪些
定义两个注解,方便来定义返回json或者map的固定参数;如:
/** * @ClassName: ApiReturnJson * @Description: 返回对象的定义 (描述这个类的作用) * @author TangCai * @date 2019年2月22日 下午4:56:33 */ @Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface ApiReturnJson { String key(); //对象名称 ApiReturnJsonPro[] value(); //对象属性值 } /** * @ClassName: ApiReturnJsonPro * @Description: 每一个字段的定义备注说明 (描述这个类的作用) * @author TangCai * @date 2019年2月22日 下午4:57:09 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ApiReturnJsonPro { String key(); //key String example() default ""; Class<?> dataType() default String.class; String description() default "
问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。
将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=27+23+2^0
现在约定幂次用括号来表示,即a^b表示为a(b)
此时,137可表示为:2(7)+2(3)+2(0)
进一步:7=22+2+20 (2^1用2表示)
3=2+2^0
所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=210+28+2^5+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入格式 正整数(1<=n<=20000)
输出格式 符合约定的n的0,2表示(在表示中不能有空格)
样例输入 137
样例输出 2(2(2)+2+2(0))+2(2+2(0))+2(0)
样例输入 1315
样例输出 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示 用递归实现会比较简单,可以一边递归一边输出
import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.close(); f(n); } public static void f(int n) { String str = Integer.toBinaryString(n); int length = str.length(); for (int i = 0; i < length; ++i) { if (Integer.
错误:
错误: 1 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu bionic InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” 错误: 2 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” 错误: 3 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” 错误: 4 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” 错误: 5 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-proposed InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 所有软件包均为最新。 W: 无法下载 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/bionic/InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” W: 无法下载 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/bionic-updates/InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” W: 无法下载 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/bionic-backports/InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” W: 无法下载 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/bionic-security/InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” W: 无法下载 https: //mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/bionic-proposed/InRelease 无法解析域名“mirrors.tuna.tsinghua.edu.cn” W: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。 解决:
主要以单目RGB重建为主,包含部分相关的姿态估计方法。
目录 2020年Combining implicit function learning and parametric models for 3d human reconstructionPeelNet: Textured 3D reconstruction of human body using single view RGB imageDo As I Do: Transferring Human Motion and Appearance between Monocular Videos with Spatial and Temporal ConstraintsPIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization.Implicit functions in feature space for 3d shape reconstruction and completionRobust 3D Self-portraits in SecondsARCH: Animatable Reconstruction of Clothed Humans(相关论文)*High Accuracy Face Geometry Capture using a Smartphone Video* 2019年PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human DigitizationLearning to reconstruct people in clothing from a single RGB cameraSiclope: Silhouette-based clothed peopleLivecap: Real-time human performance capture from monocular videoMulti-Garment Net: Learning to Dress 3D People from ImagesLearning Dense Wide Baseline Stereo Matching for People360-Degree Textures of People in Clothing from a Single ImageMoulding Humans: Non-parametric 3D Human Shape Estimation from Single Images3DPeople: Modeling the Geometry of Dressed HumansTex2Shape: Detailed Full Human Body Geometry from a Single ImageDelving Deep Into Hybrid Annotations for 3D Human Recovery in the WildDeepHuman: 3D Human Reconstruction from a Single ImageA Neural Network for Detailed Human Depth Estimation from a Single ImageDetailed Human Shape Estimation from a Single Image by Hierarchical Mesh DeformationLiquid Warping GAN: A Unified Framework for Human Motion Imitation, Appearance Transfer and Novel View Synthesis(相关论文)*TexturePose: Supervising Human Mesh Estimation with Texture Consistency**Self-Supervised Learning of 3D Human Pose using Multi-view Geometry**Shape-Aware Human Pose and Shape Reconstruction Using Multi-View Images**Temporally Coherent Full 3D Mesh Human Pose Recovery from Monocular Video**VIBE: Video Inference for Human Body Pose and Shape Estimation* 2018年Detailed human avatars from monocular videoVideo based reconstruction of 3d people modelsMonoperfcap: Human performance capture from monocular videoDeep volumetric video from very sparse multi-view performance captureVolumetric performance capture from minimal camera viewpointsShape Reconstruction Using Volume Sweeping and Learned PhotoconsistencyBodynet: Volumetric inference of 3d human body shapes(相关论文)*DensePose: Dense Human Pose Estimation In The Wild**Learning to Estimate 3D Human Pose and Shape from a Single Color Image**Learning Monocular 3D Human Pose Estimation from Multi-view Images**DeepWrinkles: Accurate and Realistic ClothingModeling* ~2017年Surfacenet: An end-to-end 3d neural network for multiview stereopsis(2017) 2020年 Combining implicit function learning and parametric models for 3d human reconstruction pdf
想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL
示例 2:
输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL
双指针解决
这题k是非负数,但k有可能比链表的长度还要大,所以先要计算链表的长度len,需要旋转的步数就是(k%len)。一种比较简单的方式就是先把链表连接成一个环,然后再把链表在某个合适的位置断开。
我们可以使用两个指针,一个快指针fast从头开始遍历直到走到链表的末尾,然后再把链表串成一个环形。还一个指针slow也是从头开始,走(len-k%len)步就是我们要返回的链表头,这里可能有点疑问,为什么不是走(k%len)步,这是因为我们需要把链表后面的(k%len)个移到前面,因为单向链表我们没法从后往前遍历,所以我们只能从前往后移动(len-k%len)步。但实际上操作的时候会少走一步,具体来举个例子看一下,这里就以示例1为例画个图来看一下
原理比较简单,来直接看下代码
public ListNode rotateRight(ListNode head, int k) { if (head == null) return head; ListNode fast = head, slow = head; //链表的长度 int len = 1; //统计链表的长度,顺便找到链表的尾结点 while (fast.
不知道有没有小伙伴遇到我这种情况
关键是我找半天也无法成功安装网上教程说的Microsoft Store里面的bash/linux软件,什么开发者模式之类的我都试了,没用。
然后Windows自带的bash.exe也闪退,试过了网上推荐的两种办法都没有用……
可以说是很惨了
后来,我脑回路一新奇,决定用git bash试一试,果然还是git bash好使。
所以建议大家,还不如装个git bash来得快且省事!!!
如果自己下载并配置vue-router的话,注意在main.js文件中导入路由名字好像必须是router,不能大写也不能是其他的,好像vuex也是,必须是store,不然无法识别
unity大会 2019
The past few months were really busy for the Software Test Engineers team. We were all working hard on upcoming releases and the day-to-day testing tasks took up all of our bandwidth. We were so busy working in the sawmill that we forgot to sharpen our saws. To break out of this vicious circle, we organized a week long event, aimed at learning new skills and exchanging experiences.
Apache Spark在实际应用中迅速获得发展。加州大学伯克利分校的AMPLab于2009年开发了Spark,并于2010年将其开源。从那时起,它已发展成为大数据领域最大的开源社区之一,拥有来自50多个组织的200多位贡献者。这个开放源代码分析引擎以比MapReduce更快的速度处理大量数据而出类拔萃,因为数据被持久存储在Spark自己的处理框架中。
在考虑Hadoop生态系统中的各种引擎时,重要的是要了解每个引擎在某些用例下效果最佳,并且企业可能需要使用多种工具组合才能满足每个所需的用例。话虽如此,这里是对Apache Spark的一些顶级用例的回顾。
一、流数据
Apache Spark的关键用例是其处理流数据的能力。由于每天要处理大量数据,因此对于公司而言,实时流传输和分析数据变得至关重要。Spark Streaming具有处理这种额外工作负载的能力。一些专家甚至认为,无论哪种类型,Spark都可以成为流计算应用程序的首选平台。提出此要求的原因是,Spark Streaming统一了不同的数据处理功能,从而使开发人员可以使用单个框架来满足其所有处理需求。
当今企业使用Spark Streaming的一般方式包括:
1、流式ETL –在数据仓库环境中用于批处理的传统ETL(提取,转换,加载)工具必须读取数据,将其转换为数据库兼容格式,然后再将其写入目标数据库。使用Streaming ETL,在将数据推送到数据存储之前,将对其进行连续的清理和聚合。
2、数据充实 –这种Spark Streaming功能通过将实时数据与静态数据相结合来充实实时数据,从而使组织能够进行更完整的实时数据分析。在线广告商使用数据充实功能将历史客户数据与实时客户行为数据结合起来,并根据客户的行为实时提供更多个性化和针对性的广告。
3、触发事件检测 – Spark Streaming使组织可以检测到可能对系统内部潜在严重问题的罕见或异常行为(“触发事件”)并做出快速响应。金融机构使用触发器来检测欺诈性交易并阻止其欺诈行为。医院还使用触发器来检测潜在的危险健康变化,同时监视患者的生命体征-向正确的护理人员发送自动警报,然后他们可以立即采取适当的措施。
4、复杂的会话分析 –使用Spark Streaming,与实时会话有关的事件(例如登录网站或应用程序后的用户活动)可以组合在一起并进行快速分析。会话信息还可以用于不断更新机器学习模型。诸如Netflix之类的公司使用此功能可立即了解用户在其网站上的参与方式,并提供更多实时电影推荐。
二、机器学习
许多Apache Spark用例中的另一个是它的机器学习功能。
Spark带有用于执行高级分析的集成框架,该框架可帮助用户对数据集进行重复查询,这从本质上讲就是处理机器学习算法。在此框架中找到的组件包括Spark的可扩展机器学习库(MLlib)。MLlib可以在诸如聚类,分类和降维等领域中工作。所有这些使Spark可以用于一些非常常见的大数据功能,例如预测智能,用于营销目的的客户细分以及情感分析。使用推荐引擎的公司将发现Spark可以快速完成工作。
网络安全是Spark 机器学习功能的一个很好的商业案例。通过使用Spark堆栈的各种组件,安全提供程序可以对数据包进行实时检查,以发现恶意活动的痕迹。在前端,Spark Streaming允许安全分析人员在将数据包传递到存储平台之前检查已知威胁。到达存储区后,数据包将通过其他堆栈组件(例如MLlib)进行进一步分析。因此,安全提供商可以在不断发展的过程中了解新的威胁-始终领先于黑客,同时实时保护其客户。
三、互动分析
Spark最显着的功能之一就是其交互式分析功能。MapReduce是为处理批处理而构建的,而Hive或Pig等SQL-on-Hadoop引擎通常太慢,无法进行交互式分析。但是,Apache Spark足够快,可以执行探索性查询而无需采样。Spark还与包括SQL,R和Python在内的多种开发语言接口。通过将Spark与可视化工具结合使用,可以交互地处理和可视化复杂的数据集。
下一版本的Apache Spark(Spark 2.0)将于今年的4月或5月首次亮相,它将具有一项新功能- 结构化流 -使用户能够对实时数据执行交互式查询。通过将实时流与其他类型的数据分析相结合,预计结构化流将通过允许用户针对Web访问者当前会话运行交互式查询来促进Web分析。它也可以用于将机器学习算法应用于实时数据。在这种情况下,将对旧数据进行算法训练,然后将其重定向以合并新的数据,并在其进入内存时从中学习。
四、雾计算
尽管大数据分析可能会引起广泛关注,但真正激发技术界想象力的概念是物联网(IoT)。物联网通过微型传感器将对象和设备嵌入在一起,这些微型传感器彼此之间以及与用户进行通信,从而创建了一个完全互连的世界。这个世界收集了大量数据,对其进行处理,并提供革命性的新功能和应用程序供人们在日常生活中使用。但是,随着物联网的扩展,对大量,种类繁多的机器和传感器数据进行大规模并行处理的需求也随之增加。但是,利用云中的当前分析功能很难管理所有这些处理。
那就是雾计算和Apache Spark出现的地方。
雾计算将数据处理和存储分散化,而不是在网络边缘执行这些功能。但是,雾计算为处理分散数据带来了新的复杂性,因为它越来越需要低延迟,机器学习的大规模并行处理以及极其复杂的图形分析算法。幸运的是,有了Spark Streaming等关键堆栈组件,交互式实时查询工具(Shark),机器学习库(MLib)和图形分析引擎(GraphX),Spark不仅具有雾计算解决方案的资格。实际上,随着物联网行业逐渐不可避免地融合,许多行业专家预测,与其他开源平台相比,Spark有可能成为事实上的雾基础设施。
现实世界中的火花
如前所述,在线广告商和诸如Netflix之类的公司正在利用Spark获得见识和竞争优势。其他也从Spark受益的著名企业是:
Uber –这家跨国在线出租车调度公司每天都从其移动用户那里收集TB级的事件数据。通过使用Kafka,Spark Streaming和HDFS构建连续的ETL管道,Uber可以在收集原始非结构化事件数据时将其转换为结构化数据,然后将其用于进一步和更复杂的分析。
Pinterest –通过类似的ETL管道,Pinterest可以利用Spark Streaming即时了解世界各地的用户如何与Pins互动。因此,当人们浏览站点并查看相关的图钉时,Pinterest可以提出更相关的建议,以帮助他们选择食谱,确定要购买的产品或计划前往各个目的地的行程。
Conviva –这家流媒体视频公司每月平均约有400万个视频供稿,仅次于YouTube。Conviva使用Spark通过优化视频流和管理实时视频流量来减少客户流失,从而保持一致的流畅,高质量的观看体验。
何时不使用Spark
尽管它具有通用性,但这并不一定意味着Apache Spark的内存中功能最适合所有用例。更具体地说,Spark并非设计为多用户环境。Spark用户需要知道他们有权访问的内存对于数据集是否足够。添加更多的用户使此操作变得更加复杂,因为用户必须协调内存使用量才能同时运行项目。由于无法处理这种类型的并发,用户将需要为大型批处理项目考虑使用备用引擎,例如Apache Hive。
随着时间的流逝,Apache Spark将继续发展自己的生态系统,变得比以前更加通用。在大数据已成为规范的世界中,组织将需要找到最佳方式来利用它。从这些Apache Spark用例可以看出,未来几年将有很多机会来了解Spark的真正功能。
随着越来越多的组织认识到从批处理过渡到实时数据分析的好处,Apache Spark的定位是可以在众多行业中获得广泛而快速的采用。
摘自:https://www.aaa-cg.com.cn/data/2143.html
[root@OS person]# su - postgres
Last login: Tue Sep 15 11:33:23 CST 2020 on pts/0
-bash-4.2$ psql
psql (9.6.5)
Type "help" for help.
postgres=# create user wsj with password 'wsj';
CREATE ROLE
postgres=# create database wsjdb owner wsj;
CREATE DATABASE
postgres=# grant all privileges on database wsjdb to wsj;
GRANT
postgres=# \q
-bash-4.2$ exit
logout
创建完数据库,用户之后,连接数据库,使用dbeaver连接数据库失败。
考虑一下,可能是远程访问需要设置:
../pgsql/data/postgresql.conf文件中要有如下配置,确认无误,还是连不上:
再考虑一下,可能是端口填写的不对,查询pg库的端口号:
[root@OS data]# netstat -a | grep PGSQL
unix 2 [ ACC ] STREAM LISTENING 26832 /tmp/.
插件开发的时候,做ci的时候,发现依赖包没成功下载。
确认仓库有这个包,但是就是运行显示jar包文件不存在。排查过程中,遇到有些是这个情况,虽然我最后不是这个原因(而是pom文件少写了(๐॔˃̶ᗜ˂̶๐॓)【蠢哭】)但是记录一下。
maven默认不下载snapshot版本的jar包 所以,需要再maven的setting.xml文件中单独配置。
<profiles> <profile> <!-- 根据仓库id激活下面的配置 --> <id>xx-nexus</id> <activation><activeByDefault>true</activeByDefault></activation> <repositories> <repository> <id>xx-nexus</id> <!-- 私服地址 --> <url>http://xx.xx.xx.xx:port/repository/xx_group/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> </profile> </profiles> 关键的就是这一行
<snapshots><enabled>true</enabled></snapshots> 一般做项目依赖最好用releases版本的,也就是正式稳定的版本,而SNAPSHOT是快照版本,一般是开发调试用的。
vue项目npm run serve报错in ./src/App.vue?vue&type=style&index=0&lang=scss解决办法 重新安装sass-loader node-sass
一、直接安装
npm install sass-loader node-sass -D 二、cnpm安装
npm install -g mirror-config-china --registry=http://registry.npm.taobao.orgcnpm install sass-loader node-sass -D
大家好,今天和大家随便聊聊。本来想写的题目是如何成为一个优秀的程序员,后来想想,我自己也未必能算得上。所以还是谦虚一点,就把题目改了。
我这次不写那些方法论或者是感受的东西,这些可能大家get不到,也未必喜欢。这次写一点实际的,只要照着做,基本上不会被认为是个菜鸟,在职场当中也不会踩雷。
相信小习惯的力量 菜鸟和大牛的区别除了写代码、debug的核心能力差距之外,另外一个很大的差别就是在习惯上。大牛经过摸爬滚打练出了一系列优良的习惯,而菜鸟好习惯还没养成,坏习惯有了一堆。所以身为菜鸟的时候一定要有规范和习惯意识,养成好习惯,去掉坏习惯让自己越来越习惯写出优质的代码。
关于习惯仁者见仁,每个人也都有自己的习惯。我简单提几个,给大家抛砖引玉。
1.一个函数只做一件事 如果有一天你接手了另外一个同事的代码,发现他有一个函数里面装了三千行代码,你会是什么感受?
这是我亲身的经历,我当时看到代码的第一反应就是把这个人揪出来暴打一顿。代码和其他文本信息不同,越拥挤可读性越差。优质的代码和优质的文章很像,结构清晰、层次分明、表达准确。一个函数里面装几千行代码显然是老太太的裹脚布——又臭又长。
对于一个函数里究竟应该写多少代码,每个人有不同的理解。实际上我们也没必要硬扣,遵守一个简单的原则即可——一个函数只做一件事。举个简单的例子,假设我们要从上游读一批数据,然后画出某一个函数作用之后的结果。我们简单分析一下,表面上是画图这一件事情,但是这一件事情当中其实包含了好几个步骤,比如说从上游获取数据,获得函数作用的结果,最后才是画图。那么我们完全可以拆分成三个函数,一个函数获取数据,一个函数获取结果,一个函数画图。
这样别人以及以后的自己看这段代码就会非常清楚,每个函数做了什么一目了然。假如有一天老板无意间翻了大家的代码,别人的代码一个函数里装了几千行,你的代码层次分明,每个函数做什么都一目了然,你说老板会怎么想?
2.起长一点的变量名 新手一个很大的问题就是总喜欢起很短的变量名,像是a,b,c,d。或者是什么bd,aa什么的,看起来非常难看,可读性也很差。之前有几个同学找我帮他们看代码,给的都是这种代码,看起来感觉眼睛都被针扎了……
吐槽归吐槽,老实说我在之前打acm的时候也是喜欢短变量名,虽然不至于这么夸张,但一般一个变量名也不会很长。当然这是由于当时比赛的需要,大家争分夺秒,别人一个变量名叫btn,你叫binary_tree_node,很显然拼敲代码的速度你一定输。
但问题是后来毕业了之后我也一直保留这样的风格,不出意外地遭到了老板和同事的毒打。大家都表示不喜欢我这样的代码风格,我当时还坚持,觉得是自己代码能力的体现。后来去读了一下一些大牛的代码,尝试换了一种风格之后,发现真香了。虽然写起来的时候麻烦了一点(其实也还好,现在有各种代码补全功能),但是读起来是真的很舒服,思路也清楚了很多。所以如果你现在的代码不是这种风格的话,请一定尝试改一下,对自己对其他人都好。
另外一点是我们起名的时候可以是不规范的英文,哪怕不太准确也没问题,但一定一定不要用拼音。
拼音阅读起来比半通不通的英文还要费劲,而且用拼音做变量或者是函数名是一件非常非常low的事情,绝对会让对方对你的能力产生怀疑。市面上也有一些帮助起名的插件,有这方面需求的同学请务必去了解一下。
3.遵守代码规范 在新手的意识里可能没有代码规范这个词,但是这个确实是从新手走向进阶的必经之路。
不同的语言的规范是不同的,比如说Java和go当中流行驼峰命名法,所有变量都是驼峰的。而Python可能只有类名是驼峰的,普通变量和包名倾向于全小写用下划线分割。当然代码规范并不仅仅是命名规范而已,还有很多很多的规范。比如中间件的使用规范、多线程的开发规范、数据库的使用规范等等。为什么我们要遵守这些规范?因为我们的开发工作并不是实现功能就完事了,以后还需要拓展和维护。遵守规范不仅可以不给以后的自己以及他人埋雷,更重要的是可以让自己的代码质量更高,更加专业。而且一些规范当中往往是藏着道理的,为什么套接字、线程以及数据库连接都需要维护一个“池”?这里面肯定是有门道的,不然为什么大家不怎么简单怎么来?我们在遵守这些规范的时候也能便于我们更好地理解各个场景当中的原理以及细节,这也是技术实力的一部分。
当然我们一开始未必能做得很好,但代码规范并不是很困难的事情,从我们有这个意识到做到遵守规范并不需要很多时间,但是带来的收益却是非常丰厚的。之前在前公司,有听说过过因为代码风格太差被老板给了差绩效的事情,我觉得挺冤枉的,可能就是一时疏忽给老板留下了差印象,如果当时写代码的时候能注意一点,完全可以避免,代码有些太大了。
会用不等于懂了 如果你是应届生,那么当你毕业进入职场,你必然会面临一个适应的问题。别的我们不提,单单只说技术方面。我们势必需要快速学习一些我们之前没有见过或者是不了解的技术,来应付工作当中的任务以及挑战。
这个是非常正常的,我想绝大多数程序员在刚毕业的时候都经历过,我自己也不例外。刚毕业的几个月是最辛苦的,我们需要承担很大的压力,对于转变之后的生活也不是完全适应。但当几个月过去,我们适应了生活,学会了一些基本的技能可以应付或者说胜任当下的工作之后,一个潜在的陷阱就到来了。
有一些人会不知不觉地停止学习,因为他已经足够应付工作了。在工作当中他会有一种在这个领域我当下会的技能已经足够了的错觉,有些人甚至会因此觉得其他资历更深的同事也不过如此,似乎并没有比自己多会多少东西。我当初就是这样,因为我发现我工作当中用到的东西玩的非常溜,用起来得心应手。我一度有些膨胀,觉得自己已经算是一个经验丰富的程序员了。直到后来有一次面试,被问到了一个常用的工具的技术细节,我张口结舌一句话也说不上来,我才发现,自己知道的只是皮毛而已,甚至连皮毛都算不上。
当然我们工作当中对很多技术的要求都只是会用,你会用就够了,这并没有问题。我也并不觉得每一门我们用到的技术都需要去刨根究底,但我们需要对我们的实力有清醒的认识,哪些是勉强会用的?哪些是真正了解掌握的?哪些是需要掌握但是只是勉强会用的?
能够想明白这些问题可以让我们保持一个清醒的头脑,对自己的当下的处境以及长远的发展目标都会有一个清楚的认识。
积累知识而不仅是经验 新手或者是小白有一个特点就是往往更加依赖经验而不是知识,举个例子吧。比如新手后端经常遇到的问题之一就是maven package失败,很多人解冲突的办法就是mvn clean & mvn install。也就是清空重新建立,因为大部分情况下这个命令可以解决问题。所以很多新手就记住了这个命令,每次遇到maven失败就这么来一次。
如果这个命令解决不了呢?这些人可能会换个命令试试。如果常用的解决问题的命令都试过了还是不行呢?这些人可能就僵住了,觉得这个问题解决不了了,得请大牛来看了。
这里的核心问题是新手积累的是经验而不是知识,他们只是简单机械地把出现的问题和解决方法做映射而已,并不是从原理和核心层面理解问题出现以及解决方案生效的原因。那么带来的结果就是,积累到的只是经验,下次能解决问题不是因为学会了问题的解决方法,也不是理解了这一块技术内容,只是单纯地记住了而已。这显然也是一种伪成长。
其实我之前也遇到过这样的问题,虽然我每次都有意识遇到问题记录下解决的办法,这样下次就可以不用请教别人了。然而虽然我记录的问题越来越多,但是每次遇到新的问题还是解决不了,需要请教别人。直到有一天,被我问的大牛露出了不耐烦的神情,才让我下定决心自己学会解决问题。
于是我不再是头痛医头脚痛医脚地解决问题,而是去学习了一下问题背后的原理和机制,再从报错日志上分析错误产生的原因,思考解决方案,最终彻底学会了解决这一类问题的方法。之后不但能够自己独立解决问题,而且还可以去帮助别人了。我后来回过头来想想,如果我第一次遇到问题的时候就自己尝试去学习其中的机制,而不只是记住解决方法,应该可以做得更好。
少说废话,多写代码 著名的Linux之父Linus有一句名言:talk is cheap show me the code。翻译过来就是废话少说,代码拿来。我觉得这句话非常符合这一行的精髓,我们不是靠嘴皮子吃饭的,而是靠实实在在的产出,这个产出最终是要落实到代码上的。作为一个新人,可能我们会有这样的问题,那样的困惑。然而这许多的问题和困惑我们光想是没用的,只能用硬实力来解决。
著名的C语言作者谭浩强也有一句名言:新手学编程最应该做的事情就是写满一万行可以运行的代码,之后你就自然入门了。道理其实也是一样的,少说废话,多做实事。多做多练,实力自然不会差。空想吹逼是成不了大牛的。所以如果你犹豫想要学习一门新的领域,但是不知道从何做起的时候,不妨想想这句话,别管它三七二十一,先搞起来写起代码来再说。搞着搞着,你自然就明白后面应该怎么做了。
以上就是我自己积累的一些思考和想法,如果你是一个小白的话,希望它能够帮助你顺利度过新手期,向着大牛的目标进发。
衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、在看、转发)
Anaconda环境迁移 网络上提供了Clone、spec-list、Environment.yml、conda pack等多种方法,本人尝试过Clone、spec-list与conda pack方法,在笔记本与台式机之间进行环境迁移(同为win10),其中conda pack与clone时间漫长,同时出现了spyder无法启动的问题(找不到qtwidget.dll等),按照网上方法尝试多次无法成功,最终改用spec-list进行迁移,遇到了一些小问题,但是速度很快,不会出现大bug。
在旧环境中生成spec-list,转移到新环境 conda list --explicit > spec-list.txt 在新环境中更换清华镜像源; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ 在prompt窗口下进行环境重现(一定一定要在prompt窗口) conda create --name python-course --file spec-list.txt
本文仅用于记录自己在学习lidar_align代码过程中的一些总结。本文首先发表于公众号推送:Lidar与IMU标定代码实战。有修改与增加。
重要说明:lidar_align不适用于纯IMU与Lidar进行标定!
来自lidar_align维护者Alex:
Unfortunately our toolbox is not suitable for pure imu-to-lidar calibration. I have seen other papers about this problem, but to be honest I’m not up to date with that literature so I don’t know if there is an open-source toolbox available.
Our typical use case is one where we have a camera-imu-lidar system. We typically perform visual-inertial odometry and use this as the odom transform to which you’re referring.
python_计算机二级_标准库_turtle 一,turtle库概述 turtle库是turtle绘图体系的python实现
turtle绘图体系
1969诞生,主要用于程序设计入门
python语言的标准库之一
入门级的图形绘制函数库
二, 导入turtle库 import turtlefrom turtle import *from turtle import …import turtle as … 三, 窗体函数 setup(width,height,startx,starty) setup(宽,高,水平起始位置,垂直位置) 四,画笔运动命令 forward(distance) 当前方向前进distance长度 backward(distance) 当前相反后退distance长度 goto(x,y) 画笔移动到(x,y) right(angle) 向右转/顺时针 转动angle度 left(angle) 向左转/逆时针 转动angle度 seth(to_angle) 当前画笔朝向to_angle度(绝对角度) circle(radius,extent = None) 半径为radius,角度extent为的图形 不给extent或extent = None时,绘制整个圆 home() 当前画笔为原点,右为正/朝向东 五,画笔控制命令 penup() 提起画笔 pendown() 放下画笔 pensize(width) 画笔宽度,宽度/width speed(speed) 画笔移动速度 [0,10]整数。数字越大越快 pencolor(color) 画笔的颜色 color(,) 画笔颜色/框架颜色,填充颜色 screensize() 画布宽和高背景颜色 filling() 返回填充的状态 True为填充 False未填充 begin_fill() 需要填充图形前调用 end_fill() 填充图形后调用 write() 输出中文标签 write(arg,move = false,align = 'left',font = ('arial',8,'normal')) arg 信息 move 真/假 真 true 假 false 默认为false align 字符串 左 left 中 center 右 right font 三个字体 fontname fontsize fonttype hideturtle() 隐藏画笔 showturtle() 显示画笔 六,全局控制命令 clear() 清空当前窗口 不改变画笔位置 reset() 清空当前窗口 把所有状态恢复成默认值 stamp() 复制当前图形 七,其它命令 done() 必须海龟程序最后一个语句/ mainloop() 启动事件循环,调用Tkinter的mainloop函数
[Leetcode]字母异位词分组 Leetcode-字母异位词分组
题目描述 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
解题思路 当且仅当它们的排序字符串相等时,两个字符串是字母异位词。维护一个映射,在 Java 中,我们将键存储为字符串,例如,code。 在 Python 中,我们将键存储为散列化元组,例如,(‘c’, ‘o’, ‘d’, ‘e’)。
实现代码 class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: res = {} for s in strs: res[tuple(sorted(s))] = res.get(tuple(sorted(s)), []) + [s] return list(res.values())
问题:无法确定拖放操作目标。这是由于shell扩展未正确安装,或者您没有把文件拖拽到文件浏览器窗口。
解决:
1、打开CMD窗口,进入 Filezilla 安装目录,使用以下命令:
32位系统:
regsvr32 fzshellext.dll 64位系统:
regsvr32 fzshellext_64.dll 2、成功后重启电脑:
用stm32cube ide 建立了一个基于STM32F103的工程,编译通过后想用j-link V9 jtag方式下载到板子里,报了以上错误,不知道怎么处理,遇到过类似问题的请帮忙下,谢谢
wxml 代码
<view class="switch" > <view class="switchNums {{_num == 0?'currentNum':''}}" bindtap="switchChange" data-index="0">{{selectOpen[0]}}</view> <view class="switchNums {{_num == 1?'currentNum':''}}" bindtap="switchChange" data-index="1">{{selectOpen[1]}}</view> </view> css 代码
.switch { display: flex; align-items: center; justify-content: flex-end; width:120px; height: 54rpx; border-radius: 54rpx; background: #f7f7fb; } .switchNums { width: 112rpx; height: 54rpx; line-height: 54rpx; border-radius: 54rpx; text-align: center; color: #C1C1C1; font-size: 28rpx; font-weight: bold; } .currentNum { background: #6a74c9; color: #ffffff; } js中需要设置默认选中 和文字显示
data: { selectOpen:["展开","收起"], _num:0, } 效果展示 1
JDBC URL: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL` DB_CLOSE_DELAY:要求最后一个正在连接的连接断开后,不要关闭数据库MODE=MySQL:兼容模式,H2兼容多种数据库,该值可以为:DB2、Derby、HSQLDB、SQLServer、MySQL、Oracle、PostgreSQLAUTO_RECONNECT=TRUE:连接丢失后自动重新连接AUTO_SERVER=TRUE:启动自动混合模式,允许开启多个连接,该参数不支持在内存中运行模式TRACE_LEVEL_SYSTEM_OUT、TRACE_LEVEL_FILE:输出跟踪日志到控制台或文件, 取值0为OFF,1为ERROR(默认值),2为INFO,3为DEBUGSET TRACE_MAX_FILE_SIZE mb:设置跟踪日志文件的大小,默认为16M
这里给大家分享一下微软的一些办公软件,微软这几年的软件更新好像比早十年那段时间更新的比较快,我记得2003、2007这两大系列都是比较经典的,但后面基本每年都有一个新版本,而且都有大部分人都愿意去升级使用,导致在日常工作中,偶尔都会出现一些版本兼容性问题。我这里给大家分享一下2016年系列的。
cn_project_professional_2016_x86_x64_dvd_6966612.iso
cn_visio_professional_2016_x86_x64_dvd_6970929.iso
cn_office_professional_plus_2016_x86_x64_dvd_6969182.iso
注意,非破解版。这几年我自己就开始会用一些国产软件,WPS基本都代替了以前的word那些,如果对软件功能要求不高,我都是比较建议尝试一下我们国产的软件。
大家可以到官网地址下载数据集,我自己也在百度网盘分享了一份。可关注本人公众号,回复“2020091401”获取下载链接。
(一)Filter过滤器的使用
安装点云PCL(Point Cloud Library)库时,需要额外安装5个依赖库;它们有什么作用呢?如下:
Boost: 用于共享指针和多线程。Eigen: 一个标准的C++模板库用于线性代数,矩阵,向量等计算。FLANN:(Fast Approximate Nearest Neighbor Search Library), 快速最近邻逼近搜索函数库,可实现快速高效匹配。FLANN对点云索引(KdTree、Octree)中的K近邻、半径近邻、混合近邻搜索方法提供支持作用。OpenNI:一个开源的框架,用于3D传感器中间件的应用开发。VTK:三维点云的可视化和渲染。计算机图形学,图像处理,可视化方面的库。