dependencies,why语气词?
1、why引导定语从句的特点

(1)why在定语从句中作原因状语,修饰从句的谓语动词。例如:
This is the reason why I came here.这就是我来这儿的原因。(why作从句谓语came的原因状语)(2)why引导定语从句的先行词必须是表示原因的名词(例如:reason、cause等);但是先行词为表示原因的名词时,若关系词在从句中作主语或宾语等,定语从句要用that或which引导。例如:
Can you tell me the reason why you are late again?你能告诉我你再次迟到的原因吗?(why作从句的原因状语)
The boss doesn't want to hear any reason (that/which) you might give.老板不想听你所提出的任何理由。(that/which作从句谓语might give的宾语,可省略)
(3)why只能引导限定性定语从句,这一点和when、where不同。例如:
The reason why I got a job was that I worked hard.我获得一份工作的原因是因为我工作努力。(限定性定语从句)
学习让我不断进步!2、注意区别以下几个与reason有关的从句
(1)“The reason why ...”是why引导的定语从句,why在从句中作原因状语。例如:
I know the reason why she studies so well.我知道她学习好的原因。(why引导的定语从句)
(2)“The reason that ...”是that引导的同位语从句,that不作成分,that后面的内容说明reason的内容。例如:
I want to stay at home for the simple reason that I'm very tired.我想呆在家里,原因很简单,我很累。(that引导的同位语从句)
(3)“The reason is that ...”是that引导的表语从句,不能用because,否则会造成重复。例如:
The reason is that there are dependencies between services.原因是各个服务之间存在依赖的关系。(that引导的表语从句)
egg的稳定性?
egg框架内置了egg-cluster,来启动Master进程,Master有足够的稳定性,不再需要使用pm2等进程守护模块。安装egg的时候会将egg-cluster安装好。框架同时提供了egg-scripts来支持线上环境的运行和停止,但需要在 package.json 的dependencies中引入。
egg-scripts start // 开启应用
egg-scripts stop // 停止应用
开启应用的时候可以通过 --workers=xx 指定框架worker线程数,默认会创建和CPU核数相等的app worker数,以充分利用CPU资源。
Redis非关系性数据库有什么特点?
Redis概述
Redis是一个开源的内存中数据结构存储系统,用作数据库,缓存和消息代理。R
edis支持各种数据结构,例如哈希,字符串,列表,集合,位图,超级日志,带范围查询的排序集,带半径查询的地理空间索引以及流。它具有LRU逐出,Lua脚本,内置复制,事务以及磁盘持久性的不同阶段。这样可以通过Redis Sentinel以及在Redis Cluster的帮助下进行自动分区来提供高可用性。
知道如何使用Redis的个人可以执行许多操作,例如增加哈希值;附加到字符串;计算集交集;联合与差异;将元素推到列表中,或在排序集中收集排名最高的成员。
为了获得出色的性能,Redis使用内置的内存数据集进行操作。
根据用例,可以通过不时将数据集转储到磁盘一次或将每个命令附加到日志来保持相同。如果需要网络化,功能丰富的内存中缓存,则可以轻松禁用持久性。
Redis甚至支持琐碎的设置主从异步复制,以及非常快速的非阻塞同步,自动重新连接以及netsplit上的部分重新同步。
Redis的功能Redis用ANSI C语言编写,并且可以在大多数POSIX系统(例如BSD,Linux,OS X)中使用,而没有任何外部依赖关系。OS X和Linux被认为是Redis开发和测试最多的两个操作系统,而Linux已用于部署Redis。Redis可以在Solaris派生的系统(例如SmartOS)中运行,但是尽最大努力提供支持。
不幸的是,没有为Windows构建提供官方支持,但是Microsoft为Redis开发并维护了Win-64端口。在2019年,Redis庆祝成立10周年。Redis的其他重要功能如下:
1. 高级数据结构。Redis为值提供了五个可能的数据选项。这些是散列,列表,集合,字符串和排序集合。给出了这些数据类型特有的操作,并附带了有据可查的时间复杂性(Big O表示法)。
2. 高效的性能。由于其内存特性,项目经理致力于确保将复杂性保持在最低限度的承诺以及基于事件的编程模型,因此该应用程序拥有出色的读写性能。
3. 极其轻巧且无依赖性。Redis用ANSI C语言编写,并且没有外部依赖性。该程序在所有POSIX环境中均能完美运行。Redis尚未正式支持Windows平台,但是Microsoft已为该平台提供了一个实验性构建。
4. 高可用性 。Redis具有对非阻塞,异步,主/从复制的内置支持,以确保高级别的数据可用性。当前有一个名为Redis Sentinel的高可用性解决方案,目前可以使用,但仍被认为是一个进行中的项目。
为什么要使用Redis?因此,现在开始使用Redis时,可能会问为什么要使用Redis,或者与其他同类产品相比,使用Redis有什么用?好吧,毫无疑问,Redis是其其他竞争对手之外的佼佼者。但是,使它与众不同的是它的创造和工作效率。下面提到的是一些为什么至少要尝试Redis的最重要原因。
1. 超快的速度。Redis极快!这是因为它是用C语言编写的。
2. NoSQL数据库。Redis是NoSQL数据库。
3. 流行用法。目前,Redis已被Pinterest,Snapchat,GitHub,微博,Digg,StackOverflow,Craigslist和Flickr等许多技术巨头使用。
4. 对缓存有用。为了保护云数据库调用并因此节省一些资金,人们可以选择通过Redis进行缓存。
5.对开发人员友好。Redis对开发人员友好。目前,大多数语言都支持它。这是使用这种开源技术的巨大优势。诸如C,C ++,C#,JavaScript,Java,Go,Objective-C,Python,PHP等语言以及几乎所有著名语言都支持Redis。
Redis应用场景Redis的简单性、异常快的性能以及对数据结构的原子操作,为解决与传统关系数据库一起实施时遇到的难题或执行不力的问题提供了自己的解决方案。由于Redis的通用性,它们的一些流行应用如下:
1. 队列。Rescue等项目将Redis用于后端以对后台作业进行排队。
2. 发布和订阅。自2.0版发布以来,Redis提供了使用发布/订阅范式分发数据的功能。一些组织已经转移到Redis并离开了其他消息队列系统(例如RabbitMQ,zerm等),仅是因为Redis的可靠性能和简单性。
3. 缓存。由于其高性能,当读写操作量超过传统数据库的功能时,许多开发人员已转向Redis。与传统的缓存解决方案相比,Redis具有将数据持久保存到磁盘的能力,因此被认为是更好的选择。
4. 计数器。原子命令(例如HINCRBY)为各种计数器的简单且线程安全的实现提供访问权限。形成计数器就像确定键名然后发出HINCRBY命令一样容易。甚至在增加数据之前都没有读取数据,甚至没有数据库方案可以更新。由于这些操作是原子操作,因此当它们从多个应用程序服务器访问时,计数器将有助于保持一致性。
如何构建一个大型Vue应用程序?
vue-cli 3.0环境开发,在安装vue之前我们需要安装node环境,这个我们只要在node官方下载node绿色免安装版,然后再配置下环境变量即可使用node和npm了。
将node所在目录配置到电脑的环境变量中就可以使用了,这里我的目录是D:Program Filesnode-v10.8.0-win-x86,这里我们只要打开电脑-属性-系统设定-进阶-环境变量中奖该路径添加到path中即可, 快捷键“win+r ”打开运行框,输入cmd在弹出的窗口中输入node -v 检查node.js是否安装成功。
这里我们配置淘宝的镜像源,这里设置永久的输入命令:npm config set registry https://registry.npm.taobao.org/
// 临时 npm --registry https://registry.npm.taobao.org install express // 永久 npm config set registry https://registry.npm.taobao.org // 验证是否成功 npm config get registry
现在我们可以开始来搭建vue-cli 3.0环境了,输入命令:npm install -g @vue/cli 安装vue3.0(-g: 指全局安装),快捷键“win+r ”打开运行框,输入cmd在弹出的窗口中输入vue -V(大写的V哦)来 检查vue是否安装成功。
npm install -g @vue/cli
接下来我们继续创建vue项目 ,vue3.0和2.0有点区别,不用在装webpack了,直接使用命令:vue create project创建项目(project为项目名),进入项目配置,这里选择Manually select features(翻译:手动选择功能)。
进入下一个安装配置选择,这里根据项目情况自行选择配置,按上下键切换目标选项,按空格键勾选和取消,按a全选,按i反选,选好后回车确定(以下是几个选项的相关意义),图中是我的选择。
Babel:指转译成浏览器可识别的语言,可以让你的项目支持更新的语法,如es6es7等 TypeScript:新增的选项卡 Progressive Web App (PWA) Support:指模拟原生app Router:路由管理 Vuex:vuex管理模式 CSS Pre-processors:css预处理语言 Linter / Formatter:代码规范 Unit Testing:组件单元测试 E2E Testing:端对端测试,模拟用户真实场景
接下来提示我们选择是否使用历史路由:这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面,我们输入Y同意即可,然后就是选择CSS预处理器语言,在弹出的选项中我选择LESS
选择ESLint的代码规范,此处使用 Standard代码规范,这里我选择了ESLint + Standard config(正常模式)
ESLint with error prevention only: 只进行报错提醒; ESLint + Airbnb conf: 不严谨模式; ESLint + Standard config: 正常模式; ESLint + Prettier: 严格模式;
接着选择代码检查方式,这里提示我们何时对进行代码检测,我选择在保存时进行检测,Lint and fix on commit(requires Git)【翻译:整理并固定提交时(需要git)】
接着选择单元测试解决方案,这里选择 我Jest
接着选择 Babel、PostCSS、ESLint等配置文件存放位置,第一个保存配置文件中,第二个放package.json里,这里我选择单独保存在各自的配置文件中。
接着提示是否在以后的项目中使用以上配置,这里我们选择no,下次自行配置,你也可以选择yes。
完成以上信息配置之后开始创建项目并开始下载依赖,我们只要耐心等待进度条完成,这样我们就把Vue项目创建好并完成了初始化。
要求上传身份证等信息?
一、前言
一般不会泄露,但可能会存在三无APP,所以要擦亮自己的眼睛,不要乱注册一些无用的APP,一般APP的身份证上传,对于企业它是怎么使用的昵?下面基于程序员的角度来帮助分析一下这个问题,希望能解开你的疑惑。
二、用途对于企业来说,拿到你的身份证,无非就是身份证OCR(文字识别)一下,就是识别出你的身份证正反面的信息,然后校验以下几种情况:
注册身份的真实性;身份证是否过期;年龄是否满足注册条件;性别校验;...以上信息是否都校验是基于这款产品的目的用途。一般APP基本都是拿到姓名、身份证号校验注册身份的真实性即可。
除上以外,会保存你的身份证照片,这个虽然保存在企业服务器上了,但是一般都是授权访问的,如有疑问,问题排查所用。企业员工都是基于法律签订合同的,如果真有企业或者员工做非法的事情,那就是违犯,等待相关机关处理。
三、技术实现一般身份证OCR实现,都是借助第三方接口实现,目前大部分都是采用百度实现。实现方式如下:
1.获取百度身份证文字识别密钥,登录https://console.bce.baidu.com/ai/?fromai=1#/ai/ocr/overview/index,拿到APP_ID、API_KEY、SECRET_KEY即可。
2.maven配置
<dependencies><!-- 百度文字识别SDK --> <dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.6.1</version></dependency></dependencies>
3.controller实现
package com.midou.idcardocr.controller;import com.baidu.aip.ocr.AipOcr;import com.midou.idcardocr.util.ImageUtil;import org.json.JSONObject;import java.util.HashMap;/** * @author 米兜 * @description * @date 2020/6/28 8:17 * @modified by */public class HelloWorld {//申请的[https://console.bce.baidu.com/ai/?fromai=1#/ai/ocr/overview/index] public static final String APP_ID = "20621426";public static final String API_KEY = "01IBzVivzwkwdQMS9B4ScdDt";public static final String SECRET_KEY = "RvIYakSHRgZrNnOIDXObitl2FOEQdtUo";public static void main(String[] args) {AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);// 传入可选参数调用接口 HashMap<String, String> options = new HashMap<String, String>();options.put("detect_direction", "true");options.put("detect_risk", "false");//身份证背面照 //String idCardSide = "back"; //身份证正面照 String idCardSide = "front";// 参数为本地图片路径 //String image = "D:\back.jpg"; String image = "D:\front.jpg";JSONObject res = client.idcard(image, idCardSide, options);System.out.println(res.toString(2));// 参数为本地图片转二进制 byte[] file = ImageUtil.readImageFile(image);res = client.idcard(file, idCardSide, options);System.out.println(res.toString(2));}}
4.上面涉及一个本地图片转二进制package com.midou.idcardocr.util;import javax.imageio.stream.FileImageInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;/** * @author 米兜 * @description * @date 2020/6/28 8:24 * @modified by */public class ImageUtil {/** * 将图像转为二进制数组 * * @param path * @return */ public static byte[] readImageFile(String path) {byte[] data = null;FileImageInputStream input = null;try {input = new FileImageInputStream(new File(path));ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buf = new byte[1024];int numBytesRead = 0;while ((numBytesRead = input.read(buf)) != -1) {output.write(buf, 0, numBytesRead);}data = output.toByteArray();output.close();input.close();} catch (FileNotFoundException ex1) {ex1.printStackTrace();} catch (IOException ex1) {ex1.printStackTrace();}return data;}}
四、运行结果[图片来源网络,如有争议,联系删除即可]
0 [main] INFO com.baidu.aip.client.BaseClient - get access_token success. current state: STATE_AIP_AUTH_OK
2 [main] DEBUG com.baidu.aip.client.BaseClient - current state after check priviledge: STATE_TRUE_AIP_USER
{
"log_id": 3010258785723740188,
"words_result": {
"姓名": {
"words": "栾韶东",
"location": {
"top": 40,
"left": 89,
"width": 51,
"height": 19
}
},
"民族": {
"words": "回",
"location": {
"top": 76,
"left": 168,
"width": 12,
"height": 14
}
},
"住址": {
"words": "广东省深圳市福田区笋岗西路3002号",
"location": {
"top": 140,
"left": 85,
"width": 166,
"height": 37
}
},
"公民身份号码": {
"words": "",
"location": {
"top": 0,
"left": 0,
"width": 0,
"height": 0
}
},
"出生": {
"words": "19680909",
"location": {
"top": 107,
"left": 86,
"width": 131,
"height": 14
}
},
"性别": {
"words": "男",
"location": {
"top": 76,
"left": 89,
"width": 10,
"height": 15
}
}
},
"words_result_num": 6,
"idcard_number_type": 0,
"image_status": "unknown",
"direction": 0
}
{
"log_id": 2919714179777122876,
"words_result": {
"姓名": {
"words": "栾韶东",
"location": {
"top": 40,
"left": 89,
"width": 51,
"height": 19
}
},
"民族": {
"words": "回",
"location": {
"top": 76,
"left": 168,
"width": 12,
"height": 14
}
},
"住址": {
"words": "广东省深圳市福田区笋岗西路3002号",
"location": {
"top": 140,
"left": 85,
"width": 166,
"height": 37
}
},
"公民身份号码": {
"words": "",
"location": {
"top": 0,
"left": 0,
"width": 0,
"height": 0
}
},
"出生": {
"words": "19680909",
"location": {
"top": 107,
"left": 86,
"width": 131,
"height": 14
}
},
"性别": {
"words": "男",
"location": {
"top": 76,
"left": 89,
"width": 10,
"height": 15
}
}
},
"words_result_num": 6,
"idcard_number_type": 0,
"image_status": "unknown",
"direction": 0
}
Process finished with exit code 0
五、总结上面是基于程序员角度分析身份证信息问题,如有不对,请多多包涵。


还没有评论,来说两句吧...