shell脚本: 删除系统中所有的[共享内存、信号量、消息队列]

删除系统中,所有的[共享内存、信号量、消息队列] #!/bin/bash for i in `ipcs -m | tail -n +4 | awk {'print $2'}` # 共享内存 do ipcrm -m $i; echo 删除shm = $i done for i in `ipcs -s | tail -n +4 | awk {'print $2'}` # 信号量 do echo 删除sem = $i ipcrm -s $i; done for i in `ipcs -q | tail -n +4 | awk {'print $2'}` # 消息队列 do echo 删除mq = $i ipcrm -q $i; done

Mysql启用only_full_group_by模式

Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘userinfo.t_long.user_name’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by MySQL 5.7.5和up实现了对功能依赖的检测。如果启用了only_full_group_by SQL模式(在默认情况下是这样),那么MySQL就会拒绝选择列表、条件或顺序列表引用的查询,这些查询将引用组中未命名的非聚合列,而不是在功能上依赖于它们 mysql> SHOW SESSION VARIABLES; mysql> SHOW GLOBAL VARIABLES; mysql> select @@sql_mode; 可见session和global 的sql_mode的值都为: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

解决Python开发中,Pycharm中无法使用中文输入法问题

Pycharm是开发Python程序的利器,但有时会遇到无法输入中文的情况。表现为:在Ubuntu系统可以正常输入中文,却在Pycharm内写注释的时候,切换不出中文。下面演示如何解决此问题。 1、在pycharm安装目录bin下的pycharm.sh中,添加如下几行: ibus类型的输入法: export GTK_IM_MODULE=ibus export QT_IM_MODULE=ibus export XMODIFIERS=@im=ibus fcitx类型的输入法: export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx 成长离不开与优秀的同伴共同交流,如果你需要好的学习环境,好的学习资源,这里欢迎每一位热爱Python的小伙伴,Python学习圈 添加环境变量 2、重启pycharm即可 $sudo ./pycharm.sh 3、结束语 希望本文能够帮助您解决实际问题!!!

Pytorch笔记 之 torch.nn 模块简介

文章目录 torch.nnbeforenn.functionalnn.Module & nn.Parameternn.Lineartorch.optimDataLoaderAdd Validationnn.SequentialUsing GPU torch.nn import torch.nn as nn 参考翻译 What is torch.nn really? 主要是对 PyTorch 框架的各模块进行简要介绍 一定程度上是 PyTorch 的入门笔记 假设已经对神经网络相关基础知识有了一定了解 (或实现过机器学习梯度下降相关代码) before PyTorch 使用 torch.tensor,需要将数据进行转换 import torch x_train, y_train, x_valid, y_valid = map( torch.tensor, (x_train, y_train, x_valid, y_valid) ) x_train.shape x_train.min() x_train.max() map(function, iterable, …) return iterable nn.functional import torch.nn.functional as F 包含 torch.nn 库中所有函数 同时包含大量 loss 和 activation function import torch.nn.functional as F loss_func = F.

超详细黑苹果安装图文教程送EFI配置合集及系统

一、准备工作 1、两张16g的u盘 其中一张安装pe系统 (老毛桃等)这里自行安装 2、电脑(废话)这里以小米pro笔记本做教程 其余的本本大同小异 3、工具包及镜像以及EFI合集(链接及下载地址在文末) 二、制作镜像前的准备 安装mac系统最重要的就是找到与你的电脑合适的EFI配置(文末提供下载 总有你的一款配置) 下载工具包如下图将圈上的工具下载并解压备用 三、制作mac镜像u盘 1、打开工具包中的transmac软件 界面如下 点击你的u盘 然后选择 format Disk for mac 稍等片刻然后再点击 restore with Disk image 选择下载好的mac镜像(文末提供下载 10.13版本) 稍等片刻 等待写入完成 额 真滴慢 大概要20分钟把! 看到这个就ok了 2、这一步很重要! 将下载的EFI合集中 找到合适你电脑型号的EFI配置文件 这里博主的电脑是小米pro 我们用这个驱动 这个驱动是我见过支持小米本安装mac最完美的驱动 内置声音修复教程 你安装后可以打开看一看 下载 解压 会看到有两个文件夹 这个EFI文件夹就是黑苹果安装的引导以及驱动文件夹(这个很重要记住它) 将EFI下的两个文件夹复制 打开分区工具DiskGenius mac u盘启动制作完成 另一U盘制作老毛桃PE 这里就不具体了 请自行百度 四、修改磁盘 首先打开分区工具 我这里安装的是把整个盘全部都删除掉重新分区 此步骤在PE中进行 0、设置你的笔记本为UEFI启动(这里没个本本不一样请自行上网搜),并插入老毛桃U盘,进入PE系统 1、删除磁盘所有分区 点击磁盘,右键删除分区 2、将分区列表转化为GUID模式 点击红色框框 3、新建EFI分区(最后给400M左右的大小 200M是不够用的 后面安装mac会出错) 首先点击要分区的硬盘。之后点击新建区分,样式如图所示! 之后一路确定 4、删除并新建raw分区给mac使用 1.在pe系统中打开 创建并格式化分区功能 打开步骤

Android 属性动画之无限循环缩放动画,旋转动画

缩放动画 AnimatorSet animatorSetsuofang = new AnimatorSet();//组合动画 ObjectAnimator scaleX = ObjectAnimator.ofFloat("执行动画的控件", "scaleX", 1, 1.1f,1);//后几个参数是放大的倍数 ObjectAnimator scaleY = ObjectAnimator.ofFloat("执行动画的控件", "scaleY", 1, 1.1f,1); scaleX.setRepeatCount(ValueAnimator.INFINITE);//永久循环 scaleY.setRepeatCount(ValueAnimator.INFINITE); animatorSetsuofang.setDuration(3000);//时间 animatorSetsuofang.play(scaleX).with(scaleY);//两个动画同时开始 animatorSetsuofang.start();//开始 旋转动画 ObjectAnimator objectAnimator = ObjectAnimator.ofFloat("执行动画的空件", "rotation", 0f, 360f);//旋转的角度可有多个 objectAnimator.setDuration(1000); objectAnimator.setRepeatCount(ValueAnimator.INFINITE); objectAnimator.setRepeatMode(ObjectAnimator.RESTART);//匀速 objectAnimator.start();//开始(重新开始) objectAnimator.pause();//暂停 objectAnimator.resume();//继续(在暂停的位置继续动画) objectAnimator.end();//结束(回到原始位置)

小白教程Node连接Oracle 数据库

1.安装Oracle 客户端 https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 注意环境变量的配置 2.安装node 自己去官网下载傻瓜式操作 3.安装node-oracledb模块到本地文件夹 cmd 操作 d: cd node npm install oracledb //安装模块到本地文件夹 cd .>index.js //创建js 4.测试 var oracledb = require('oracledb'); oracledb.getConnection({ user: "123456", //数据库账号 password: "123456", //密码 connectString: "192.168.1.32:1521/orcl" //数据库地址 }, function(err, connection) { if (err) { console.error(err.message); return; } connection.execute( "select * from table t where rownum<=5", [], function(err, result) { if (err) { console.error(err.message); doRelease(connection); return; } console.log(result.metaData); console.log(result.rows); doRelease(connection); }); }); function doRelease(connection) { connection.

angular2/4通过服务实现组件之间的通信EventEmitter ,emit(),subscribe()发射和接收.

1、创建服务,new一个EventEmitter import {Injectable, EventEmitter, OnInit} from "@angular/core"; @Injectable() export class EmitService implements OnInit { public eventEmit: any; constructor() { // 定义发射事件 this.eventEmit = new EventEmitter(); } ngOnInit() { } } 2、配置module.ts import {BrowserModule} from '@angular/platform-browser'; import {NgModule} from '@angular/core'; import {AppComponent} from './app.component'; import {EmitComonent} from "./emit.component"; import {EmitService} from "./emit.service"; @NgModule({ declarations: [ AppComponent, EmitComonent ], imports: [ BrowserModule ], providers: [ EmitService ], bootstrap: [ AppComponent ] }) export class AppModule { } 3、定义组件,发射消息 import {Component} from '@angular/core'; import {EmitService} from "

Unity | 实现隐藏窗口到托盘,并且任务栏不显示icon

效果如下图所示: 用到的插件:(放在Plugins文件夹下,点击下载各个版本) System.Drawing.dllSystem.Windows.Forms.dllSystem.Deployment.dll(运用基于.Net4.x的dll打包时,需要用到该dll,否则会报错) 代码如下: using System; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.UI; public class LayoutManager : MonoBehaviour { [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow); private const int SW_HIDE = 0; //hied task bar private const int SW_RESTORE = 9;//show task bar private static System.Windows.Forms.NotifyIcon _notifyIcon = new System.Windows.Forms.NotifyIcon(); private static int _width = 100, _height = 100; public Button btn; private IntPtr window; private void Start() { btn.

Windows的重要服务端口135/137/138/139/445

目录 TCP135端口 UDP137、138端口 TCP139、445端口 Windows一般开放udp_137, udp_138, tcp_139, tcp_445端口。 服务端口描述NetBIOS名称服务(NBNS)UDP 137NBNS也称为Windows Internet名称服务(WINS)。NBNS的工作是将IP地址与NetBIOS名称匹配,并允许查询匹配。名称服务通常是第一个受到攻击的服务。访问者将需要它可以提供的信息来开始其他服务的会话。 NetBIOS数据报UDP 138数据报服务用于通过UDP接收SMB数据包的广播。此服务在广播其名称和服务时从LAN上的其他Windows计算机接收大量合法流量。攻击者很少使用此服务,除非他们尝试将其计算机添加到Windows网络。 NetBIOS会话服务TCP 139会话服务用于处理NBT会话。NBT会话是用于包含SMB会话的轻量级协议。SMB协议和基于它的会话用于提供Window网络支持的服务的复杂功能; 例如文件和打印共享。这是攻击者最感兴趣的服务。 SMB DirectTCP 445在Windows 2000中,Microsoft引入了SMB的实现,不需要NBT进行通信。该服务实际上与NetBIOS会话服务相同,但没有围绕SMB会话的附加NBT协议。较旧的Windows版本不支持SMB Direct。较旧的黑客工具不针对此服务,而是针对NetBIOS会话服务。 NetBIOS协议 NetBIOS是一种提供各种网络服务的API。 NetBIOS提供了几种服务: NetBIOS名称服务(NBNS) 描述NetBIOS中的名称服务(服务,而不是特定的协议) - 它是一个提供名称查找,注册,…的服务。 UDP(或TCP)端口137上的/ NBNS(类似于DNS,在Windows上也称为WINS)。 NetBIOS数据报服务(NBDS) 描述NetBIOS中的数据报服务(服务,而不是特定协议) - 似乎很少使用。 UDP端口138上的/ NBDS。 NetBIOS会话服务(NBSS) 描述NetBIOS中的会话服务(服务,而不是特定协议) - 它是一种提供可靠的有序数据包传送的服务。 TCP端口139上的/ NBSS。 SMB协议 服务器消息块(Server Message Block,缩写为SMB),又称网络文件共享系统(Common Internet File System,缩写为CIFS, /ˈsɪfs/),一种应用层网络传输协议,由微软开发,主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源。它也提供经认证的行程间通信机能。 它主要用在装有Microsoft Windows的机器上,在这样的机器上被称为Microsoft Windows Network。所有Windows for Workgroups,Windows 95和Windows NT系统都(或能够)将SMB作为客户端,服务器或两者运行。微软的分布式文件系统实现就基于SMB。 SMB可以以不同方式运行在会话层或者更低的网络层之上: 直接运行在 TCP 上 port 445;通过使用 NetBIOS API, 它可以运行在几种不同的 transports: 基于 UDP ports 137, 138 & TCP ports 137, 139 (NetBIOS over TCP/IP);基于一些传统协议,例如 NBF (incorrectly referred to as NetBEUI SMB是客户端服务器,请求 - 响应协议。

python 使用cv2模块将图片合并生成视频

文章目录 配置:1、需求2、代码1、注意事项2、之际上代码: 配置: window10 64位系统 python3.6 cv2模块安装 pip install opencv-python 1、需求 之前使用cv2模块进行过视频截帧,但是现在试试将截帧的图片进行一个合并。 2、代码 1、注意事项 1、图片的大小必须都是一样的尺寸,和代码中的size一样 2、地址我的代码图片设置位jpg格式图片了,如图需要其他图片,请自己修改代码 3、视频我默认保存到图片的目录下了。 2、之际上代码: import os import cv2 def makeVideo(path, size): filelist = os.listdir(path) filelist2 = [os.path.join(path, i) for i in filelist] print(filelist2) fps = 1 # 我设定位视频每秒1帧,可以自行修改 # size = (1920, 1080) # 需要转为视频的图片的尺寸,这里必须和图片尺寸一致 video = cv2.VideoWriter(path + "\\Video.avi", cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), fps, size) for item in filelist2: print(item) if item.endswith('.jpg'): print(item) img = cv2.

ReactNative封装的优雅居中/底部弹出框

/* * @Date: 2019-08-30 16:05:37 * @Description: 真的不想每次都写个Modal了。 * @Author: zhangji * @LastEditors: ZhangJi * @LastEditTime: 2019-09-02 11:16:51 */ import React from "react"; import _ from "lodash"; import { View, StyleSheet, Component, Platform, ActivityIndicator, FlatList, Image, TouchableWithoutFeedback, TouchableOpacity, Text, Alert, Modal, RefreshControl, NativeModules, ScrollView, TekLoadingDialog, LayoutAnimation } = 'react-native'; /** * 通用弹出框,包括居中弹出框和底部弹出框 * @param {Boolean} isVisible 控制是否可见 * @param {?Boolean} isBottomView 可选,控制是否为底部弹出框样式,默认为居中弹出框 * @param {?Boolean} isTouchMaskToClose 可选,控制是否点击阴影关闭弹窗,默认开启 * @param {?

图像变换

图像变换 包含内容:等距变换、相似变换、仿射变换、投影变换相关链接: https://blog.csdn.net/raby_gyl/article/details/52780644https://blog.csdn.net/KinboSong/article/details/64923831https://blog.csdn.net/aiwoshan0908/article/details/80047529https://blog.csdn.net/u014096352/article/details/53526747基于Landmark的人脸对齐以及裁剪方法 https://www.cnblogs.com/cv-pr/articles/5438351.html 平均脸 https://blog.csdn.net/dzJx2EOtaA24Adr/article/details/78610166?utm_source=blogxgwz4 求解相似变换矩阵、仿射变换矩阵的注释 icvGetRTMatrix函数详细注释:https://blog.csdn.net/xdfyoga1/article/details/44263271 相似变换原理及推导 释义:相似变换是旋转、平移、缩放变换的组合,包含四个参数:缩放因子s,旋转角度 θ \theta θ,x方向平移 t x \ t_x tx​, y方向平移 t y \ t_y ty​ 变换矩阵为: ( x ′ y ′ ) \begin{pmatrix} x&#x27; \\ y&#x27; \\ \end{pmatrix} (x′y′​) = ( s c o s ( θ ) s s i n ( θ ) t x − s s i n ( θ ) s c o s ( θ ) t y ) \begin{pmatrix} scos(\theta) &amp;s sin(\theta) &amp; t_x \\ -s sin(\theta) &amp; scos(\theta) &amp; t_y \\ \end{pmatrix} (scos(θ)−ssin(θ)​ssin(θ)scos(θ)​tx​ty​​) ( x y 1 ) \begin{pmatrix} x \\ y \\ 1 \\ \end{pmatrix} ⎝⎛​xy1​⎠⎞​ (1)令 m 1 = s c o s ( θ ) m_1=scos(\theta) m1​=scos(θ), m 2 = − s s i n ( θ ) m_2=-ssin(\theta) m2​=−ssin(θ), m 3 = t x m_3=t_x m3​=tx​, m 4 = t y m_4=t_y m4​=ty​则 x ′ = m 1 x − m 2 y + t x x&#x27;=m_1x-m_2y+t_x x′=m1​x−m2​y+tx​, y ′ = m 1 y + m 2 x + t y y&#x27;=m_1y+m_2x+t_y y′=m1​y+m2​x+ty​相似变换矩阵有四个参数,实际上有两个点即可得出解,实际上可能由多个点,比如人脸关键点和标准关键点之间的相似变换矩阵求解,事实上,从原始点到目标点的变换矩阵为:

一个简单JavaAgent的实现

一、什么是javaagent javaagent是一个JVM“插件”,一种专门精心制作的.jar文件,它能够利用JVM提供的Instrumentation API。 1.1、概要 Java Agent由三部分组成:代理类、代理类元信息和JVM加载.jar和代理的机制,整体内容如下图所示: 1.2、javaagent的基石 java.lang.instrument 为javaagent 通过修改方法字节码的方式操作运行在JVM上的程序提供服务。javaagent以JAR包的形式部署,JAR文件清单中的属性指定要加载的代理类,以启动代理。 javaagent的启动方式有以下几种: 通过在命令行指定参数启动。 JVM启动后启动。例如,提供一种工具,该工具可以依附到已运行的应用,并允许在已运行的应用内加载代理。 与应用一起打包为可执行文件。 1.3、启动 javaagent 1.3.1、命令行启动 命令行启动参数如下: -javaagent:<jarpath>[=<options>] <jarpath> :javaagent的路径,比如 /opt/var/Agent-1.0.0.jar 。 <options> : javaagent参数,参数的解析由javaagent负责。 javaagent JAR文件清单必须包含 Premain-Class 属性,属性的值为agent class的全路径名(包名+类名)。代理类必须实现 premain 方法,premain 方法和 main 方法一样分别是代理和应用的入口点。JVM初始化完成后首先调用代理的premain函数,然后调用应用的main函数,premain方法必须返回后进程才能启动。 premain 方法签名如下: public static void premain(String agentArgs, Instrumentation inst) public static void premain(String agentArgs) JVM首先尝试在代理中调用签名为1的方法,如果代理类没有实现签名为1的方法,JVM尝试调用签名为2的方法: 代理类可以有一个 agentmain函数,函数会在JVM启动完成之后调用。如果,使用命令行启动代理,agentmain 方式不会被调用。 代理的所有参数被当作一个字符串通过 agentArgs 变量传递,代理负责解析参数字符串。 如果代理因为代理类无法被加载、代理类未实现 premain 方法或抛出了未被捕获的异常,JVM将会退出。 javaagent的启动不要求实现一定提供命令行的方式,如果,实现支持通过命令行启动,实现必须支持在命令行中通过指定 -javaagent 参数启动。 -javaagent 可以在命令行中使用多次,启动多个代理。premain 函数的调用顺序和命令行中指定的顺序一致,多个代理可以使用相同 <jarpath>。 没有一个严格模型来定义 premain 函数的工作范围,任何 main 函数可以做的工作,比如创建线程,在 premain 函数中都是合法的。

MySQL 查询练习 (含答案)

CREATE TABLE TEACHER ( TNO VARCHAR(3) PRIMARY KEY, TNAME VARCHAR(4) NOT NULL, TSEX VARCHAR(2) NOT NULL, TBIRTHDAY DATE NOT NULL, PROF VARCHAR(6), DEPART VARCHAR(10) NOT NULL ); INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (804,'李诚','男',to_date('1958-12-02','yyyy-MM-dd'),'副教授','计算机系'); INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (856,'张旭','男','1969-03-12','讲师','电子工程系'); INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (825,'王萍','女','1972-05-05','助教','计算机系'); INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (831,'刘冰','女','1977-08-14','助教','电子工程系'); CREATE TABLE STUDENT ( SNO VARCHAR(3) PRIMARY KEY, SNAME VARCHAR(4) NOT NULL, SSEX VARCHAR(2) NOT NULL, SBIRTHDAY DATE, CLASS VARCHAR(5) ); INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS)

Retrofit源码解析三——对接口方法参数注解的处理

private @Nullable ParameterHandler<?> parseParameter( int p, Type parameterType, @Nullable Annotation[] annotations, boolean allowContinuation) { ParameterHandler<?> result = null; if (annotations != null) { for (Annotation annotation : annotations) { //核心就是这一句,实际上就是把前面获取到的参数类型数组与注解数组匹配 ParameterHandler<?> annotationAction = parseParameterAnnotation(p, parameterType, annotations, annotation); if (annotationAction == null) { continue; } if (result != null) { throw parameterError(method, p, "Multiple Retrofit annotations found, only one allowed."); } result = annotationAction; } } if (result == null) { if (allowContinuation) { try { if (Utils.

实质解决方法 Comparison method violates its general contract!

今天遇到一个项目 排序 时不时会报错。 List<Integer> collect = Arrays.asList( array ).stream().sorted( (h1, h2) -> (h1).compareTo( h2 ) >= 0 ? 1 : -1 ).collect( Collectors.toList() ); JDK7中的Collections.Sort方法实现中,如果两个值是相等的,那么compare方法需要返回0,否则 可能 会在排序时抛错,而JDK6是没有这个限制的。 这里网上现有的解决方案有: 3. 解决方法 解决该问题至少有3种方法。 (1)使用JDK1.6版本运行 (2)修改The ONE源码,使其满足传递性 只需要更改Router的比较器Comparator就可以了,比如MaxProp的MaxPropComparator: private class MaxPropComparator implements Comparator { … } (3)重新编译源码 加上一些选项,重新编译The ONE源码,使其能在JDK1.6+能正常运行[1]。 方法一:在main函数第一行加入如下代码: System.setProperty(“java.util.Arrays.useLegacyMergeSort”, “true”); 方法2:编译时,加上选项-Djava.util.Arrays.useLegacyMergeSort=true,完整Java编译如下: java -Djava.util.Arrays.useLegacyMergeSort=true -d64 -Xms512m -Xmx4g -cp .:lib/ECLA.jar:lib/DTNConsoleConnection.jar core.DTNSim $* 我的解决办法: 1、网上也有提到,如果重写了compare方法,需要判断大于,小于,等于; ——————————————— 2、用java的compareTo()方法,让jdk去处理; listRs = list.stream().sorted((n1, n2) -> { BigDecimal value1 = n1.

运行程序提示access violation at address的解决方法

https://www.jb51.net/softjc/55595.html 运行程序提示access violation at address的解决方法 现在把解决方法公布出来: 右击“我的电脑”。单击“属性”。 在“系统属性”中单击“高级”。 在“性能”中单击“设置”。 在“性能选项”中单击“数据执行保护”。 单击“添加”。选择要运行的程序。 OK。就这么简单。

JSP基础语法-九大内置对象

JSP基础语法 1、什么是内置对象? 在Servlet的service方法中有九个局部变量,可以直接拿来使用 1.jsp代码: <%@page contentType="text/html; charset=UTF-8" isErrorPage="true"%> <%-- 关于JSP中的九大内置对象 1、什么是内置对象? 在Servlet的service方法中有九个局部变量,可以直接拿来使用 内置对象的名称 对应的完整类名 ---------------------------------------------------------------------------------- pageContext javax.servlet.jsp.PageContext request javax.servlet.http.HttpServletRequest session javax.servlet.http.HttpSession application javax.servlet.ServletContext response javax.servlet.http.HttpServletResponse out javax.servlet.jsp.JspWriter config javax.servlet.ServletConfig exception java.lang.Throwable page java.lang.Object【this】<几乎不用,就是java.lang.Object page=this;和pageContext无关> --%> pageContext = <%=pageContext %><br> request = <%=request %><br> session = <%=session %><br> application = <%=application %><br> response = <%=response %><br> out = <%=out %><br> config = <%=config %><br> exception = <%=exception %><br> page = <%=page %><br> 2、JSP+Servlet共四个范围对象

论文阅读- Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks

Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer 论文地址:https://arxiv.org/abs/1612.03928 github地址:https://github.com/szagoruyko/attention-transfer published: ICLR 2017 Abstract student CNN 通过模仿teacher CNN的attention map 来提高性能 Introduction One of popular hypothesis: There are non-attentional and attentional perception processes. 当进入一个未知场景后,首先是non-attention,Non-attentional processes help to observe a scene in general and gather high-level information。然后, control the attention processes and navigate to a certain part of the scene. This implies that different observers with different knowledge, different goals, and therefore different attentional strategies can literally see the same scene differently.

Vant-UI移动端(H5)下拉刷新、上拉加载实现简介

相信大家都看到或是做过移动端的下拉刷新、上拉加载的功能需求,之前有人问过我,现在针对vant-UI框架简单介绍下 1、安装、引用 # 通过 npm 安装 npm i vant -S # 通过 yarn 安装 yarn add vant 项目中的引用 import Vue from 'vue'; import Vant from 'vant'; import 'vant/lib/index.css'; Vue.use(Vant) 2、View层 @refresh — —下拉刷新事件@load — — 上拉加载翻页事件:finished — — 数据全部加载完 显示 finished-textloading — — 显示加载中 <van-pull-refresh v-model="isLoading" @refresh="onRefresh"> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> <div class="content" v-for="(item,index) in list" :key="index"> </div> </van-list> </van-pull-refresh> 3、methods(数据处理)

linux命令之ll与ls

ll:罗列出当前文件或目录的详细信息,含有读写权限、大小、时间等信息 ,像Windows显示的详细信息。ll是ls -l的别名。相当于Windows里的快捷方式。可以理解为 ll 和 ls -l 的功能是相同的, ll 是 ls -l 的别名。 ls:仅罗列出当前文件名或目录名 就像Windows里的文件列表。 壹:针对别名 ①:Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便。 如果要使用此命令,可以作如下修改: 打开 ~/.bashrc 找到 #alias ll=’ls -l’,去掉前面的#就可以了。(关闭原来的终端才能使命令生效) 这样个人用户可以使用ll命令,当切换成超级用户后,使用ll命令时提示找不到命令,那是因为你只是修改了个人用户的配置,所以,切换成root后做相同的操作即可解决问题。 启示:我们可以通过修改~/.bashrc添加任何其他的命令别名。 ②:linux 下 实现 ll命令 cd ~ vim .bash_profile 加入: alias ll=‘ls -alF’ alias la=‘ls -A’ alias l=‘ls -CF’ 保存后,执行 source .bash_profile ll 是 ls -l 的别名查看方法,使用:(alias)查看别名情况。 贰:ll结果解读 结果分为7个栏目 第一栏目:表示这个文件的类型与权限,此栏目总10个字符。 第1个字符:代表这个文件是目录、文件或链接文件等 -:普通文件. d:目录,字母”d”,是dirtectory(目录)的缩写. l:符号链接。请注意,一个目录或者说一个文件夹是一个特殊文件,这个特殊文件存放的是其他文件和文件夹的相关信息. b:块设备文件。 c:字符设备文件。 紧接着的3*3个字符分3组,各指示此文件的读、写、执行权限,对于owner、group、others而言。 rwx(Owner)r-x(Group)r-x(Other) r:可读 w:可写 x:可执行 这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。

torch.nn到底是什么?

精简版可参考《torch.nn到底是什么?(精简版)》 PyTorch 提供了设计优雅的模块和类:torch.nn,torch.optim,Dateset 和 DataLoader,以帮助你创建和训练神经网络。为了充分利用它们的功能并且为你的问题定制它们,你需要正真理解它们在做什么。为了逐渐理解,我们首先在 MNIST 数据集上训练基本的神经网络,而不使用这些模块的任何特征。最初只会使用最基本的 PyTorch tensor 功能。然后,我们逐步添加来自 torch.nn,torch.optim,Dataset 和 DataLoader 的一个特征,以显示每一部分的功能,以及它如何使得代码更简洁或灵活。 1、设置MNIST数据 我们将使用经典的 MNIST 数据集,该数据集由手写数字(0-9)的黑白图像组成。 我们将使用 pathlib 来处理路径(Python3标准库的一部分),用 requests 下载数据。只有当我们需要模块的时候才会导入它们,因此你可以清楚地看到正在使用的模块。 from pathlib import Path import requests DATA_PATH = Path("data") PATH = DATA_PATH / "mnist" PATH.mkdir(parents=True, exist_ok=True) URL = "http://deeplearning.net/data/mnist/" FILENAME = "mnist.pkl.gz" if not (PATH / FILENAME).exists(): content = requests.get(URL + FILENAME).content (PATH / FILENAME).open("wb").write(content) 该数据集的格式为NumPy array,使用 pickle 存储。 import pickle import gzip with gzip.open((PATH / FILENAME).

元胞自动机的道路交通模拟

元胞自动机的道路交通模拟 1.直行单行道--概率P进入研究区域道路交通模拟元胞自动机原理:直行单行道代码模拟: 2.直行交叉口(含红绿灯)--概率P进入研究区域道路交通模拟交叉口原理:交叉口代码模拟: 3.小区道路开放前的三角形道路模拟:解释: 4.小区道路开放后的三角形道路模拟:解释: 5.其它类型小区示意图(可根据上面描述及自己的创新拓展) 1.直行单行道–概率P进入研究区域道路交通模拟 元胞自动机原理: 元胞自动机(cellular automata,CA) 是一种时间、空间、状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。 直行单行道代码模拟: 车辆以一定的概率进入车道内,当车辆前后距离较近时,车速为V1。当车辆前后距离较远时,车辆为V2,V2>V1; 参考示意图: 下面展示一些 内联代码片。 %直行进入研究区域 %function []=in_yuanbao(p,long) %p 车辆驶入的概率 %long 道路长度 m %n执行的步长 为1000次 p=20; long=500; n=1000; L=zeros(1,long/5+1); V=zeros(1,long/5+1); flag=0;%flag 用于判断是否有车在等待区即将离开该区域 a=0; figure(); H=imshow(L,[]); set(gcf,'position',[241 132 560 420]) ;%241 132 560 420(设定plot输出图片的尺寸) set(gcf,'doublebuffer','on'); %设定为双缓冲模式 title('元胞自动机交通模拟','color','b'); for i=1:n flag=L(1,long/5+1); if p>=rand(1)*100 L(1,1)=1; end %速度设定 V(1,L(1,1:end-2)==1&L(1,2:end-1)==0&L(1,3:end)==0)=2; V(1,L(1,1:end-2)==1&L(1,2:end-1)==0&L(1,3:end)==1)=1; V(1,L(1,1:end-2)==1&L(1,2:end-1)==1)=0; if flag==1 a=a+1; flag=0; L(1,long/5+1)=0; V(1,long/5)=0; elseif L(1,long/5)==1; V(1,long/5)=1; end L([zeros(1,1) V(1,1:end-1)]==1)=1; L([zeros(1,2) V(1,1:end-2)]==2)=1; L(V(1,1:end)==2|V(1,1:end)==1)=0; %L(1,(V(1,1:end)==2)+2)=1; %L(1,(V(1,1:end)==2)+1)=0; %L(1,V(1,1:end)==1+1)=1; V=zeros(1,long/5+1); set(H,'CData',L); pause(0.

Node:找不到模块Error: Cannot find module

问题 安装完模块 npm install -g crypto-js 导入模块报错 var CryptoJS = require("crypto-js"); // 运行报错 Error: Cannot find module 'crypto-js' 解决 查看安装路径 $ npm prefix -g # node安装路径 /Users/xxx/.nvm/versions/node/v10.16.0 $ npm -g root # 查看依赖安装路径 /Users/xxx/.nvm/versions/node/v10.16.0/lib/node_modules 通过 module.paths 查看模块查找列表,发现都没有 console.log(module.paths) [ '/Users/xxx/Desktop/node_modules', '/Users/xxx/node_modules', '/Users/node_modules', '/node_modules' ] 解决 方案1:直接使用模块绝对路径 var CryptoJS = require("/Users/xxx/.nvm/versions/node/v10.16.0/lib/node_modules/crypto-js"); 方案2:将node_modules 路径添加到模块查找路径列表 module.paths.push("/Users/xxx/.nvm/versions/node/v10.16.0/lib/node_modules") var CryptoJS = require("crypto-js"); 方案3:添加NODE_PATH环境变量 $ vim ~/.bash_profile # nodepath export NODE_PATH="/Users/xxx/.nvm/versions/node/v10.16.0/lib/node_modules" sublime下使用方案3,没有成功,文件~/.bash_profile 的变量都没有导入 参考 nodejs require模块找不到怎么解决?

android 从layout中动态获取组件id

LayoutInflater flater = LayoutInflater.from(this); View view = flater.inflate(R.layout.example, null); 获取布局中的控件。 button = (Button) view.findViewById(R.id.button); textView = (TextView)view.findViewById(R.id.tview);

此内容不能显示在一个框架中的原因

此内容不能显示在一个框架中的原因 想使用iframe嵌套一个网站 结果提示是这个 原因是 对方网站设置了 X-Frame-Options: sameorigin posted on 2019-08-30 15:55 baker95935 阅读( ...) 评论( ...) 编辑 收藏 转载于:https://www.cnblogs.com/baker95935/p/11435388.html

论文记录:Translation-based Recommendation

Inspired by graph embedding, which models transition(edge) embedding as a vector. Basic idea is to model user’s sequential item-selection behavior as embedding vectors’ addition, where i, j are user-chosen item and the next to-predict item, u is user. In order to solve cold-start problem, this paper replace tu with: Here, t is average embedding of all users, tu is personalized offset (similar to residual). When a new user appears in recommendation system, tu is 0, Tu = t is used.

Android资源管理框架-------之总述(一)

我们知道对于一个APK而言,主要就两部分:DEX字节码和资源。其中,为了让开发者在不同的环境下更加方便地管理和使用资源,Android专门提供了一套资源管理的框架。关于Android的资源,我们在Android资源管理概述中有过简单描述,网上也有大量介绍,我们就不再赘述。 本篇,我们先介绍一下这个框架(因其主要接口封装在AssetManager这个类中,我们就叫这个框架AssetManager了,后面不再说明)的基本概念和常识。 功能 Android资源管理框架(AssetManager)主要负责资源的加载、组织、管理等,并对上层提供这些功能相关的接口。其中资源的加载包括对APK包中资源相关的文件的读取、解析,比如resources.arsc文件的加载、Asset资源的打开等等;资源的组织,主要是指一些资源相关的信息被加载到内存中后,这些信息是如何存放的,放在哪些数据结构中;资源的管理则包括我们对于已经加载的这些资源信息的获取,资源包的添加等等。 核心文件 Android资源管理框架(AssetManager)涉及到的核心文件包括: frameworks/base/core/java/android/content/res/Resources.java这个是我们经常使用的Android资源管理的框架的接口类,它封装了Android资源管理的大部分功能。比如资源相关信息的获取、资源文件的打开、具体资源的创建、Theme相关的接口等等。frameworks/base/core/java/android/content/res/AssetManager.java AssetManager.java是比Resources.java更低级的资源管理相关的接口。Resources.java中的很多方法就是对AssetManager.java的封装。frameworks/base/core/jni/android_util_AssetManager.cpp及其头文件 AssetManager.java中的绝大多数逻辑是在native层实现的,所以就有了这个JNI层。frameworks/base/libs/androidfw/AssetManager.cpp及其头文件 AssetManager.cpp是AssetManager.java在native层的具体实现,同时会持有AssetManager.cpp中AssetManager对象的地址。frameworks/base/libs/androidfw/ResourceTypes.cpp及其头文件 ResourceTypes.cpp里包括了与resources.arsc和内存中资源相关信息的大量数据结构,同时大部分资源管理相关的逻辑也在这里实现,可以说是Android资源管理模块中最重要的文件。frameworks/base/cmds/idmap目录下的文件 idmap的概念和功能我们在Android资源管理中的Runtime Resources Overlay-------之概述(一)系列文章中已经做过详细介绍,有兴趣的同学可以瞧瞧。这里只是简单说一下,它主要用来生成RRO(Runtime Resources Overlay)需要的关键信息,也就是idmap文件。 调用关系如下图: 上面的这些文件,是Android资源管理最核心的代码所在。另外,frameworks/base/libs/androidfw/Asset.cpp、frameworks/base/libs/androidfw/AssetDir.cpp framewrok/base/core/java/android/content/res/TypedArray.java、framework/base/core/java/android/util/TypedValue.java、frameworks/base/core/java/android/app/ResourcesManager.java等要么是一些工具类,要么是对Resources.java等的封装,这里就不作为核心文件介绍了。 组织形式 这个要从三个方面说,它们分别是:resources.arsc、R.java、以及资源信息加载到内存后的组织形式。 resources.arsc 通俗的叫法是资源索引表,它是在aapt编译android资源的时候生成的,用来存储一部分资源以及一些资源相关的信息。这个怎么理解呢,对于raw、图片以及xml类型的资源resources.arsc里会存储它们的路径信息,而对于values类型的资源,比如string、style、integer、dimen、attr、color、array等等,它们会被直接编译到resources.arsc文件中。另外,resources.arsc中还会记录Dynamic Reference信息,用来处理资源共享库。resources.arsc中资源的管理分三级:Package、Type、Entry(MapEntry也是Entry就不再单独列出了)。另外,ResStringPool也是不得不提的一个数据结构,一般一个APK的resources.arsc中会有三个string pool:global string pool、type string pool和key string pool。global string pool也叫value string pool,它主要用来存储string资源中的string、xml和raw以及图片资源的途径等等;type string pool主要用来存储我们的资源的类型字符串的,比如attr、style、integer、dimen等等;key string pool主要用来存储我们的资源项的名称的。这里举个例子就很清楚了: <!--values目录--> <resources> <string name="app_say_hello">Hello</string> </resources> <!--values-zh-rCN目录--> <resources> <string name="app_say_hello">你好</string> </resources> 假设我们在values和values-zh-rCN目录分别给一个字符串资源app_say_hello赋了英文和中文的值。那么在编译后生成的resources.arsc中,"Hello"和"你好"这两个字符串会被放到 global string pool中;资源的类型字符串"string"会被放到type string pool中;"app_say_hello"这个表示我们资源的名字的字符串会被放到key string pool中。 介绍resources.arsc的文章,网上有很多,建议大家先去看看,对它有个总体的了解。毕竟Android对资源的管理,核心就是对resources.arsc的加载和处理。看情况吧,如果有时间,我们也会单开一篇文章来详细介绍一下resources.arsc。 R.java 也是在aapt编译资源的时候生成的,它的本质就是resources.arsc中的部分资源的索引,也就是说,我们通过R文件来访问资源,是基于索引的,所以速度会很快,当然我们也可以基于文件名来访问,那效率就低多了,所以Android并不推荐这么做。我们知道R.java文件中的字段都是int类型的,它会对应一项具体的资源(更准确地说是一个Res_entry)。R.java中的资源索引值的每个字节的含义大家应该都知道,这里再啰嗦一下哈:第一个字节表示包id,通常我们的一般应用都是0x7f,android系统资源包的id是0x01,mtk的系统资源包的id是0x08,通常各个手机厂商也会加入自己的系统资源包,具体值可能会有所不同,0x00表示资源共享库(关于资源共享库的概念和详细介绍请移步Android资源管理中的SharedLibrary和Dynamic Reference-------之资源共享库(一));第二个字节表示type,比如这个资源是style、drawable还是attr;第三个和第四个字节在一起表示资源在该type中的索引。由于R.java和resources.arsc都是aapt在编译资源的时候生成的,所以它们资源的组织形式都是Package、Type、Entry,是一致的。资源信息加载到内存后的组织形式 在一个APP起来后,它会去加载这个apk本身的资源信息(系统资源信息zygote已经预先加载过了)。注意我们说的是资源信息,而不一定是资源本身,这里的资源信息就是指resources.arsc。当resources.arsc被加载后,Android资源管理框架为了方便对资源的管理,也创建了一系列的数据结构,来描述和管理这些信息,它们大部分被定义在frameworks/base/include/androidfw/ResourceTypes.h中,一小部分被定义在frameworks/base/lib/androidfw/ResourceTypes.cpp中,它们主要是:ResTable、ResTable::PackageGroup、ResTable::Package、ResTable::TypeList、ResTable::Type、ResTable::Entry以及ResStringPool和Res_value。相比Package、Type、Entry三级数据组织结构来说复杂了不少,主要是因为Package、Type、Entry用于描述单个资源包尚可,但资源包比较多的时候,就有些力不从心了。我们知道,一个APK运行起来后至少要加载Android系统资源包framework-res.apk以及它本身这个APK中的资源(绝大多数手机还会加载SOC厂商以及手机厂商的资源包,如果有资源共享库和RRO包,要加载的资源包会更多),这样要完整地描述一个应用,三级数据结构显然不够。一个ResTable中可以放多个ResTable::PackageGroup,一个ResTable::PackageGroup中可以放多个ResTable::Package。这里大家可能不太理解,一个ResTable中直接放多个ResTable::Package不就可以了,为啥还要有ResTable::PackageGroup呢? 其实,ResTable::PackageGroupde的存在主要是为了RRO,overlay package会和target package放到同一个ResTable::PackageGroup中,另外ResTable::TypeList的存在也同样是为了RRO,overlay package和target package中相同类型的资源会被放到同一个ResTable::TypeList中。另外,Res_value表示一项资源的值,不过这个值不一定是具体的值,它可以是另外一个资源的索引或者叫作另外一个资源的引用,比如: <resources> <color name="

python简单面试题

在这个即将进入金9银10的跳槽季节的时候,肯定需要一波面试题了,安静总结了一些经常遇到的python面试题,让我们一起撸起来。 python面试题 1、求出1-100之间的和 # coidng:utf-8 a = 0 for i in range(0,100): a += (i+1) print(a) 5050 # 也可以使用函数sum sum = sum(range(1,101)) print(sum) 5050 2、冒泡排序 a = [1,6,4,2,67,32] l = len(a) for i in range(l): for j in range(l-1): if a[l-j-1]<a[l-j-2]: a[l-j-1],a[l-j-2] = a[l-j-2],a[l-j-1] for i in range(l): print(a[i]) # 代码结果 1 2 4 6 32 67 3、数字排序 一看就是冒泡排序。这次我们用函数 a = [1,6,4,2,67,32] m = sorted(a) print(m) # 代码结果 [1, 2, 4, 6, 32, 67]

DSP开发笔记一

前言 ​ 本笔记首先对DSP的特点及其选型进行了描述,然后重点记录DSP开发环境的搭建及基础工程示例,对为DSP开发新手有一定的指导作用。 1. DSP简介 1.1 主要特点 在一个指令周期内可完成一次乘法和一次加法;程序和数据空间分开,可以同时访问指令和数据;片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;具有低开销或无开销循环及跳转的硬件支持;快速的中断处理和硬件I/O支持;具有在单周期内操作的多个硬件地址产生器;可以并行执行多个操作;支持流水线操作,使取指、译码和执行等操作可以重叠执行。 1.2 主要厂商 TI 面向数字控制、运动控制的TMS320C2000系列;面向低功耗、手持设备、无线终端应用的TMS320C5000系列;面向高性能、多功能、复杂应用领域的TMS320C6000系列 ADI 21xx系列:16位定点dsp,主要以218x和219x系列为代表,性能优异,内部RAM大,外围接口多,适合作为控制类芯片使用;SigmaDSP:完全可编程的单芯片音频DSP;blackfin系列:ADI最新推出的一款dsp,是高性能16位DSP信号处理能力与通用微控制器使用方便的性能结合;SHARC 系列:32位浮点dsp,包括前期的2106x系列,和目前的主力21160,21161系列,提供与大内存容量结合的简单浮点算法,具有高水平的浮点性能;TigerSHARC系列:从SHARC系列发展而来,比SHARC具有更高的浮点运算功能; 其他 Motorola:定点DSP 处理器MC56001,浮点DSP芯片MC96002;Freescale(Nxp):MSC8xx系列,DSP56Fxx; 国产 进芯电子:仿TI的c2000系列; 1.3 DSP性能参数 运算速度 MIPS:百万条指令/秒,定点DSP芯片运算速度的衡量指标。MOPS:百万操作/秒,通常操作包括CPU操作外,还包括地址计算、DMA访问数据传输、I/O操作等。一般说MOPS越高意味着乘积-累加和运算速度越快。MOPS可以对DSP芯片的性能进行综合描述。MFLOPS:百万次浮点操作/秒,这是衡量浮点DSP芯片的重要指标。ACS:指令周期,即执行一条指令所需的时间,通常以ns(纳秒)为单位。FFT/FIR执行时间:运行一个N点FFT或N点FIR程序的运算时间,该指标可以作为衡量芯片性能的综合指标。 运算精度 16位、32位定点:动态范围小,需要注意定标及溢出,功耗低,成本低;32位浮点:动态范围大,编程相对简单一些,功耗高; 1.4 DSP选型其他因素 外设、特定功能需求 如:同步/异步串口、A/D、D/A、以太网、音频处理等;片内存储 DSP片内存储器可用来放程序和数据;封装、功耗 一般定点功耗较低,当然也有低功耗版浮点dsp但其速度很低; QFP封装对底板要求较低,BGA封装需求多层板; 初次选型建议: 最先考虑C2000系列,如果满足需求,选型型号: TMS320F28335(支持FPU,150MHz,100元左右); 其次考虑C674X系列,如TMS320C6747(375~456-MHz,3648 MIPS and 2736 MFLOPS,100元左右); 2. DSP基础开发 从初版学习开发考虑,建议选用TI的DSP,其资源和技术支持均非常成熟。 2.1 开发环境 TI 开发工具 CCS(Code Composer Studio),提供免费版本。编程语言 汇编语言和C语言。仿真器 XDS100、XDS110、XDS200、XDS560等,通常使用性价比较高的XDS100即可。软件库 c2000系列:controlSUITE、C2000Ware(新版) 其他:有对应的sdk,如TMS320C6747,提供 PROCESSOR-SDK-C6747(包含TI-RTOS) ADI 开发工具 VISUAL DSP++,提供90天测试版(正版2w左右,每个系列对应一个版本)。编程语言 汇编语言和C语言。仿真器 不同系列仿真器不同; 一般低性能版2000元左右;软件库 Technical Library 2.2 DSP开发环境搭建(TI) 本章搭建示例基于c2000系列,主要为裸机开发,资源有限不建议运行OS,其他系列可参考搭建。 CCS安装 经实际测试ccs版本选择应注意以下事项:

学习Python总是学了新内容又忘了旧的咋办?

学习Python总是学了新内容又忘了旧的咋办? 比如爬虫的几个解析库,学了pyquery后感觉beautifulsoup又有点忘了,只能大概记得有哪些功能,xpath感觉基本忘光了,最近看了一些selenium的说明文档,感觉也是脑袋里乱乱的,用起来还要到网上查。 1、不仅仅是学习Python,任何一门知识都是,记忆差是学习的大敌。 很多初学者在接触新知识的时候都会给自己很大的压力,这种“习惯性压力思维”从人很小的时候就已经存在了,学习识字的时候,家长们往往最头疼的就是孩子今天学十个字,明早睡醒只记得两三个了;被四级折磨的时候应该也是经常遇到这种情况。 那我们当时是怎么看待这件事的呢? · 这是一件长期积累和坚持的事情,没办法一口吃个胖子; · 这是一个需要反复回顾、早中晚刷记忆、日常要运用的事情; · 这是一个从背单词、背句子到写作文、互动对话的过程; 那么对于Python学习呢? 首先要明确一点。Python也是一种语言! 所以: · 这是一件长期积累和坚持的事情,没办法一口吃个胖子; · 这是一个需要反复回顾、早中晚刷记忆、日常要运用的事情; · 这是一个从查文档、查资料到写代码、理论知识与实际问题相互交互的过程; 哪个程序员在刚开始的时候不查文档?问题的关键是“需求和逻辑要是自己的。” 需求:为什么要运用这个理论来实现?为什么要用这个思路去解决这个问题?除此之外还有没有其它的方法思路来实现? 逻辑:这个代码走下去会实现什么?代码的流程逻辑图应该是什么样的?如果你的大脑运转得不到结果,那电脑肯定也算不出来。 2、同时理论和项目同样重要。 增加实操,多找一些实战项目,自己去做一遍,从头到尾操作一遍。 不要盲目的刷书、刷视频,一定要多以开发的角度去练习实操,而不是搬运代码。最好是可以找到自己感兴趣的点,去上网找查一下项目进行练手。比如: 自己动手写爬虫,获取知乎的数据?(手动狗头) 使用scrapy框架实现可商用的爬虫? 数据分析、抓取、可视化? 机器学习、数据挖掘? 3、最关键的一点,要有“输出型学习的思维”。 去博客、论坛、网站、问答平台、同行交流群等等,进行输出文章、答案,让自己身处在一个老师的位置上,去重新复述学的知识。 把这些东西做起来,不管是学习、找工作、建立人脉等等不都会很轻松吗? 小白免费课?——各类公开课+新手免单券+免费交流群+各式新手资料; 学了就忘了?—— 反复观看+上万题库+在线编程+实战演练; 遇到难题不会解决?——24小时老师在线答疑,群内学员协商讨论; 想积累人脉?——专业社区、千人QQ群,五湖四海扩大属于自己的程序圈; 求职面试不知道如何做答?——全方位面试答疑+上百学员真实面经分享; 如果你愿意,现在就可以一起来见证。即可报名参加《机器学习集训营第十期》!从零开始,培养中高级机器学习工程师! 4、好好的教导Python学习方法,为什么突然之间要我报课,推荐学习机器学习呢? 因为确确实实机器学习迎来了行业的急速增长期,既能跟随最前沿的互联网科技进行探索,又能解决收入问题,何乐而不为呢? 如今,人工智能火爆全球并快速切入各个领域,比如电商、金融、交通、安防、医疗、教育,国内外各大公司纷纷成立相关AI研究院,火速招兵买马,可目前市面上人才缺口严重不足,供需比例仅为1:10。 机器学习作为AI的核心技术,可谓掌握了机器学习,便跨过了AI的准入门门槛。迄今为止,专为找AI或转行AI量身定做的「机器学习集训营」已经举办了九期,每一期都涌现出了很多offer,纷纷从Java、Android、iOS等传统IT行业成功转行转型转岗AI拿到年薪三四十万,部分甚至超过四十万拿到五十万,有的已到年薪百万。 5、看到这里的同学肯定有疑问了,工资这么高,每个人都可以来学吗?我0基础、甚至不是计算机专业怎么办? 什么叫从零开始?这门课到底适合哪些人来学? a、在校学生 学习编程,锻炼逻辑思维、为职业发展做铺垫。 b、数学/统计学/物理专 学过数学、大数据收集或分析、统计学、物理学等,是学这门课的合适人选。 c、无编程基础、对编程感兴趣 对编程感兴趣、但零基础,不知道入门选择什么编程语言的同学。 d、上升瓶颈的职场人士 重复的事情简单做,学会用 Python 提升工作效率,突破瓶颈。 6、为什么一定要报班学呢?我在家自学不可以吗? 首先,自学是肯定可以的!但是,同学们自己想一下,靠自学拿到offer,困难有多大?需要拿出多长时间来自学呢? 要明白,对于这个年龄来说,时间成本 》金钱成本,而且是远远大于。一旦工作确定,提前一个月那就是几万块钱的收入增长!更不用说工作一个月本身带来的成长和技术本身的日新月异的发展。 7、自学和系统的学习之间差的最大的是什么? 小白免费课?——各类公开课+新手免单券+免费交流群+各式新手资料; 学了就忘了?—— 反复观看+上万题库+在线编程+实战演练; 遇到难题不会解决?——24小时老师在线答疑,群内学员协商讨论; 想积累人脉?——专业社区、千人QQ群,五湖四海扩大属于自己的程序圈; 求职面试不知道如何做答?——全方位面试答疑+上百学员真实面经分享; 既有学习效率、技术的时效性、老师的沟通,又有学员之间人脉的积累、眼界的增长,实战经验的积累,其中最重要的自然还是实战经验的积累。 在行业内经常有一句话流传,“表面看薪资是根据你工作年限来定的,其实是根据你的项目经验来定的。”那“工作年限”到底有多重要呢?自然是面试邀请欢迎程度和薪资两方面体现了:

配置bc4作为git比对合并工具

前言:在.git文件中含有一个config文件,这个文件中包含了git的配置信息 文件配置信息: [diff] tool = bc4 [difftool] prompt = false [difftool "bc4"] cmd = "\"D:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"" [merge] tool = bc4 [mergetool] prompt = false [mergetool "bc4"] cmd = "\"D:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"" 使用: 文件对比: git difftool <filename> 文件合并: git mergetool 转载于:https://www.cnblogs.com/GHzcx/p/11428330.html

java 抽象类为什么不能被实例化?

转载:java 抽象类为什么不能被实例化? 我把CSDN论坛里面的一个帖子内容list到下面,自己看着理解,东家一言,西家一语,杂合起来,基本上也就理解了java中的抽象类为什么不能被实例化了。 因篇幅有限,只能罗列部分留言 以下内容不分先后顺序 ===================================== 抽象类只在分配了在栈中的引用,没有分配堆中的内存。程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化 ===================================== 哲学角度,抽象基类往往在逻辑上无法实体化,比如说让别人去买水果,不说买什么,就说买水果,显然是买不到一种叫“水果”的东西的。 ===================================== 主要是两点,一个是抽象类是一个不完整的类,一个是内存分配问题。 实际上抽象类更多提供的是一个框架的功能,参数比接口更详细些。 ===================================== 本末倒置了 抽不抽象是设计时该考虑的问题,不能问为什么抽象类不能实例化 因为在设计时,考虑到某些类所具备的信息不足以实例化一个对象,才设计成抽象的 所以问题反过来就是答案: 因为这个类不能够被实例化,所以才设计成抽象的,至于为什么这么做,问你的设计师吧,他也许会给出你答案 不过设计师的脾气都不太好,给你一棒子叫你照着做就行了也是有可能的 ===================================== 抽象类,就像是向别人声明:我能赚大钱 实例化就是具体的行动 因为抽象类只是个声明,而没有计划,也不知道怎么赚钱 所以我们是不会投资给钱(内存)他的,就算投资他他也不能做任何事 为了保存大家的利益,没有具休的赚钱计划不能让他执行 ===================================== 不仅JAVA,其他任何语言都一样~这是由语言的设计决定了的,就是纯粹为了继承而存在 ===================================== 抽象这个词已经很好的说明这一点了,我的理解是:对事物进行抽象通常是基于一定的经验,从众多的经验中总结出规律,浓缩的结果可以在以后多次获利,但是经验并不能真正帮你工作,你还是需要融入实践应用! ===================================== 学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化 ===================================== 面向对象思想是对现实社会的模拟(抽象),从哲学上讲进化不完全的物种是不能生存的! ===================================== 这是从设计思想层面的东西,为什么要纠结这个问题呢? 说白一点,这就是java的使用规范. ===================================== 如果你是一个老板,你问一个应聘的人员:你会什么?他给你一个“我不知道”的答案,你会怎么做!! 这个例子视乎能更现实的说明你的这个问题。面向对象语言是从现实中抽象出来的,它该符合正常的逻辑秩序。 ===================================== Java中是允许不含抽象方法的抽象类的,我认为应该是出于安全的考虑,编译器强制规定不允许抽象类产生对象! ===================================== java里这么规定的,原因我个人认为是抽象类里有未实现的抽象方法,实例化时不能正常分配内存吧,而且调用这个方法时不是要出异常吗 参考 讨论一下:Java中的抽象类到底为何不能实例化?

[20190827]函数索引与选择率.txt

[20190827]函数索引与选择率.txt --//一般情况下查询条件使用函数,选择率1%.如果建立虚拟列并且分析的情况下,能够获得比较准确的选择率。 --//如果建立对应的函数索引呢,情况会怎么呢?最近遇到的问题,让我注意其中一些细节。 1.环境: SCOTT@test01p> @ ver1 PORT_STRING VERSION BANNER CON_ID ------------------------------ -------------- -------------------------------------------------------------------------------- ---------- IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0 SCOTT@test01p> create table t1 as select rownum id,dbms_random.string('U',10) v1 from dual connect by level<=1e4; Table created. --//分析略.Method_Opt => 'FOR ALL COLUMNS SIZE 1 ' SCOTT@test01p> select * from t1 where rownum=1; ID V1 ---------- -------------------- 1 KCIXTFQWHZ 2.测试: SCOTT@test01p> alter session set statistics_level = all; Session altered.

Android 护眼模式的实现

思路:获取content根布局,在上面添加一层浮层,默认透明,开启护眼模式设置护眼色值。 实现:在BaseActivity的onCreate方法中,添加浮层,所有的Activity继承BaseActivity即可 步骤1: /** * 添加护眼模式浮层 */ protected void initEye() { content = ((ViewGroup) findViewById(android.R.id.content)); view = new FrameLayout(this); view.setBackgroundColor(Color.TRANSPARENT); WindowManager.LayoutParams params = new WindowManager.LayoutParams(); params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; params.width = WindowManager.LayoutParams.MATCH_PARENT; params.height = WindowManager.LayoutParams.MATCH_PARENT; // ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); content.addView(view, params); } /** * 开启护眼模式 */ public void openEye() { view.setBackgroundColor(getFilterColor(30)); } /** * 关闭护眼模式 */ public void closeEye() { view.setBackgroundColor(Color.TRANSPARENT); } /** * 过滤蓝光 * * @param blueFilterPercent 蓝光过滤比例[10-30-80] */ public int getFilterColor(int blueFilterPercent) { int realFilter = blueFilterPercent; if (realFilter < 10) { realFilter = 10; } else if (realFilter > 80) { realFilter = 80; } int a = (int) (realFilter / 80f * 180); int r = (int) (200 - (realFilter / 80f) * 190); int g = (int) (180 - (realFilter / 80f) * 170); int b = (int) (60 - realFilter / 80f * 60); return Color.

设置 input type="radio" 单选按钮的样式

编写单选按钮的样式,使样式更加美观 效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> <style type="text/css" media="screen"> .RadioStyle input{ display:none; } .RadioStyle label{ border:1px solid #ccc; color:#666; padding:2px 10px 2px 5px; line-height:28px; min-width:80px; text-align:center; float:left; margin:2px; border-radius:4px; } .RadioStyle input:checked+label{ background:url('img/Img/ico_checkon.svg') no-repeat right bottom; border:1px solid #00a4ff; background-size:21px 21px; color:#00a4ff; } </style> </head> <body> <div class="RadioStyle"> <input type="radio" name="styleType" id="rdo_white" value="White" checked/> <label for="rdo_white">白底</label> <input type="radio" name="styleType" id="rdo_black" value="black" > <label for="rdo_black">黑底</label> <input type="

Eigen 矩阵相关运算函数

https://www.cnblogs.com/python27/p/EigenQuickRef.html 中文的: https://blog.csdn.net/Zzhouzhou237/article/details/105078647

[20190826]update结果集2.txt

[20190826]update结果集2.txt --//补充对结果集的修改。以前做过类似测试,链接: --//http://blog.itpub.net/267265/viewspace-2139049/ 1.环境: SCOTT@test01p> @/ver1 PORT_STRING VERSION BANNER CON_ID -------------------- ---------- ---------------------------------------------------------------------------- ------ IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0 create table t1 ( id number ,name varchar2(20)); insert into t1 values (1,'a'); insert into t1 values (2,'b'); insert into t1 values (3,'c'); insert into t1 values (4,'d'); create table t2 ( id number ,name varchar2(20)); insert into t2 values (2,'bb'); insert into t2 values (3,'cc'); 2.

[20190825]Join View and delete.txt

[20190825]Join View and delete.txt --//看了链接https://jonathanlewis.wordpress.com/2019/08/20/join-view/,里面提到delete可能引起的错误,自己也测试看看. --//顺便说一下,我自己也在维护中也喜欢这样方式,但是我从来不是多表连接操作.我一般操作单表. 1.环境: SCOTT@test01p> @ ver1 PORT_STRING VERSION BANNER CON_ID -------------------- ---------- ---------------------------------------------------------------------------- ------ IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0 create table source as select level n1 from dual connect by level <= 10 / create table search as select level n1 from dual connect by level <= 10 / alter table source modify n1 not null; alter table search modify n1 not null; create unique index search_idx on search(n1); -- create unique index source_idx on source(n1); --//分析略.

JUC中的FutureTask

package JUC; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * RunnableAndCallable两个类的比较 * @author YEXIN * */ /** FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask, 直接调用其run方法或者放入线程池执行,之后可以在外部通过FutureTask的get方法异步获取执行结果, 因此,FutureTask非常适合用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。 另外,FutureTask还可以确保即使调用了多次run方法, 它都只会执行一次Runnable或者Callable任务,或者通过cancel取消FutureTask的执行等。 1. FutureTask执行多任务计算的使用场景 利用FutureTask和ExecutorService,可以用多线程的方式提交计算任务,主线程继续执行其他任务, 当主线程需要子线程的计算结果时,在异步获取子线程的执行结果。 2. FutureTask在高并发环境下确保任务只执行一次 在很多高并发的环境下,往往我们只需要某些任务只执行一次。这种使用情景FutureTask的特性恰能胜任。 举一个例子,假设有一个带key的连接池,当key存在时,即直接返回key对应的对象;当key不存在时, 则创建连接。对于这样的应用场景,通常采用的方法为使用一个Map对象来存储key和连接池对应的对应关系 * */ public class RunnableAndCallable { class MyThread2 implements Runnable{ @Override public void run() { System.out.println("come in Runnable1"); } } class MyThread implements Callable<Integer>{ @Override public Integer call() throws Exception {//实现call方法 System.out.println("come in Callable1"); return 200;//有返回值 } }

使用yocto工具编译qt5.9.6总结

运行平台:OKMX6DL-C 编译平台:Ubuntu 14.04.6 LTS 编译工具:arm-poky-linux-gnueabi-gcc(gcc version 5.3.0 (GCC) ) qt源码:qt-everywhere-opensource-src-5.9.6.tar.xz 参考: 嵌入式开发之Qt-5.9.6交叉编译(带WebEngine) QT官网关于交叉编译说明 g++: internal compiler error: Killed (program cc1plus) 解决办法 第4篇 交叉编译Qt 5.4.0 安装 SDK: 资料:飞凌开发板提供的OKMX6X-C_Linux4.1.15 用户资料\Linux\工具\fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-neon-toolchain-4.1.15-2.1.0.sh (1)将fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-neon-toolchain-4.1.15-2.1.0.sh拷贝到虚拟机任意目录 ,执行: ./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-neon-toolchain-4.1.15-2.1.0.sh 默认将会安装到/opt/fsl-imx-x11/目录下(这里安装到了/opt/fsl-imx-x11/4.1.15-2.1.0/)。 安装完成后 /opt/fsl-imx-x11/4.1.15-2.1.0/ 目录结构如下: lin@ubuntu:/opt/lin$ ls environment-setup-cortexa9hf-neon-poky-linux-gnueabisite-config-cortexa9hf-neon-poky-linux-gnueabi sysroots version-cortexa9hf-neon-poky-linux-gnueabi environment-setup-cortexa9hf-neon-poky-linux-gnueabisite-config-cortexa9hf-neon-poky-linux-gnueabi 是环境初始化脚本。 (2)环境变量(注意空格): . /opt/lin/environment-setup-cortexa9hf-neon-poky-linux-gnueabisite-config-cortexa9hf-neon-poky-linux-gnueabi (3)译器是否安装成功: arm-poky-linux-gnueabi-gcc -v 安装依赖库 sudo apt-get install gcc-multilib g+±multilib sudo apt install pkg-config sudo apt install pkgconf 解压qt源码 $ xz -d qt-everywhere-opensource-src-5.9.6.tar.xz #解压文件 $ tar xvf qt-everywhere-opensource-src-5.

/lib64/libm.so.6: version `GLIBC_2.23' not found

出现 /lib64/libm.so.6: versionGLIBC_2.23’ not found` 需要升级Glibc 升级 Glibc 前置 yum -y install bison 升级 make 参考 https://blog.csdn.net/EI__Nino/article/details/100090783 libc 下载列表 http://mirrors.nju.edu.cn/gnu/libc/ 安装glibc 需要在源码路径建立 build 文件夹 # http://mirrors.nju.edu.cn/gnu/libc/ cd download wget http://mirrors.nju.edu.cn/gnu/libc/glibc-2.30.tar.xz xz -d glibc-2.30.tar.xz tar -xf glibc-2.30.tar mkdir build cd build ../configure --prefix=$HOME/local make make install 安装完后,看看是不是包含缺少的库 strings $HOME/download/glibc-2.30/build/math/libm.so.6 | grep GLIBC_2.23 GLIBC_2.23 lgammal@@GLIBC_2.23 lgammaf@@GLIBC_2.23 lgamma@@GLIBC_2.23 GLIBC_2.23 然后将 原来的 libm.so.6 ln 到这个 so 上 /lib64/libm.so.6 最好先备份一下再link。 sudo rm /lib64/libm.so.6 sudo ln -s $HOME/download/glibc-2.

width:100%与width:auto的区别

在布局中,width:100%和width:auto都会经常用到,那么,二者究竟有何区别呢?下面就来探讨下。 先上代码 <style> * { margin: 0; padding: 0; } .parent { width: 800px; margin: 50px auto; border: 2px solid red; } .child1 { background: orange; } .child2 { width: 100%; background: blue; } .child3 { width: auto; background: green; } </style> <body> <div class="parent"> <div class="child1">看看我的宽度</div> <div class="child2">看看我的宽度</div> <div class="child3">看看我的宽度</div> </div> </body> 可以看到,元素在不设置padidng和margin的情况下,width:100%和width:auto表现一样,都是继承自父级的宽度。元素的默认宽度是 width:auto。 但是,设置了padding和margin后,表现则大不相同: .child2 { width: 100%; margin-left: 100px; padding-left: 100px; background: blue; } .child3 { width: auto; margin-left: 100px; padding-left: 100px; background: green; } 可以看出child2溢出父元素,child3则没有。原因是什么呢?

Ubuntu修改用户名导致密码无效问题

很多使用ubuntu的小伙伴可能会想要修改自己的用户名。在修改用户名过程中,如果你没有切换到root权限,而只是执行sudo vim /etc/passwd,那么在修改了/etc/passwd这个文件中的用户名部分、用户组部分和主目录部分之后,如果你退出了,那么修改了用户名之后与密码无法匹配,退出系统更是再也登录不上,也无法切换到root权限。 针对这一问题,有人说要重装系统,其实不需要,现给出解决办法如下: 重启电脑,进入grub启动菜单(开机时长按shift键或Ctrl键,注意:可能不是所有同学的电脑都适用上述快捷键,如果上述按键进入不了grub菜单,可以尝试一下Ctrl+Shift+F1);进入grub菜单模式找到Ubuntu高级选项并进入recovery mode选项,(注意:部分电脑可能会直接进入grub命令行,在命令行输入normal可以直接进入grub菜单模式)。里面可能有多个recovery mode,选择第一个,按e进入编辑模式,找到命令中的 recovery nomodeset 修改为quietsplash rw init=/bin/bash按F10进入命令行模式, 输入 mount -rw -o remount / 获得读写权限;输入 vi etc/passwd 打开需要修改的文件,将用户名修改为原来的用户名;按照vi编辑器的规则修改好内容后Ctrl+Alt+del 重启即可恢复正常。

【文献阅读】MCAN——用于VQA的深层模块化的协同注意力网络(Z. Yu等人,CVPR,2019,有代码)

一、文章概况 文章题目:《Deep Modular Co-Attention Networks for Visual Question Answering》 前面三位作者是杭电的,第四作者是陶老师,感觉陶老师在VQA领域非常高产,已经在CVPR2019上看到他的好几篇文章了。 文章下载地址:http://openaccess.thecvf.com/content_CVPR_2019/papers/Yu_Deep_Modular_Co-Attention_Networks_for_Visual_Question_Answering_CVPR_2019_paper.pdf 或者https://arxiv.org/abs/1906.10770 文章引用格式:Z. Yu, J. Yu, Y. Cui, D. Tao, Q. Tian. "Deep Modular Co-Attention Networks for Visual Question Answering." In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2019 项目地址:参考这个https://github.com/MILVLG/mcan-vqa 二、文章导读 网上目前还是没有看到这篇文章的介绍,所以还是自己来记录。 首先给出文章的摘要: Visual Question Answering (VQA) requires a finegrained and simultaneous understanding of both the visual content of images and the textual content of questions. Therefore, designing an effective ‘co-attention’ model to associate key words in questions with key objects in images is central to VQA performance.

logstash-启动

本次使用的是logstash-6.8.1版本 logstash依赖于JDK,所以需要先安装JAVA_HOME环境变量 安装路径需要注意,不能含有冒号(:) 官网文档:https://www.elastic.co/guide/en/logstash/6.8/first-event.html windows启动:https://www.elastic.co/guide/en/logstash/6.8/running-logstash-windows.html windows下安装: 直接解压,就是安装成功 关于启动logstash: logstash启动需要有配置文件,在此安装目录中config中已经有了配置,logstash-sample.conf 配置如下: # Sample Logstash configuration for creating a simple # Beats -> Logstash -> Elasticsearch pipeline. input { beats { port => 5044 } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" } } logstash默认是安装beats的(端口5044),output中可以看出需要启动elasticsearch(可以设置用户名密码) 因此启动测试配置试一下:logstash -f …/config/logstash-sample.conf --config.test_and_exit 结果: 启动命令:logstash -f …/config/logstash-sample.conf logstash日志窗口: elasticsearch 日志窗口: 访问地址:http://localhost:9600/ 打印如下: {“host”:“DESKTOP-wl”,“version”:“6.8.1”,“http_address”:“127.0.0.1:9600”,“id”:“430d33d7-99cd-4a36-b403-e0efadb30615”,“name”:“DESKTOP-wl”,“build_date”:“2019-06-18T14:11:07+00:00”,“build_sha”:“e99c3a5386ec3b64789dc003fc99e0a86ede0f0f”,“build_snapshot”:false} 说明启动成功 logstash -f .