文章目录 curl 下载curl的安装curl的使用(C/C++)curl的easy系列 参考文献 curl 下载 这个直接在官网上使用wget下载就可以:
wget --no-check-certificate https://curl.haxx.se/download/curl-7.80.0.tar.gz curl的安装 我们解压下载后的安装包: tar zxvf curl-7.80.0.tar.gz 进入解压后的目录: cd curl-7.80.0 执行配置文件: ./configure make: make 注:这一步可能会报如下的错误:select TLS backend(s) or disable TLS with --without-ssl.
我们在执行配置文件的时候,需要加入如下配置项
./configure --with-wolfssl
sudo make test sudo make install curl的使用(C/C++) curl是一个用C语言开发的库,支持很多网络协议,但是主要使用的还是HTTP协议。
curl的接口分为两大类:easy系列和multi系列。其中easy系列是同步调用;multi系列是异步的多线程调用。
注:
使用g++编译的时候记得链接curl库: -l curl
curl的easy系列 easy系列去收发HTTP数据的接口函数主要有4个:
curl_easy_init:
这个函数原型如下,其会创建一个curl句柄,这个是其他curl函数要用的。 CURL *curl_easy_init(void); curl_easy_setopt:
这个函数原型如下,其会设置各种请求参数,比如请求方法、URL、header/body数据、超时、回调函数等等。 CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); curl_easy_perform:
这个函数的原型如下,其用来发送数据,返回的数据由回调函数处理 CURLcode curl_easy_perform(CURL *curl); curl_easy_cleanup:
这个函数的原型如下,这个函数用来清理句柄相关资源,结束会话。 void curl_easy_cleanup(CURL *curl); 下面是个用来收发数据的简短例子:
Flutter安装配置 问题:在配置Android studio一直报一个问题 Android toolchain - develop for Android devices
1、在遇到这个问题,首先要确保自己的Android studio的下图中的四项勾选上:
2、在终端下进入Android SDK的地址,然后进入/tools/bin文件夹下,执行如下命令
sdkmanager --licenses 如果报无命令错误,可执行如下命令
./sdkmanager --liecenses
下面的步骤一直y就可以了。
3、再在终端执行 flutter doctor的命名便得到下面的结果了
在使用Java自带的排序函数时,往往需要根据自己的需求自定义比较器。以前一直对Comparator的升序降序疑惑。现在记录一下,加深下印象。
先给结论:
实现Comparator接口,必须实现下面这个函数:
@Override public int compare(CommentVo o1, CommentVo o2) { return o1.getTime().compareTo(o2.getTime()); } 这里o1表示位于前面的对象,o2表示后面的对象
返回-1(或负数),表示不需要交换01和02的位置,o1排在o2前面,asc返回1(或正数),表示需要交换01和02的位置,o1排在o2后面,desc 举例说明:(分析说明在运行结果之后)
package com.zhb.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; class A { int a; public A(int a) { this.a = a; } @Override public String toString() { return "[a=" + a + "]"; } } class MyComparator implements Comparator<A> { @Override public int compare(A o1, A o2) { //升序 //return o1.a - o2.
修改参数
func main() { p := person{name : "zhangsan", age : 18} modifyPerson(p) fmt.Println("name:", p.name, "age:", p.age) } func modifyPerson(p person) { p.name = "lisi" p.age = 19 } type person struct { name string age int } // 输出结果 name:zhangsan, age:18 // 发现结果没有被改变,我们改成指针类型试试呢? modifyPerson(&p) func modifyPerson(p *person){ p.name = "lisi" p.age = 19 } // 输出结果 name: lisi, age: 19 // 接收参数修改为指针参数,就可以满足需求了。 值类型
上述示例中,定义的普通变量p是person类型的。在Go语言中,person是一个值类型,而&p获取的指针是*person类型的,即指针类型。那么为什么值类型在参数传递中无法修改呢? 要从内存讲起。
变量的值是存储在内存中的,而内存都有一个编号,称为内存地址。所以要想修改内存中的数据,就要找到这个内存地址。我们来对比值类型变量在函数内外的内存地址,如下
关键代码
- setTextSize(TypedValue.COMPLEX_UNIT_PX,15); //15像素
- setTextSize(TypedValue.COMPLEX_UNIT_SP,15); //15SP
- setTextSize(TypedValue.COMPLEX_UNIT_DIP,15);//15DIP
实践证明: 保证跟xml布局文件中的sp字体设置效果一样,适配机型;
android TypedValue.applyDimension()的作用 这个方法是转变为标准尺寸的一个函数,例如
int size = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, context.getResources().getDisplayMetrics());
这里COMPLEX_UNIT_DIP是单位,20是数值,也就是20dp
""是一个长度为 0 且占内存的空字符串,在内存中分配一个空间,可以使用 Object 对象中的方法。例如:"".toString() 等。
null 是空引用,表示一个对象的值,没有分配内存,调用 null 的字符串的方法会抛出空指针异常。例如如下代码:
String str = null; System.out.println(str.length()); new String() 创建一个字符串对象的默认值为 "",String 类型成员变量的初始值为 null,注意,必须是类的成员变量才有默认初始值null,方法内部的局部变量必须手动赋值,否则报错。
空字符串 "" 是长度为 0 的字符串。可以调用以下代码检查一个字符串是否为空:
if (str.isEmpty()) if (str.length() == 0) if (str.equals("")) 空字符串是一个 Java 对象,有自己的串长度(0)和内容(空)。不过,String 变量还可以存放一个特殊的值,名为 null,这表示目前没有任何对象与该变量关联。要检查一个字符串是否为 null,要使用以下条件:
if (str == null) 有时要检查一个字符串既不是 null 也不为空串,这种情况下就需要使用以下条件:
if (str != null && str.length() != 0) 注意:首先要检查 str 不为 null。如果在一个 null 值上调用方法,会出现错误。
示例如下:
public static void main(String[] args) { String str1 = new String(); String str2 = null; String str3 = "
标题:415字符串相加-简单 题目 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例1 输入:num1 = "11", num2 = "123" 输出:"134" 示例2 输入:num1 = "456", num2 = "77" 输出:"533" 示例3 输入:num1 = "0", num2 = "0" 输出:"0" 提示 1 <= num1.length, num2.length <= 104num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零 代码Java public String addStrings(String num1, String num2) { if (num1.charAt(0) == '0') return num2; if (num2.charAt(0) == '0') return num1; StringBuilder sb1 = new StringBuilder(num1); StringBuilder sb2 = new StringBuilder(num2); StringBuilder result = new StringBuilder(); int count = 0; for (int i = sb1.
前言 本文章中语言排名数据来自TIOBE排行榜和PYPL排行榜。
TIOBE排行榜5月份数据 以下是官方说明
下个月,将宣布TIOBE年度编程语言。这个奖项是在2021的评分最高的编程语言中给出的。目前,C#是最有可能获得这一头衔的候选人。有趣的是,C#在其21年的历史中从未获得过“TIOBE索引编程语言年度奖”,尽管它在过去20年中一直名列前十。让我们看看下个月会发生什么!TIOBE指数本月的其他有趣走势包括Swift(从14到10)、R(从15到11)和Kotlin(从33到26)TIOBE软件公司首席执行官Paul Jansen
TIOBE编程社区指数是编程语言流行程度的指标。索引每月更新一次。评级基于全球熟练工程师、课程和第三方供应商的数量。流行的搜索引擎,如谷歌、必应、雅虎!,维基百科、亚马逊、YouTube和百度被用来计算收视率。需要注意的是,TIOBE索引并不是关于最好的编程语言或编写大多数代码行的语言。
TIOBE编程语言变化图 其他编程语言 下面列出了完整的前50种编程语言。此概述是非正式发布的,因为可能是我们错过了某种语言的情况。如果您觉得缺少一种编程语言,请通过tpci@tiobe.com通知我们。另请检查我们监视的所有编程语言的概述。
未来50种编程语言 以下语言列表表示#51至#100。由于差异相对较小,因此仅列出了编程语言(按字母顺序)。
ABC, ActionScript, Alice, APL, B4X, Ballerina, Bash, Boo, Bourne shell, C shell, CFML, Clipper, CLIPS, Clojure, Curl, Eiffel, Erlang, F#, Factor, Haxe, Icon, Inform, Io, J#, JScript, Korn shell, Lingo, LiveCode, M4, MQL4, NATURAL, Nim, NXT-G, OCaml, Occam, OpenCL, OpenEdge ABL, PostScript, Q, Racket, REXX, Ring, Scheme, SPARK, SPSS, Transact-SQL, Vala/Genie, VHDL, XSLT, Zig
本月指数变化 本月对索引的定义进行了以下更改:
David Heurtevent建议在WebAssembly语言中添加术语"
原文链接:
https://www.jb51.net/article/184725.htm
将脚本编译为pyd以防止反编译
如何解决呢,可以考虑将模块py文件编译为动态链接库,这样破解难度将大大增加。其中,在python里,pyd格式即动态链接库。使用cython即可编译,如果是anaconda是自带,python有的可能不带cython,安装即可:
1
pip install Cython
我们在main.py所在的文件夹新建py文件,在此处我命名为build_pyd.py,其内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 29 13:33:20 2018
@author: Li Zeng hai
"""
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'any words.....',
ext_modules = cythonize(["mylib.py",]
),
)
然后执行以下cmd命令:
1
python build_pyd.py build_ext --inplace
注意:编译需要相关的VC环境,因为python3.9是基于 VS15版本的,所以我这里安装的也是。不安装是无法编译的。不然会出现报错error:Unable to find vcvarsall.
router-view也是一个组件,如果直接被包在keep-alive里面,所有路径匹配到的视图组件都会被缓存
keep-alive是Vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染
贴一段截取的代码(如图1),两个Button:bt4 和 bt5 基本上是差不多的构造,只是位置不同,但 bt4 “确定”就老老实实待在应该在的位置,bt5 “取消”居中占满整个Frame,完全不鸟setBounds()方法(如图2)。
解决方法:给 Frame 加一个 setLayout(null) 方法,bt5“取消”终于驯化归位。(如图3)
以edge为例。
1 进入登陆页,选中 应用程序 ,查看 cookie。
2 输入验证码,登录进系统。复制token。
3 在postman中选择Authorization,Type设置为Bearer Token,并将复制的Token粘贴过去。
4 就可以正常测试接口了。注意:token有时效性,失效重新登陆获取即可。
1,table属性cell-class-name的使用可以作用到某一行,或者某一列等等。但是在style标签中要去掉scoped,不然无效。
(在elementUI中,row-class-name、row-style、cell-class-name等属性要想生效必须使用全局class才能生效。因为之前的代码都是在组件中编写的,所以去除中的scoped即可该组件中的样式变为全局属性。)
并且这个作用到的列标签 td (如图)
2,使用<template></template>
这个作用到的列标签是div.cell下的内容
3.列属性class-name
这个也是作用到的列标签是 td下的内容,设置了这个(样式设置了列的对齐方式),那么表头header-align对齐的属性就无效了
参考帖:https://www.cnblogs.com/belongs-to-qinghua/p/11672605.html
1、下面的异常就是包重复依赖了,这就要对aar中的依赖和当前项目的依赖进行筛除
AGPBI: {"kind":"error","text":"Program type already present: io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable","sources":[{}],"tool":"D8"} Program type already present: io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable 2、打包项目中的lib的aar文件,这种文件无法打包进去,需要额外在复制到引用aar包的项目中去;同时module中依赖的其他module和第三方依赖 也无法打包进去的,要么合并代码,要么再额外引进去,目前没想到好方法,后面有了在更新;这种时候无法获取到依赖包就会报错误
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7
在使用TextField组件时,想要设置外边框颜色,按照下面写法设定无效
TextField( decoration: InputDecoration( contentPadding: EdgeInsets.all(10.0), border: OutlineInputBorder( borderRadius: BorderRadius.circular(0.0), borderSide: BorderSide(color: Colors.red, width: 5, style: BorderStyle.solid))), ) 查看Flutter源码发现,这个是由于TextFiele Border优先级影响到了
看注释说明,只有到前面几个border为空才会使用border,
正确的设置TexrField边框方式如下
TextField( decoration: InputDecoration( contentPadding: EdgeInsets.all(10.0), enabledBorder:OutlineInputBorder( borderRadius: BorderRadius.circular(0.0), borderSide: BorderSide(color: Colors.red, width: 0.5, style: BorderStyle.solid)), focusedBorder:OutlineInputBorder( borderRadius: BorderRadius.circular(0.0), borderSide: BorderSide(color: Colors.red, width: 0.5, style: BorderStyle.solid)), ), ) 优先设定enableBorder和focuseBorder
i++、i--、++ii形式上都差不多,均为i=i+1或i=i-1;但在使用过程中,i++与i--先使用i的值,再加(减)1;--i与++i先i加1再使用i。一定·要记住i++(i--),++i(--i)是先使用原先i的值还是先加1在使用。
如:i=1;x=++i;y=--i;z=i++;m=i--;输出则为x=2;y=0;z=1;m=1;
如下面这题:
在输出的过程中,第一次输出x--时,是先输出x的值,再把x赋值为x-1=9,y的值不变,所以第一轮输出10 ,10;再进入循环体时,x=9,y被y=++i赋值为1,所以再次输出x--的值为9,y的值为1。所以最终输出为10 10 9 1。
方1: 直接list创建
dp = [[1 for i in range(5)] for j in range(4)] print(dp) #其中5代表列数,4代表行数 dp = [[11111] for j in range(4)] dp = [[11111], [11111], [11111], [11111]] 方2:NumPy库
优势:
numpy中数组存储在连续的块中,而使用list数组在内存中是分散存储的,numpy无需对内存地址再进行查找,节省资源。向量化,速度快。 使用arange import numpy as np dp = np.arange(15).reshape((5,3)) 使用zeros(),ones(), full() import numpy as np #创建元素都为0 dpz = np.zeros((5,4),dtype=int) #都为1 dpo = np.ones((5,4),dtype=int) #都为2,可以设置 dpf = np.full((5,4),2,dtype=int)
问题描述:在table中只更改指定的某一竖列的样式,通过element框架自带的 class-name实现。
<el-table id="tableRef" :data="tableData" ref="multipleTable1" border style="width: 100%;background-color:#fff;" tooltip-effect="dark"> <el-table-column prop="affiliatingScenicSynopsis" label="景区简介" width="220" align="center" class-name ='over2Hidden'> </el-table-column> </el-table> //这里需要注意的是,需要去掉style标签中的scope属性,不然会不生效 <style lang="scss"> .over2Hidden{ .cell{ text-overflow: -o-ellipsis-lastline; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; } } </style>
因开发进程的需要,我需要修改一个工作空间的进程。
找了半天没有找到。
其实非常简单,选择你的工作空间后,单击名字就可以了。
上面有个小窍门的地方就是你需要把鼠标移动到工作空间的名字上面。
Postman 如何修改工作空间的名称 - 开源 - OSSEZ
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl axios概述 axios是一个基 promise的HTTP库,它可用在浏览器和node.js 中。axios是一个异步请求框架,其核心用途在于在页面中发送异步请求并获取对应数据在页面中渲染。
虽然axios不是Vue的组成部分;但是,Vue推荐使用axios进行异步请求。
官方地址 http://www.axios-js.com/
主要特征 从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请求和响应转换请求数据和响应数据取消请求自动转换 JSON 数据客户端支持防御 XSRF 下载地址 https://unpkg.com/axios/dist/axios.min.js
请下载axios.min.js保存至项目并在页面中引用。
常用方法 axios常用方法如下:
axios.request(config) axios.get(url[, config]) axios.delete(url[, config]) axios.head(url[, config]) axios.options(url[, config]) axios.post(url[, data[, config]]) axios.put(url[, data[, config]]) axios.patch(url[, data[, config]]) axios入门 在此,以示例形式学习axios的Get请求与Post请求。
<!DOCTYPE html> <!-- 引入v-on命名空间 --> <html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Vue</title> <!-- 引入vue --> <script src="js/vue.js"></script> <!-- 引入axios --> <script src="js/axios.min.js"></script> <script type="