github 体积限制 仅供了解,切勿滥用。希望自觉维护良好社区。
单文件 单个文件大于 50M 时会收到警告, 100M 时会被拒绝。
该警告将告诉您哪些文件太大:
remote: warning: Large files detected.
remote: warning: File big_file is 55.00 MB; this is larger than GitHub’s recommended maximum file size of 50 MB
推送信息big_file已接收并保存到GitHub上的存储库中,但是您应该考虑完全删除文件和提交。
100 MB推送限制
如果您将大于100 MB的文件推送到GitHub,Git将拒绝推送并告诉您哪个文件太大:
remote: warning: Large files detected.
remote: error: File giant_file is 123.00 MB; this exceeds GitHub’s file size limit of 100 MB
由于,此推送被拒绝giant_file。提交将不会保存到GitHub上的存储库中。
用户或仓库 用户账号下所有仓库体积总和没有限制。
单个仓库硬限制为100G。超过75G时会收到警告,推荐为1G以下。
通过浏览器将文件添加到存储库,则文件不能大于25 MB。
参考 我的磁盘配额是多少? https://help.github.com/en/articles/what-is-my-disk-quota
环境:
系统:centos7.xdocker版本:19.03.2安装方式:yum 参考官方安装文档:https://docs.docker.com/install/linux/docker-ce/centos/官方命令行使用文档:https://docs.docker.com/engine/reference/run/docker三剑客的区别:https://www.zhihu.com/question/277356093 安装 1.安装所需的软件包
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 2.安装yum源
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo 3.安装docker-ce
sudo yum install docker-ce docker-ce-cli containerd.io
4.启动docker
sudo systemctl start docker
5.测试docker是否正常运行
sudo docker run hello-world
转载于:https://www.cnblogs.com/jonnyan/p/11609059.html
转自:https://www.cnblogs.com/nicekk/p/11561836.html
一、概述 Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskManager,Flink 架构也遵循 Master - Slave 架构设计原则,JobManager 为 Master 节点,TaskManager 为 Worker (Slave)节点。
所有组件之间的通信都是借助于 Akka Framework,包括任务的状态以及 Checkpoint 触发等信息。
二、Client 客户端 客户端负责将任务提交到集群,与 JobManager 构建 Akka 连接,然后将任务提交到 JobManager,通过和 JobManager 之间进行交互获取任务执行状态。
客户端提交任务可以采用 CLI 方式或者通过使用 Flink WebUI 提交,也可以在应用程序中指定 JobManager 的 RPC 网络端口构建 ExecutionEnvironment 提交 Flink 应用。
三、JobManager JobManager 负责整个 Flink 集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中 TaskManager 上 TaskSlot 的使用情况,为提交的应用分配相应的 TaskSlot 资源并命令 TaskManager 启动从客户端中获取的应用。
JobManager 相当于整个集群的 Master 节点,且整个集群有且只有一个活跃的 JobManager ,负责整个集群的任务管理和资源管理。
JobManager 和 TaskManager 之间通过 Actor System 进行通信,获取任务执行的情况并通过 Actor System 将应用的任务执行情况发送给客户端。
1.字符串与数组之间的相互转换 1、字符串转换为数组
str.split(','); // 以逗号,为拆分的字符串 2、数组转换为字符串
arr.join(','); // 把数组项拼接成字符串,以逗号,分隔 2.json字符串转换为json对象 1、使用eval
result = eval('(' + jsonstr + ')'); // jsonstr是json字符串 2、使用JSON.parse()
result = JSON.parse(jsonstr); // jsonstr是json字符串 eval和JSON.parse的区别:
eval 是javascript支持的方式,不需要严格的json格式的数据也可以转化
JSON.parse 是浏览器支持的转换方式,必须要标准的json格式才可以转换
一、server.servlet.context-path配置的作用 定义: server.servlet.context-path= # Context path of the application. 应用的上下文路径,也可以称为项目路径,是构成url地址的一部分。
server.servlet.context-path不配置时,默认为 / ,如:localhost:8080/xxxxxx
当server.servlet.context-path有配置时,比如 /demo,此时的访问方式为localhost:8080/demo/xxxxxx
二、springboot 2.0变革后的配置区别 1、springboot 2.0之前,配置为 server.context-path
2、springboot 2.0之后,配置为 server.servlet.context-path
三、一个思考 原来的运营项目(已上线),配置文件添加 server.servlet.context-path 配置后,需要在thymleaf 中进行action请求的追加吗?
答案:不需要。
栗子:
前端页面采取form请求
<form th:action="@{/user/userLogin}" method="post" id="userLogin"></form> action拦截接受方式
@Controller @RequestMapping("/user") public class LoginController { @PostMapping("/userLogin") public String userLogin(HttpServletRequest request, Model model) { 原项目的基础上,追加一个配置
server: port: 8080 servlet: context-path: /demo 只需要再开始进入首页时,追加 localhost:8080/demo ,后续的thymleaf中的href和action等无需添加/demo 。
运行shell脚本报错:“syntax error near unexpected token 的解决方法`”
今天写了个Cshell脚本,运行报错syntax error near unexpected token `,脚本语法没有问题,最后发现了问题
用命令vi -b 打开你的SHELL脚本文件,你会。发现每行脚本最后多了个^M。 老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,,ASCII码为0D),另一个字符把纸上移一行 (称为换行, ,ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用 一个字符来表示行尾,Linux沿袭Unix,也是。Apple 开发者规定了用。开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的。
因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的“^M”符号,表示的是符。
在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都干掉,键入如下替换命令行:
1)vi -b setup.sh
2)在命令编辑行<就是: 按ESC键 然后shift+:冒号>输入:%s/^M//g
注意:上述命令行中的^M不是M再加上^,而是由“Ctrl+v”、“Ctrl+M”键生成的。
这样替换掉以后,保存就可以执行了。当然还有其他的替换方式比如:
a.一些linux版本有 dos2unix 程序,可以用来祛除^M。
b.cat filename1 | tr -d “\r” > newfile 去掉^M生成一个新文件,还有sed命令等,凡是可以替换的命令都是可以用来新生成一个文件的。
按照上面所说的,删除^Mshell脚本就运行正常,后来问同事,原来他windows记事本中修改了程序路径,导致每一行多出了^M。
二、和外围电路的接线图:
三、SPI接口(音频数据传输接口)介绍
SPI 引脚介绍 SPI 接口是用来传输音频数据的。引脚连接图如下:
因为VS1053B工作的是时候,执行两种协议:
一种是串行数据接口的串行协议(SDI),
一种是串行命令接口的串行协议(SCI).
所以片选有两个XCS and XDCS.
其他引脚DREQ 说明: DREQ为高电平的时候,VS1053B可接受最少32字节的数据。DREQ为低电平,不能向VS1053B发送数据。 四、协议介绍: 串行数据接口的串行协议(SDI) and 串行命令接口的串行协议(SCI)
串行数据接口的串行协议(SDI) 传输原则: 串行数据接口在从机模式下工作,因此DCLK信号必须由一个外部电路提供。数据(SDATA信号)可以在DCLK的上升沿或下降沿输入。SDI 传输数据的时候,SCI_MODE 决定了MSb or LSb 在前。SM_NEWMODE =1,字节同步是由XDCS完成的。请注意,通过SDI发送数据时,您必须在以下位置检查数据请求引脚DREQ至少每32个字节之后。SDI协议下传输数据的格式如下,推荐使用守则,SDATA每传输完32位字节后,XDCS拉高一会。再拉低。是为了偶尔出现时钟故障,也要保持数据同步。 SDI 时序图如下: 串行命令接口的串行协议(SCI) 协议规则: 串行命令接口SCI的串行总线协议由一个指令字节,一个地址字节和一个16位数据字组成。每个读取或写入操作都可以读取或写一个寄存器。 在上升沿读取数据位,因此用户应更新数据在下降的边缘。字节总是先发送MSb。XCS应该在整个持续时间内保持低电平。注意:VS1053b在每次SCI操作后将DREQ设置为低电平。持续时间取决于具体的操作行为。在DREQ再次变为高电平之前,不允许启动一个新的SCI / SDI操作。 不同操作下的时序图: SCI 读操作 SCI 写操作 SCI 多重写操作 SCI 时序图 两个SCI写操作 两个SDI字节 在两个SDI字节之间的SCI操作 五、支持的音频解码器格式
六、功能描述
主要特点 VS1053b是一个建立在私有基础上的数字信号处理器VS_DSP。它包含 Ogg Vorbis,MP3,AAC,WMA 和 WAV PCM + ADPCM 音频解码、MIDI合成器,串行接口,一个多种速率的立体声DAC 和 模拟输出放大器加滤波器。和他们所需要的所有有关代码和数据存储。
此外,PCM / ADPCM音频编码器可以使用一个麦克风放大器 和/或 线路级的输入,以及一个立体声A / D转换器。
实例代码如下:
using System.Collections; using System.Collections.Generic; using HedgehogTeam.EasyTouch; using UnityEngine; public class ScaleLimit : MonoBehaviour { Vector3 length; //QuickPinch quickPinch; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { //获取物体的大小 length = GetComponent<MeshFilter>().mesh.bounds.size; //quickPinch = GetComponent<QuickPinch>(); } void ScaleLimit2() { float xlength = length.x * transform.lossyScale.x; float ylength = length.y * transform.lossyScale.y; float zlength = length.z * transform.
来源 | Hackernoon 译者 | 火火酱 责编 | Carol 出品 | 区块链大本营(blockchain_camp) 以太坊是所有区块链中一直与分片概念同步的底层平台,想要理解为什么以太坊开发者社区想要实现分片,重点是要理解分片是什么,以及这个解决方案为何如此有吸引力。
根据ETH Gas Station的统计,向以太坊区块链中添加一项交易大约需要1.78分钟,每32秒生成一个新的区块,平均每秒处理15-20个交易。这个生态系统创造了一个有利于矿工而非用户的环境,如果用户想要优先处理他们的交易,就必须要提高他们的gas价格。
由于低吞吐量、高延迟和高价格限制了以太坊网络性能,因此,目前以太坊上不太适合部署需要强可扩展性的服务和应用程序。
什么是分片?
简单来讲,分片是一种分区方式,可以在P2P网络中分散计算任务和存储工作负载,经过这种处理方式,每个节点不用负责处理整个网络的交易负载,只需要维护与其分区(或分片)相关的信息就可以了。
为了进一步解释分片,我们可以看一下最简单的分片示例。以太坊的创始人Vitalik Buterin称其为“通过1000山寨币增加扩展性”。
在本例中,不是运行单条区块链,而是运行多条区块链,我们将每条区块链称为一个shard(分片),而不是称之为区块链。反过来说,每个分片都有自己的验证器网络或者节点网络,可以使用PoW算法挖掘区块,也可以通过质押(staking)或投票(voting)来挖掘区块。
分片所面临的挑战
在尝试去使用分片时,我们面临的第一个问题是,由于每个分片都有自己的节点集,所以每个分片的安全性都低于像以太坊这样的单链。
所以如果具有x数量节点的以太坊决定硬分叉并分裂为一条分片链,且将整个网络分布在超过10个分片上,那么每个分片将具有原链1%的安全性。这意味着通过控制原链5.1%(而不是51%)的节点,每个分片都可能会被破坏。
我们遇到的第二个问题是:“我们如何选择哪个节点验证哪个分片?”对于一个不怎么好的参与者来说,只有当这5.1%的网络节点都在同一个分片中进行验证时,要控制这些节点才会是个问题。
允许节点选择其在哪个分片中验证可能会导致频繁的网络攻击,因此将攻击风险减到最低的最佳方法,就是不允许节点选择验证哪个分片。
实际上,所有的分片架构都是随机为分片分配节点的。将节点分配给分片需要非特定于分片的计算,并且几乎所有这些设计都使用单独的链来处理维护整个分片和节点网络。该链在以太坊中被称为信标链,负责生成随机数,将节点分配给分片,捕捉单个分片的快照,处理握手权益和其他各种功能。
信标链有一些缺点。因为它们负责前面提到过的记录保存计算,所以网络使用的分片越多,信标链需要做的工作就越多,那么没有分片的网络可能会遇到低吞吐量加高延迟的问题,因此分片网络的可扩展性有其天然的局限性。
然而,分片网络具有可乘性,因此如果网络效率得到改善,导致网络中节点处理交易的速度提高四倍,那么信标链就能够处理四倍的分片数量,将网络速度提高16倍。
如何将数据分割为分片?
让我们先看看节点通常在区块链上执行的功能:
处理/验证交易
将这些交易以及它们挖掘的区块中继给网络上的其他节点
储存所有交易的历史
随着网络的发展,节点需要能够跟上网络的需求及其发展需要。
要增加处理中的交易数量需要每个节点都增加更多计算力。
中继的交易越多,需要节点提供的宽带就越大。
要在区块链上储存所有的数据也就需要节点逐渐增加更多的存储空间。
观察这三个参数,你会发现,无论每秒的交易数或中继的交易数是否增加,数据存储量都会增加。
在编写这篇文章之前,就已经提出过对存储进行分片但不对交易进行分片的方法,而且有些项目已经实现了交易处理(而非存储)的分片。
然而,最常见的分片类型被称为“状态分片(State Sharding)”,包括每个分片中构建其自己区块链的节点,该区块链包含整个全球网络中仅仅影响它们自己那部分的交易,这意味着节点只需要存储它们分片的交易历史,处理影响它们分片的交易,并在它们的分片中中继这些交易。
接下来,我们将介绍跨分片交易、无效交易和恶意行为。
区块链的分片和缩放
上文中,我们讨论了分片是什么,分片要解决的问题以及要有效实现分片需要克服的一些障碍。那么接下来我们将讨论跨分片交易、无效交易和恶意行为。
正如上文描述的分片的基本类型并不是非常有效或者实用的分片方法,因为它们不能彼此通信,所以它们就像单一区块链一样。以简单的付款为例,如果用户A和用户B在同一个分片上,那么分片中的验证器能够毫无障碍地处理交易,但是当他们的账户在不同的分片上时,会出现什么状况呢?
用户A在1#分片上,用户B在2#分片上。各个分片上的验证器将无法借记或贷记用户的账户,因为它们没有彼此分片的权限。
然而,这个问题也是有解决方案的,下面就让我们来更详细地看一看其中一些解决方案:
同步(同时)跨分片交易
在这种情况下,当在1#分片的用户A要向在2#分片的用户B发送资金时,将同时在每个分片生成包含与此交易相关的状态转换(state transition)的区块,并且每个分片上的验证器会协同工作以确认这笔交易。
早在2018年初,Vitalik Buterin就已提议将区块与此解决方案合并。
(参见来源:https://ethresear.ch/t/merge-blocks-and-synchronous-cross-shard-state-execution/1240)
异步跨分片交易
这是一个较为容易完成的操作,并且协调起来也要简单的多,因此它比同步交易要更受欢迎。
同样,我们将使用1#分片上的用户A想要给2#分片上的用户B汇款的例子。在此场景下,负责贷记用户B的账户的分片只有在有足够证据证明负责借记用户A账户的分片已经完成后,才会验证这次交易中B自己负责的部分。
但是,这种方法并不是完美的,其中一个分片的一个区块被舍弃的可能性并不为零。当概率非零时,无论概率有多小,也仍是一个不容忽视的弱点。
我们可以通过下图来详解一下原因:
这个区块链有两个分片,巧合的是,它们都刚好在交易被合并到1#分片中的A区块和2#分片中的X’区块时分叉。
当这样的分叉发生时,分片必须舍弃一条链并接受另一条链。此时,如果链A、B等成为1#分片中接受的链,W’、X’等成为2#分片中接受的链,那么交易将顺利完成,皆大欢喜。
如果1#分片接受A’、B’等,2#分片接受W、X等,那么整个交易将失败,但这也是一种可以令人接受的结果,因为可以重新发送交易。
但是如果1#分片接受链A、B等,2#分片接受链W、X等的话会发生什么呢?交易中的一部分(A、B等)被完成,但另一部分(W、X等)会被舍弃。
分片中的恶意节点
现在,你已经对分片及其工作原理有了更深入的理解,你可能会觉得满足了,也可能会有更多的问题,但至少还要考虑一件事:恶意节点。
1、恶意节点 这种情况非常常见,当有可能出现大交易日时,无论是什么系统,都会有人想攻击该系统。
2、批准无效区块
package free.system.utils; import com.alibaba.fastjson.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.Map; public class BaiduMapUtils { /** * 百度地图通过经纬度来获取地址,传入参数纬度lat、经度lng * @param lat * @param lng * @return */ public static String getAddress(String lat, String lng) throws IOException { JSONObject obj = getLocationInfo(lat, lng).getJSONObject("result"); System.out.println(obj); return obj.getString("formatted_address"); } public static JSONObject getLocationInfo(String lat, String lng) throws IOException { String urlString = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=你的ak&output=json&coordtype=wgs84ll&location="+lat+","+lng; URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.
pid=49184 childid=`ps -ef|grep $pid|grep -v grep|awk '{printf " %s",$2 }'` kill -9 $childid 转载于:https://www.cnblogs.com/daysme/p/11556112.html
layer弹层组件官网
常用参数:
shadeClose:默认true,是否点击遮罩时关闭层
转载于:https://www.cnblogs.com/hool/p/11556019.html
1.官网连接
https://www.netsarang.com/zh/free-for-home-school/
2.点击下载
3.邮箱收件
4.点击下载好的两个可执行文件
xshell会自动覆盖原先的试用版(第一次使用的可能会引导安装)
xftp好像把我原来的删除掉了,再次执行就变成安装了…
5.缺点:一个窗口最多开四个会话
一、前言
设计模式有很多,最典型的是GoF的23种设计模式,听起来很多,其实大部分我们都是见过的,按照常见度来分,最常用的差不多是六七个吧,因此,我们在学习的时候应该有轻重缓急之分,不能一视同仁,而应该抓住重点,将一些最常用的设计模式吃透了,那么我们在遇到一个实际问题的时候就能根据问题的需要来进行相应的取舍。学习是一个循环往复的过程,没有学过一次不再接触就能掌握的,一定要反复的记忆,反复的练习,不断地提炼,不断地提高,没有复习的学习就是参观,没有预习的学习就是做梦,没有提升的学习就是浪费时间。
二、迭代器模式
什么叫做迭代器,我们可能在C++的STL标准模板库或者在Java中见过iterator这个东西,所谓“迭代”就是按照一定的次序或顺序进行重复操作,这个操作可以是遍历也可以是反复的计算,而迭代器就是按照一定的顺序对元素进行遍历的过程。理解到这个程度,我们可能非常的奇怪,因为我们完全可以使用一个for循环来完成这样的操作,又何必大费周章的来一个迭代器来遍历呢?!这就涉及到软件设计中最重要的一个原则了,那就是高内聚,低耦合。当我们使用for循环来完成遍历操作的时候代码中有着大量的耦合,当我们需要修改代码的时候,不能做到少改甚至不改遍历的代码,而迭代器可以做到,这为代码的可移植性、可扩展性等特性奠定了基础。我们可以看到设计模式大多数是把简单的问题给搞复杂了,但是这种复杂恰恰是为了以后设计和扩展的简单。正如没有规划的盖一座房子,很快就盖成了一座房子,可是因为没有考虑到房子的方位、地基、以后的扩展、居住的舒适,改出来的房子最后不能进行扩展并且不符合力学的美感和力感,最终只能重新拆掉重建,所以学习设计模式的时候最好看一些建筑方面的设计,明白全局观的重要性。废话少说,直接上代码(talk is cheap,let's show code!)
三、代码
package designMode.iterator; public class Book { String name; public Book(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } package designMode.iterator; public interface Aggregate { public abstract Iterator iterator(); } package designMode.iterator; public class BookShelf implements Aggregate{ Book[] books; int pointer = 0; public BookShelf(int max_size){ books = new Book[max_size]; } public void appendBook(Book book){ books[pointer] = book; pointer++; } public Book findBookAt(int index){ return books[index]; } public int getLength(){ return pointer; } public Iterator iterator() { return new BookShelfIterator(this); } } package designMode.
介绍 umy Image 网站是一个可以帮助前端设计师设定占位图片的在线工具,可以按照你设定的大小生成出一个图片占位符,用以填充网页设计上的图片,充实网页模版内容,更直观的查看网页设计模版的整体效果。
用法 进入官网https://dummyimage.com/
在地址栏内一这种格式输入你想要的图片
https://dummyimage.com/2000x900/e91e63/fff
2000900是宽x高若只有一个数字则生成正方形,需要注意中间是小写的x不是号,且尺寸必须作为第一个参数;
e91e63、fff是颜色
背景颜色/文字颜色
颜色表示为十六进制代码(#ffffff为白色)
颜色总是遵循尺寸,https://dummyimage.com/250/ffffff/000000不是https://dummyimage.com/ffffff/250/000000
第一种颜色始终是背景颜色,第二种颜色是文本颜色。
背景颜色是可选的,默认为灰色(#cccccc)
文本颜色是可选的,默认为黑色(#000000)
例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> *{ padding: 0; margin: 0; } body{ height: 100vh; /* 100%高度 */ display: flex; flex-direction: column; /* 主轴按列排列 */ justify-content: space-between; /* 内容平均分布 */ } header{ height: 60px; background-color: aqua; } main{ flex-grow: 1; /* 占满剩余空间 */ background-color: blue; } footer{ height: 60px; background-color: aqua; } </style> </head> <body> <header></header> <main></main> <footer></footer> </body> </html>
/// <summary> /// 将图纸目录中图名相同的记录合并,图号取相同部分,折合A1和张数相加 /// </summary> /// <param name="selFrameAttInfos"></param> private void MergeSameDwgName(List<List<FrameAtt>> selFrameAttInfos) { for (int i = 0; i < selFrameAttInfos.Count; i++) { for (int j = i + 1; j < selFrameAttInfos.Count; j++) { string dwgName1 = string.Empty; foreach (FrameAtt item in selFrameAttInfos[i]) { if (item.Tag == GlobalData.FrameDefaultAttMge.GetStandardLabel("DrawingName")) { dwgName1 = item.Value; break; } } string dwgName2 = string.Empty; foreach (FrameAtt item in selFrameAttInfos[j]) { if (item.Tag == GlobalData.
/* 实现一个字符串头尾去除空格的函数 注意需要去除的空格,包括全角、半角空格 暂时不需要学习和使用正则表达式的方式 */ function removeRepetition(str) { var result = [].filter.call(str,(s,i,o)=>o.indexOf(s)==i).join(''); return result; } // 测试用例
console.log(removeRepetition("aaa")); // ->a console.log(removeRepetition("abbba")); // ->aba console.log(removeRepetition("aabbaabb")); // ->abab console.log(removeRepetition("")); // -> console.log(removeRepetition("abc")); // ->abc 转载于:https://www.cnblogs.com/alone2015/p/11495734.html
location ~ .*\.(gif|jpg|jpeg|png)$ { # expires 24h; root /home/sk/ftp/;#指定图片存放路径 proxy_store on; proxy_store_access user:rw group:rw all:rw; proxy_temp_path /home/sk/ftp/;#图片访问路径 proxy_redirect off; proxy_set_header Host 127.0.0.1; client_max_body_size 10m; client_body_buffer_size 1280k; proxy_connect_timeout 900; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 40k; proxy_buffers 40 320k; proxy_busy_buffers_size 640k; proxy_temp_file_write_size 640k; if ( !-e $request_filename) { proxy_pass http://127.0.0.1;#默认80端口 } }
今天把项目打开,运行后就报错,显示
09-06 14:58:05.702 29249-29249/? E/NativeLoader: found libBaiduMapSDK_base_v5_4_3.so error
09-06 14:58:05.702 29249-29249/? E/art: No implementation found for int com.baidu.mapsdkplatform.comjni.tools.JNITools.initClass(java.lang.Object, int)
(tried Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_initClass and Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_initClass__Ljava_lang_Object_2I)
可把我搞晕了,花了半天时间,终于解决了。
百度上都说是so文件的问题,我的so文件和jar包都是直接拷贝进去的,也按照官网说的方式设置了,还是不行。那我就去重新下载,结果放到项目中,还是一样报错,跟版本一点关系都没有。
然后把备份的项目拿来运行,又能够运行。
试了又试,最后发现,是工程目录下的builder.graddle出了问题,每次graddle有更新,我一般都直接更新的。
最后将修改如下
将 classpath 'com.android.tools.build:gradle:3.5.0' 改为 classpath 'com.android.tools.build:gradle:3.4.1' 运行OK,解决。被百度坑了一个半天,我去。