吴恩达深度学习推荐论文列表[附论文链接]

从看到第四课开始,发现出现论文的频率高了不少,想着把这些论文都粗略的读下,就先把他们列在这里,如有不全烦请告知 第一课:NeuralNetworks & Deep Learning 并没有 第二课:Improving Deep Neural Networks :Hyperparameter tuning, Regularization and Optimization Dropout Srivastava, Nitish, et al. “Dropout: a simple way to prevent neural networks from overfitting.” The journal of machine learning research 15.1 (2014): 1929-1958. 论文链接 Adam Kingma, Diederik P., and Jimmy Ba. “Adam: A method for stochastic optimization.” arXiv preprint arXiv:1412.6980 (2014). 论文链接 第三课:Structuring Machine Learning Projects 也没有 第四课:Convolutional Neural Networks LeNet-5 LeCun, Yann, et al.

spark案例解析(全国农产品市场与省份)

需求 (一) 数据描述 1、数据参数 该数据每日进行采集汇总。数据范围涵盖全国主要省份(港澳台西藏海南暂无数 据)的 180+的大型农产品批发市场,380+的农产品品类(由于季节性和地域性 等特点,每日的数据中不一定会涵盖全部的农产品品类)。 2、数据类型 (二)功能需求 1、农产品市场个数统计 统计每个省份的农产品市场总数统计没有农产品市场的省份有哪些 2、农产品种类统计 根据农产品类型数量,统计排名前 3 名的省份根据农产品类型数量,统计每个省份排名前 3 名的农产品市场 3、价格区间统计, 计算山西省的每种农产品的价格波动趋势,即计算每天价格均值。某种农产品的价格均值计算公式: PAVG = (PM1+PM2+…+PMn-max§-min§)/(N-2) 其中,P 表示价格,Mn 表示 market,即农产品市场。PM1 表示 M1 农产品 市场的该产品价格,max§表示价格最大值,min§价格最小值。 数据展示 allprovince.txt 河北 山西 辽宁 吉林 黑龙江 江苏 浙江 安徽 福建 江西 山东 河南 ... product.txt 生菜 2.00 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳 芹菜 2.40 2018/1/1 山西汾阳市晋阳农副产品批发市场 山西 汾阳 菜花 3.80 2018/1/1 北京朝阳区大洋路综合市场 北京 朝阳 生姜 10.00 2018/1/1 北京朝阳区大洋路综合市场 北京 朝阳 山药 8.

Android MVP 模式使用指南

参考github代码:github 参考博客:Google 官方Android MVP架构实践 简单的以google官方代码和自己的demo记录Android的MVP设计模式。 1.官方MVP模式: 官方MVP的samples的github地址是(https://github.com/googlesamples/android-architecture/) 若水三千,我们先取一瓢。先看看最简单的todo-mvp分支,这是最基础的MVP架构samples。 在我从前认识的MVP模式中,并不存在BasePresenter和BaseView两个文件,只需要针对不同的Presenter和View来定义不同的接口就行了。 来看一下这两个文件中都写了啥: BasePresenter.java public interface BasePresenter { void start(); } BaseView.java public interface BaseView<T> { void setPresenter(T presenter); } BasePresenter中声明了一个方法,当我们的实现类presenter需要开始进行动作时,事先调用start方法,来进行一些预处理动作。(代码中都是在View的实现类的onResume中调用presenter的start方法)。 因为google的sample中presenter需要做一些画面初始化的操作,所以每个画面都需要这样的方法将数据加载到画面上,所以使用了这个方法来作为初始化方法,我们在实际编码时要根据情况观察是否使用这个模板。 BaseView中声明了一个方法,setPresenter(),这里的设计和我平常的理解有所不同。我平时的想法是在view的onCreate方法中new出presenter实例作为view的成员变量,而google的例子是在activity中使用fragment实例new出presenter实例,但是这个presenter不属于fragment,需要在presenter中调用mTasksView.setPresenter(this)。 TasksActivity.java @Override protected void onCreate(Bundle savedInstanceState) { ... TasksFragment tasksFragment = (TasksFragment) getSupportFragmentManager().findFragmentById(R.id.contentFrame); ... // Create the presenter mTasksPresenter = new TasksPresenter( Injection.provideTasksRepository(getApplicationContext()), tasksFragment); ... } TasksPresenter.java public TasksPresenter(@NonNull TasksRepository tasksRepository, @NonNull TasksContract.View tasksView) { mTasksRepository = checkNotNull(tasksRepository, "tasksRepository cannot be null"

跟着燕青学Spring Security认证授权05--Spring Security快速入门

1 Spring Security介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员,因此它伴随着整个Spring生态系统不断修正、升级,在spring boot项目中加入spring security更是十分简单,使用Spring Security 减少了为企业系统安全控制编写大量重复代码的工作。 2 创建工程 2.1 创建maven工程 创建maven工程 security-spring-security,工程结构如下: 2)引入以下依赖: 在security-springmvc的基础上增加spring-security的依赖: <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.1.4.RELEASE</version> </dependency> 2.2 Spring容器配置 同security-springmvc. @Configuration @ComponentScan(basePackages = "com.pbteach.security.springmvc" ,excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = Controller.class)}) public class ApplicationConfig { //在此配置除了Controller的其它bean,比如:数据库链接池、事务管理器、业务bean等。 } 2.3 Servlet Context配置 同 “跟着燕青学Spring Security认证授权04–Servlet3.0 SpringMVC实现Session的认证方式” @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.pbteach.security.springmvc" ,includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = Controller.class)}) public class WebConfig implements WebMvcConfigurer { //视频解析器 @Bean public InternalResourceViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.

赛内训练安排

1.训练赛认真参加,争取每次做完铜牌题。之后将能力范围内的铜银题补上。每场训练赛认真参加。每场训练赛认真参加。每场训练赛认真参加。 2.新知识补全:图论:lca,倍增,基尔霍夫矩阵树。 数据结构:树刨,点分治,树分治。 dp:状压dp,背包模型。 3.复习:线段树进阶。最短路剩余题。MST。简单图论。 转载于:https://www.cnblogs.com/bianjunting/p/11634950.html

UVA7672(BFS)

填个坑,赛内补 转载于:https://www.cnblogs.com/bianjunting/p/11634924.html

windows环境下在不支持AVX指令集的CPU上使用anaconda配置tensorflow

因为在tf1.6以后官方的tf包都是用AVX编译的,因此如果cpu比较老(1156平台,775平台及更早),都是没这个指令集的,有几个方法可以解决这个问题: 1.使用Docker配置:在windows上显得有点zz,还要先配一个虚拟机,然后上面跑docker,如果要弄notebook还要配置许多其他的东西,我简单了解了下就扔了,我就这么一张卡打游戏,所以就只打算在win上配一下练练而已,不想这么麻烦。 2.自己编译tf:这个说实话我比较担心的是后续的环境管理的问题,所以感觉有些不便,不过这是一个绝对适配自己机器的方案,想要多了解一下的可以移步官方文档 3.使用第三方重新编译好的版本:这个比较简单明了,环境管理也比较方便,主要是用fo40225编译好的版本,截至20191007,尚未推出tensorflow2.0gpusse版本 现在我的远程服务器down掉了,不能确定以下安装方法是否有效,之前虽然配过一次,虽然最后成了,但是过程非常不顺利,以下安装方法是根据自己的记忆和理解复现的,可能会有各种各样的bug,不过还是希望有效,测试成功以后会更新本文,另外买新不买旧,不要再捡1156和775的垃圾啦! 类型型号MotherboardASRock P55 ProCPUX3440GPUGTX780内存8+2G电源COOLER MASTER GX550 接下来默认存在一定的conda基础,会简单的配置环境,并且已经添加了清华源或其他源 目标:tensorflowgpu1.14+jupyter notebook 首先下载 https://github.com/fo40225/tensorflow-windows-wheel/tree/master/1.14.0/py37/GPU/cuda101cudnn76sse下的tensorflow_gpu-1.14.0-cp37-cp37m-win_amd64.whl conda create -n tfgpu114 python=3.7 #创建环境 conda activate tfgpu114 conda install cudatoolkit=10.1 cudnn=7.6 cd到你下载的whl文件的文件夹然后 pip3 install tensorflow_gpu-1.14.0-cp37-cp37m-win_amd64.whl pip3 install -U numpy==1.16.4 jupyter的远程访问 conda install jupyter #安装 jupyter notebook --generate-config #生成配置文件,在C:\Users\you\.jupyter\jupyter_notebook_config.json from notebook.auth import passwd passwd() #根据提示生成一个密码的hash值 需要更改的部分 c.NotebookApp.allow_remote_access = True c.NotebookApp.ip='*' c.NotebookApp.password = u'sha:ce...刚才复制的那个密文' c.NotebookApp.open_browser = False c.NotebookApp.port =8899 #可自行指定一个端口, 访问时使用该端口 也可以远程启动 jupyter notebook --ip=your.

Error: insufficient funds for gas * price + value

区块链交易时,这个错误是最容易出现的,通常这代表着你的钱是不够的。 value代表着你要转的账,gas*price代表着付给矿工的费用,如果你的总费用不足以支持它们的和,那么自然是会报错的。

源码阅读(18):Java中主要的Map结构——HashMap容器(中)

(接上文《源码阅读(17):红黑树在Java中的实现和应用》) 3.3、HashMap容器结构 上一篇文章我们讲解了红黑树的结构和基本操作,它属于HashMap容器重要的预备知识,现在我们可以正式开始介绍HashMap容器了。HashMap是一种Map容器,也就意味着HashMap中存储的数据对象都是以K-V键值对结构进行定义的,我们先基于JDK1.8中的源代码,介绍HashMap这个Map容器的基本构成。它包括了一个数组结构、一个链表结构和一个红黑树结构,如下图所示: 3.3.1、HashMap的基本构成 上图展示了HashMap容器的主要构造,我们可以发现HashMap容器的最基础结构是一个数组(变量名为table),这个数据的长度最小为16且可以增长,并且被要求必须以2的倍数进行数组容量的增长——这是一个非常有趣的现象,后文我们将对这个数据增长特性进行详细说明; 每个数组索引位上可能已存储K-V键值对也可能没有存储任何对象(为null);当数组索引位上存储着对象时,如果这个对象是HashMap.Node类的实例,那么将以这个索引位为开始结点构造一个单向链表结构;如果这个对象是HashMap.TreeNode类的实例,那么将从这个索引位为根结点,构造一棵红黑树。红黑树相对于单向链表来说,一个显而易见的特点就是前者进行查找操作时,其时间复杂度更低,对于红黑树的详细介绍,将在本文后续内容中展开。 3.3.2、HashMap中的链表 HashMap容器中,使用HashMap.Node类的实例构造单向链表(中的每一个结点),代码如下所示: /** * Basic hash bin node, used for most entries. (See below for * TreeNode subclass, and in LinkedHashMap for its Entry subclass.) */ static class Node<K,V> implements Map.Entry<K,V> { // 该属性存储了本K-V键值对信息排列在HashMap容器中所依据的hash计算结果 // 它的赋值过程请参考HashMap容器中的newNode()方法和replacementNode()方法 final int hash; // 记录本K-V键值对信息的键信息,由于K-V键值对信息在HashMap容器的排列位置完全参考键信息 // 所以K-V键值对信息一旦完成初始化动作,就不允许变更了 final K key; // 记录本K-V键值对信息的值信息 V value; // 由于需要使用本类的对象构造单向链表,所以需要next属性去存储单向链表中当前结点的下一个结点 Node<K,V> next; Node(int hash, K key, V value, Node<K,V> next) { this.

Linux系统结构和硬盘结构1.0

硬盘结构 硬盘结构 文件系统结构,理解文件系统,要从文件储存说起。 硬盘结构: 磁盘内部是真空的吗? 磁盘内部不是真空,只不过里面的空气很干净。如果是真空,还不利于散热 磁盘相关专业术语: 硬盘的内部是金属盘片,将圆形的盘片划分成若干个扇形区域,这就是扇区。若干个扇区就组成整个盘片。为什么要分扇区?是逻辑化数据的需要,能更好的管理硬盘空间。 以盘片中心为圆心,把盘片分成若干个同心圆,那每一个划分圆的“线条”,就称为磁道。 硬盘内的盘片有两个面,都可以储存数据,而硬盘内的盘片往往不止一张,常见的有两张,那么,两张盘片中相同位置的磁道,就组成一个“柱面”,盘片中有多少个磁道,就有多少个柱面。盘片两面都能存数据,要读取它,必须有磁头,所以,每一个面,都有一个磁头,一张盘片就有两个磁头。 硬盘的存储容量=磁头数×磁道(柱面)数×每道扇区数×每道扇区字节数。 磁道从外向内自0开始顺序进行编号,各个磁道上的扇区数是在硬盘格式化时确定的。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 比较古老的CHS (Cylinder/Head/Sector :磁头(Heads)、柱面(Cylinder)、扇区(Sector))结构体系. 因为很久以前,在硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有相同的扇区数,由此产生了所谓的3D参数,即是磁头数(Heads)、柱面数(Cylinders)、扇区数(Sectors)以及相应的3D寻址方式。 如上的磁盘结构有没有问题??? 这种结构有问题: 以前老式的磁盘,每个磁道的扇区都一样,这样外磁道整个弧长要大于内部的扇区弧长,因而其磁记录密度就要比内部磁道的密度要小。最终,导致了外部磁道的空间浪费。 如查你磁盘设计工程师,你打算怎么解决? 你选择下面哪种方法? 方法1:每个磁道的宽度不一样,从而让每个扇区面积尽量一样 方法2:不再一刀切,让磁道中的扇区数量可以不一样 现在硬盘都采用这种技术:ZBR(Zoned Bit Recording)区位记录 (Zoned zōnd ) Zoned-bit recording(ZBR 区位记录)是一种物理优化硬盘存储空间的方法,此方法通过将更多的扇区放到磁盘的外部磁道而获取更多存储空间。 ZBR磁盘扇区结构示意图 从外面读数据快? 还是从里面快? 使用ZBR 区位记录法做的磁盘有以下特点:读外圈的数据快,读内圈的数据慢,所以测试硬盘经常看到读取速度越来越慢的曲线图就很正常了。 windows安装系统的C盘或Linux boot分区一般安装在磁盘最外面还是最里面? windows : C盘安装最外,速度也是最快 Linux : boot分区和 swap分区,装最外面 磁盘写数据时,先从外面往里。 簇和block 簇类似于Linux系统中的block 例:在win10系统,新一个文本文件“新建文本文档.txt”,只输入aa两个字符。 右击属性查看大小: 说明我的NTFS文件系统中默认的簇大小为4KB [root@localhost ~]# stat /etc/passwd #查看Linux block 大小 文件:"/etc/passwd" 大小:885 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:16777643 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:system_u:object_r:passwd_file_t:s0 最近访问:2019-10-07 16:48:11.

manjaro 安装 tim 后无法输入中文

cd /opt/deepinwine/tools sudo chmod 777 run.sh vim run.sh 在一开始的注释下输入 export GTK_IM_MODULE="fcitx" export QT_IM_MODULE="fcitx" export XMODIFIERS="@im=fcitx" 然后重启 转载于:https://www.cnblogs.com/Jiaaaaaaaqi/p/11631420.html

Angle Beats Gym - 102361A(计算几何)

Angle Beats \[ Time Limit: 4000 ms \quad Memory Limit: 1048576 kB \] 题意 给出 \(n\) 个初始点以及 \(q\) 次询问,每次询问给出一个询问点 \(Q\),求包括 \(Q\) 点的直角三角形有多少个。保证 \(n+q\) 个点都不重复。 思路 对于每次询问,当 \(Q\) 为直角点时,以 \(Q\) 为原点,对 \(n\) 个点做象限极角排序,然后用双指针 \(L\)、 \(R\) 维护直角三角形的个数。 \(L\) 指针用来枚举其中的一条直角边, \(R\) 指针用来寻找在另一条直角边上的点有多少个,每次找 \(QL\) 这条边逆时针方向的另一条边\(QR\)。所以当 \(L\) 往逆时针转动时,\(R\) 也会往逆时针转动,那么就可以用双指针直接维护出来了,特别注意一下多个点在同一条直线上的情况就可以了。若 \(Q\) 不是直角点时,可以离线处理,把 \(n+q\) 个点全部存出来,然后枚举以 \(n\) 个初始点为直角点时,对哪些的 \(Q\) 点有贡献,维护方法同上。 最后的复杂度为 \(O\left(qnC_1 + n(n+q)C_2\right)\),\(C_1、C_2\) 取决于在枚举直角点为原点后,到原点在同一条直线上的点数量。 我试过把 \(n+q\) 个节点全部提取出来,然后暴力枚举每个点为直角点的情况,但是这样复杂度会 \(T\)。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; const int maxn = 1e4+10; struct Point { ll x, y; int id; } p[maxn], be[maxn]; int n, m; int ans[maxn]; int cmp1(Point a, Point b) { ll d = a.

scrapy extract_first() get() extract() getall()

get() == extract_first() 返回的是一个list,里面包含了多个string,如果只有一个string,则返回['我很孤独']这样的形式 getall() == extract() 返回的是string,list里面第一个string In [17]: type(response.xpath('//*[@id="waterfall"]/div[1]/a/div[2]/span/text()')) Out[17]: scrapy.selector.unified.SelectorList In [18]: type(response.xpath('//*[@id="waterfall"]/div[1]/a/div[2]/span/text()')[0]) Out[18]: scrapy.selector.unified.Selector In [19]: response.xpath('//*[@id="waterfall"]/div[1]/a/div[2]/span/text()')[0].get() Out[19]: 'DNW-025 彼女が制服に着替えたら。5' In [20]: response.xpath('//*[@id="waterfall"]/div[1]/a/div[2]/span/text()')[0].getall() Out[20]: ['DNW-025 彼女が制服に着替えたら。5'] In [21]: response.xpath('//*[@id="waterfall"]/div[1]/a/div[2]/span/text()')[0].extract() Out[21]: 'DNW-025 彼女が制服に着替えたら。5' In [22]: response.xpath('//*[@id="waterfall"]/div[1]/a/div[2]/span/text()')[0].extract_first() --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-22-9eada5e1e561> in <module> ----> 1 response.xpath('//*[@id="waterfall"]/div[1]/a/div[2]/span/text()')[0].extract_first() AttributeError: 'Selector' object has no attribute 'extract_first' In [23]: response.xpath('//*[@id="waterfall"]/div[1]/a/div[2]/span/text()')[0] Out[23]: <Selector xpath='//*[@id="waterfall"]/div[1]/a/div[2]/span/text()' data='DNW-025 彼女が制服に着替えたら。5'>

java秋招题小结3

1.电脑硬盘转速 一个7200(转/每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋转半圈)。按照同样的计算方法,一个5400(转/每分钟)的硬盘,平均旋转延迟时间为60×1000÷5400÷2=5.56毫秒。二者相比,7200转理论上比5400转快15%,但是实际速度只比后者提高了不到百分之十,离很多人预想的三分之一相距甚远。转速高的缺点主要有,声音较大、寿命较短、热量较高。 2.32位操作系统最多可以支持多大内存 最大支持内存和操作系统有直接关系,即使是64位处理器,使用32位操作系统支持的内存也最多为2的32次方,就是4G。在windows 32位操作系统中最大只识别3.25-3.75之间,根据windows版本不同而不同。 而64位操作系统的寻址能力就是2的64次方,也就是17179869184G,当然这只是理论值,实际中不可能用到这么大的内存,目前64位windows系统最大只支持128G。而当前主流主板只能加到16G 内存识别的多少是和计算机cpu的寻址有关。32位的操作系统理论上可以识别2的32次方个地址(4294967296B=4GB),但计算机还要接外设(鼠标,打印机,键盘,网卡,声卡,显卡等等)这些外设也是需要占用地址空间的。 普通家用版32位操作系统最大支持4GB内存。 企业版的32 位操作系统最高可支持32GB内存。 数据中心版的32 位操作系统最高支持64GB内存。 32位操作系统针对的32位的CPU设计。CPU的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推。 cpu处理计算的时候“数据”和“指令”是不同对待的。8位的CPU,一次只能处理一个8位的“数据”或者一个8位的"指令"。比如'00001101',又比如:“+1”这个运算,你要先指示CPU做“+”,完成后再输入“1”数据给CPU。 由于8位的CPU不利于计算机的发展。后来推出了16位的CPU,我们就可以一次处理两个字节(16位)的数据了,比如“加1”这个命令。“加”是一个指令,占用8个位,余下的8位我们可以存放数据“1”了。 32位的CPU就更加方便了,我们就可以一次处理一个a=a+b这样的命令了。优点:简化了软件设计的复杂度。缺点:硬件设计更加复杂,计算速度下降。一般来讲32位的CPU对于我们来讲是最理性的CPU,对于软件开发来讲足够了,但是内存寻址空间在2的32次方 = 4294967296Byte = 4G左右。 转载于:https://www.cnblogs.com/jiexing/p/11627360.html

java秋招题小结1

1.linux的常用命令 0:关机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system 3:完全多用户 5:图形化 6:重启 用法很简单init 0 就可以关机。 shutdown -h now :立刻关机 sync :把内存中的数据写到磁盘中(关机、重启前都需先执行sync) who 或 w : 查看所有终端 clear :清空命令行 ifconfig :显示或设置网卡(查ip等)(类似windows中ipconfig) ping -c 3 www.baidu.com :测试百度与本机的连接情况( -c 3表示测试3次) df -h :显示磁盘的空间使用情况 ps aux|grep firefox :获取火狐的进程号(PID)(可查看进程占用cpu、内存百分比及进程触发指令的路径)kill -9 进程号 :强制杀死进程 cd - :返回上次所在目录cd / :返回根目录 (绝对路径) mkdir dir1 :创建目录(dir1)(mkdir为make directory的缩写)mkdir -p ./dir1/dir2 :递归创建目录(-p:父目录不存在时,同时建立) touch a.txt :创建文件a.txt ​rm:可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉; 语法:rm (选项)(参数)(注:如果参数中含有目录,则必须加上-r选项); rm 文件 :删除文件rm -r 目录或文件 :删除目录(及目录下所有文件)(非空也可以)rm -rf 目录或文件 :强制删除,如:rm -rf * 为删除当前目录下所有文件 mv -t .

pandas 不覆盖写入 excel 同一张 Sheet 表

这里解决的问题是: 用 Pandas 可以不覆盖的写入同一张 Sheet 表, 当然写入不同的表也可以实现, 在 stackoverflow 上看到的代码, 我试了试可以,感谢 stackoverflow 的 MaxU 这里在 jupyter notebook 中实现,python 版本 3.7 我又把全部代码粘贴到vscode中直接运行, 报了未安装openpyxl模块的错误,安装openpyxl模块后,可正常运行 整合起来的版本:https://github.com/findQin/pandas-Excel 我自己写了测试代码,在下面, 第一个部分的代码就是从 stackoverflow 上 copy 的函数 append_df_to_excel() , 第二个部分的代码测试行不行,分别写入Sheet1表(多次写入不覆盖),Sheet2表。 最后有成功写入的截图为证。 这是 StackOverflow 网页链接 append_df_to_excel('d:/temp/test.xlsx', df, sheet_name='Sheet2', index=False) import pandas as pd from openpyxl import load_workbook def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None, truncate_sheet=False, **to_excel_kwargs): """ Append a DataFrame [df] to existing Excel file [filename] into [sheet_name] Sheet. If [filename] doesn't exist, then this function will create it.

Java 之 Response 文件下载案例

文件下载需求: 1. 页面显示超链接 2. 点击超链接后弹出下载提示框 3. 完成图片文件下载 分析过程: 1. 超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出下载提示框。不满足需求 2. 任何资源都必须弹出下载提示框 3. 使用响应头设置资源的打开方式: content-disposition:attachment;filename=xxx 步骤: 1. 定义页面,编辑超链接href属性,指向Servlet,传递资源名称filename 2. 定义Servlet 1. 获取文件名称 2. 使用字节输入流加载文件进内存 3. 指定response的响应头: content-disposition:attachment;filename=xxx 4. 将数据写出到response输出流 代码实现: 下载页面: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>文件下载</title> 6 </head> 7 <body> 8 9 10 <a href="/day13/img/狐狸.jpg">图片1</a> 11 12 <a href="/day13/img/2.jpg">图片2</a> 13 14 <a href="/day13/img/1.avi">视频</a> 15 <hr> 16 17 18 <a href="/day13/downloadservlet?filename=狐狸.jpg">图片1</a> 19 20 <a href="

超详细的SpringCloud底层原理

天天喊着微服务,微服务的,微服务怎么牛逼,微服务有多强大,学好微服务三天不用吃饭的那种?那我心里不禁一紧微服务到底是个啥?往下看!总有东西有点帮助! 先来个简单的介绍吧! SpringCloud框架 针对这个架构图我分层介绍一下: 1、是web服务器的选型,这个我选择的是nginx+keepalived,haproxy也是一个选择,但是haproxy在反向代理处理跨域访问的时候问题很多。所以我们nginx有些地方做了keep-alive模式处理,减少了三次握手的次数,提高了连接效率。keepalived做nginx的负载,虚拟一个vip对外,两个nginx做高可用,nginx本身反向代理zuul集群。 2、api gateway,这里的zuul很多人诟病,说是速度慢推荐直接用nginx,这里我还是推荐使用zuul的,毕竟zuul含有拦截器和反向代理,在权限管理、单点登录、用户认证时候还是很有用的,而且zuul自带ribbon负载均衡,如果你直接用nginx,还需要单独做一个feign或者ribbon层,用来做业务集群的负载层,毕竟直接把接口暴露给web服务器太危险了。这里zuul带有ribbon负载均衡和hystrix断路器,直接反向代理serviceId就可以代理整个集群了。 3、业务集群,这一层我有些项目是分两层的,就是上面加了一个负载层,下面是从service开始的,底层只是单纯的接口,controller是单独一层由feign实现,然后内部不同业务服务接口互调,直接调用controller层,只能说效果一般,多了一次tcp连接。所以我推荐合并起来,因为做过spring cloud项目的都知道,feign是含有ribbon的,而zuul也含有ribbon,这样的话zuul调用服务集群,和服务集群间接口的互调都是高可用的,保证了通讯的稳定性。Hystrix还是要有的,没有断路器很难实现服务降级,会出现大量请求发送到不可用的节点。当然service是可以改造的,如果改造成rpc方式,那服务之间互调又是另外一种情况了,那就要做成负载池和接口服务池的形式了,负载池调用接口池,接口池互相rpc调用,feign client只是通过实现接口达到了仿rpc的形式,不过速度表现还是不错的。 4、redis缓存池,这个用来做session共享,分布式系统session共享是一个大问题。同时呢,redis做二级缓存对降低整个服务的响应时间,并且减少数据库的访问次数是很有帮助的。当然redis cluster还是redis sentinel自己选择。 5、eurake注册中心这个高可用集群,这里有很多细节,比如多久刷新列表一次,多久监测心跳什么的,都很重要。 6、spring admin,这个是很推荐的,这个功能很强大,可以集成turbine断路器监控器,而且可以定义所有类的log等级,不用单独去配置,还可以查看本地log日志文件,监控不同服务的机器参数及性能,非常强大。它加上elk动态日志收集系统,对于项目运维非常方便。 7、zipkin,这个有两种方式,直接用它自己的功能界面查看方式,或者用stream流的方式,由elk动态日志系统收集。但是我必须要说,这个对系统的性能损害非常大,因为链路追踪的时候会造成响应等待,而且等待时间非常长接近1秒,这在生产环境是不能忍受的,所以生产环境最好关掉,有问题调试的时候再打开。 8、消息队列,这个必须的,分布式系统不可能所有场景都满足强一致性,这里只能由消息队列来作为缓冲,这里我用的是Kafka。 9、分布式事物,我认为这是分布式最困难的,因为不同的业务集群都对应自己的数据库,互相数据库不是互通的,互相服务调用只能是相互接口,有些甚至是异地的,这样造成的结果就是网络延迟造成的请求等待,网络抖动造成的数据丢失,这些都是很可怕的问题,所以必须要处理分布式事物。我推荐的是利用消息队列,采取二阶段提交协议配合事物补偿机制,具体的实现需要结合业务,这里篇幅有限就不展开说了。 10、config配置中心,这是很有必要的,因为服务太多配置文件太多,没有这个很难运维。这个一般利用消息队列建立一个spring cloud bus,由git存储配置文件,利用bus总线动态更新配置文件信息。 11、实时分布式日志系统,logstash收集本地的log文件流,传输给elasticsearch,logstash有两种方式,1、是每一台机器启动一个logstash服务,读取本地的日志文件,生成流传给elasticsearch。2、logback引入logstash包,然后直接生产json流传给一个中心的logstash服务器,它再传给elasticsearch。elasticsearch再将流传给kibana,动态查看日志,甚至zipkin的流也可以直接传给elasticsearch。这个配合spring admin,一个查看动态日志,一个查看本地日志,同时还能远程管理不同类的日志级别,对集成和运维非常有利。 最后要说说,spring cloud的很多东西都比较精确,比如断路器触发时间、事物补偿时间、http响应时间等,这些都需要好好的设计,而且可以优化的点非常多。比如:http通讯可以使用okhttp,jvm优化,nio模式,数据连接池等等,都可以很大的提高性能。 还有一个docker问题,很多人说不用docker就不算微服务。其实我个人意见,spring cloud本身就是微服务的,只需要jdk环境即可。编写dockerfile也无非是集成jdk、添加jar包、执行jar而已,或者用docker compose,将多个不同服务的image组合run成容器而已。但是带来的问题很多,比如通讯问题、服务器性能损耗问题、容器进程崩溃问题,当然如果你有一套成熟的基于k8s的容器管理平台,这个是没问题的,如果没有可能就要斟酌了。而spring cloud本身就是微服务分布式的架构,所以个人还是推荐直接机器部署的,当然好的DevOps工具将会方便很多。 作者github地址:https://github.com/cyc3552637 引言 面试中面试官喜欢问组件的实现原理,尤其是常用技术,我们平时使用了SpringCloud还需要了解它的实现原理,这样不仅起到举一反三的作用,还能帮助轻松应对各种问题及有针对的进行扩展。 以下是《Java深入微服务原理改造房产销售平台》课程讲到的部分原理附图,现在免费开放给大家,让大家轻松应对原理面试题。 服务注册发现组件Eureka工作原理 1、Eureka 简介: Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。 Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。 1.基本原理 上图是来自eureka的官方架构图,这是基于集群配置的eureka; - 处于不同节点的eureka通过Replicate进行数据同步 - Application Service为服务提供者 - Application Client为服务消费者 - Make Remote Call完成一次服务调用 服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。

laravel 中将一对多关联查询的结果去重处理

先交代下数据表结构 主表(订单表)order数据 ord_idorder_sn1EX2019100123458 其中主键为order_id(订单id) 子表(门票表)order_item数据 ord_ite_idord_idexhibit_sntype11EXSN20191001001121EXSN20191001002131EXSN201910010031 主表与子表之间通过 ord_id进行关联 实现:通过通过子表的 type(门票类型)查询主表中的订单编号 第一种尝试: select DISTINCT `order`.ord_id from `order` INNER JOIN order_item on order.ord_id = order_item.ord_id where type = 1; 这种方法可以实现但是在laravel中如果想分页的话需要这么使用 DB::table(DB::raw("sql语句"))->paginate(15); 但是这样的话我们相当于使用的原生sql语句,但是如果在添加条件的话只能去拼接sql语句啦 第二种尝试: select `order`.ord_id,`order`.order_sn from `order` INNER JOIN (select distinct ord_id from order_item) r on `order`.ord_id=r.ord_id 在larave中使用 Order::join(DB::raw("(select distinct order_item.ord_id item_ord_id,type from order_item) ".env("DB_PREFIX")."bb"),"bb.item_order_id","exhibit_order.order_id")->paginate(15); 这样我们可以继续使用 where() 方法来添加条件 转载于:https://www.cnblogs.com/itsuibi/p/11617512.html

对 Error-State Kalman Filter 的理解

我对 Error-State Kalman Filter 的理解。本文的主要参考文献是 Joan Sola 的 《Quaternion kinematics for the error-state Kalman filter》[1],当然是这本小册子,做 VIO 的人都会熟读这本册子。 1. ErKF 与 EFK 的区别 关于 Error-State Kalman Filter (ErKF) 与 Extended Kalman Filter (EKF) 之间的联系与区别可以参考论文 [2],论文 [2] 可以帮助理解 Error-State Kalman Filter,现在引用其中的一些文字以说明 EKF 与 ErKF 之间的区别。 论文 [2] 的 Abstract: EKFs operate by linearizing the nonlinear model around the current reference trajectory and then designing the Kalman filter gain for the linearized model.

java生成Cron表达式

1、上代码 1 /** 2 * @ClassName: CronUtil 3 * @Description: Cron表达式工具类 目前支持三种常用的cron表达式 1.每天的某个时间点执行 例:12 12 12 * * 4 * ?表示每天12时12分12秒执行 2.每周的哪几天执行 例:12 12 12 ? * 1,2,3表示每周的周1周2周3 5 * ,12时12分12秒执行 3.每月的哪几天执行 例:12 12 12 1,21,13 * ?表示每月的1号21号13号 6 * 12时12分12秒执行 7 * @author 8 * @date 9 * 10 */ 11 public class CronUtil { 12 13 /** 14 * 15 * 方法摘要:构建Cron表达式 16 * 17 * @param rate 频率 0秒;1分;2小时;3日;4月 18 * @param cycle 周期 19 * @return String 20 */ 21 public static String createLoopCronExpression(int rate, int cycle) { 22 String cron = "

记录---百度地图marker中label现隐

1 var marker = new BMap.Marker(point, { 2 icon: new BMap.Icon('', new BMap.Size(16, 16), { 3 anchor: new BMap.Size(9, 9) 4 }) 5 }) 6 7 var content = '<span>'+xxxxx+'</span> 8 9 var label = new BMap.Label(content, { 10 offset: new BMap.Size(0, 0) 11 }) 12 label.setStyle({ 13 border: '1px solid rgba(204, 204, 204, 0)', 14 color: 'rgb(0, 255, 255)', 15 borderRadius: '10px', 16 padding: '5px', 17 background: 'rgba(21, 21, 21, 0.

pyhthon 处理pdf 合集

查永春的CSDN博客 https://blog.csdn.net/zyc121561/column/info/25026 提取指定的PDF表格保存到Excel Python提取PDF内容(文本、图像、线条等) 提取PDF内容保存到Excel--Python实现 PDF内容替换--Python实现 提取PDF关键字并写入Excel Python提取PDF电子发票内容保存到Excel 提取PDF内容保存到Excel--Python3实现 转载于:https://www.cnblogs.com/angle6-liu/p/11613033.html

雷达专业找工作总结

今年找工作,研究方向为雷达信号处理,投的公司不多,了解的有雷达相关岗位需求的公司如下,欢迎补充: 一、大中厂/国企 1、海康威视 (1)智能传感算法工程师 此岗位也招毫米波雷达、激光雷达开发,属于海康研究院。 (2)算法工程师(毫米波) 海康面试: 面试官人很好,一轮技术面+一轮HR面,表现好的会加一面;主要介绍项目和简单的编程考察。 2、大疆 (1)雷达算法工程师 工作职责: 1. 负责雷达算法的设计和优化; 2. 参与雷达天线方案设计,参与制定雷达天线设计指标; 3. 负责产品功能、性能测试用例的设计和编写; 4. 协助嵌入式工程师进行算法移植; 5. 进行相关行业及竞品信息搜集和分析。 任职要求: 1. 硕士及以上学历,有良好的数学基础; 2. 掌握雷达系统的原理和方法,能熟练进行雷达相关算法的仿真验证; 3. 熟练使用MATLAB/C进行算法开发; 4. 有FMCW雷达信号处理或者毫米波雷达开发经验者优先; 5. 有良好的抗压能力。 (2)雷达嵌入式开发工程师(毫米波方向) ——具体岗位要求,查看招聘官网 大疆招聘:雷达算法工程师hc很少,全国也就2个左右吧;大疆招聘比较早,6月底开始,及时关注。 3、华域汽车 雷达算法工程师 工作职责:负责毫米波雷达算法的开发、测试和验证 。 招聘要求: 1.熟悉雷达的体制和工作原理; 2.熟练掌握数字信号处理的专业知识,熟悉雷达的信号处理和数据处理的常用方法; 3.有基于 FMCW 、 FSK 、 LFMSK 、 2D FFT 波形的雷达算法开发经验者优先; 4.熟练使用 MATLAB Simulink / Stateflow 软件进行算法仿真、设计和验证; 5.熟练掌握 Visual C++ 。 华域汽车面试:招的人很少,听说是“神仙”面试,各种推公式,不太推荐去。 4、瑞声科技 5、国睿科技 二、研究所 1、中电14所 南京,学历要求比较高,研发部门只招985博硕士吧。 2、中电38所 合肥,招博士,硕士招的不多。

linux shell 中"2>&1"含义-完美理解-费元星

笨鸟先飞,先理解。 脚本是: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result ,然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了.其中0表示键盘输入 1表示屏幕输出 2表示错误输出.把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。 command >out.file 2>&1 & command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个& , 是让该命令在后台执行。 试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出; 换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出. 你可以用 ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1; ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中; ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了; ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。 为何2>&1要写在后面? command > file 2>&1 首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。 command 2>&1 >file 2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。 用strace可以看到: 1. command > file 2>&1 这个命令中实现重定向的关键系统调用序列是: open(file) == 3

Python——实现字符串反向输出的5种方法

喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! Python——实现字符串反向输出的5种方法 方法1: for 循环 1 letter_num = list(input('please input some characters:')) 2 list_num = [] 3 def convert_order(): 4 for i in range(len(letter_num)):#根据列表的长度决定遍历的次数 5 list_num.append(letter_num[len(letter_num) - i - 1])#把letter_num中的值倒序添加到新列表中 6 print(''.join(list_num))#把''无间隔符添加到list_num中每个元素的中间,总体效果就是把列表转换为字符串 7 8 convert_order() 我是一名python开发工程师,整理了一套python的学习资料,从基础的python脚本到web开发、爬虫、 数据分析、数据可视化、机器学习、面试真题等。想要的可以进群:688244617免费领取 方法2: 递归 + 切片 1 # 方法二,递归,切片实现,巧妙 2 def des_output(s):#实现的功能是依次取最后一个元素 3 if (len(s) > 0): 4 print(s[-1],end ='')#负数下标,先打印最后一个元素 5 des_output(s[0:-1])#从第一个元素到倒数第二个元素(从第一个元素到倒数第三个元素...) 6 7 s = input('string:') 8 des_output(s) 方法3:reverse()方法 1 #方法三,用reverse()方法对列表操作取反,join()方法使列表转换为字符串 2 str = list(input('input a string:')) 3 str.

SparkStreaming消费kafka中的数据保存到HBase中简单demo

概述 数据处理流程:kafka–>spark streaming -->hbase 最近在做数据处理,但是通过java api进行处理的,目前想通过spark去做处理,这里记下了一个简单的实现,但是生产上肯定不是那么简单的.后面会说有哪些优化的点. 环境 jdk 1.8 cdh:1.2.0-cdh5.16.1 scala:2.11.8 KAFKA-3.1.0-1.3.1.0 pom.xml <properties> <scala.version>2.11.8</scala.version> <spark.version>2.2.0</spark.version> <hadoop.version>2.6.0-cdh5.7.0</hadoop.version> </properties> <repositories> <!--<repository>--> <!--<id>scala-tools.org</id>--> <!--<name>Scala-Tools Maven2 Repository</name>--> <!--<url>http://scala-tools.org/repo-releases</url>--> <!--</repository>--> <repository> <id>cloudera</id> <name>cloudera</name> <url>https://repository.cloudera.com/artifactory/cloudera-repos</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>scala-tools.org</id> <name>Scala-Tools Maven2 Repository</name> <url>http://scala-tools.org/repo-releases</url> </pluginRepository> </pluginRepositories> <dependencies> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.2.0-cdh5.16.1</version> </dependency> <!--scala depedency--> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.11</artifactId> <version>${spark.version}</version> </dependency> <!--kafka dependency--> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka-0-10_2.11</artifactId> <version>${spark.

python 检查是否是None

python 检查是否是None def check_data(self, data): temp = str(data) if temp is None: return '暂无' else: return data

java操作hadoop_java api使用分享

文章目录 文件系统对象FileSystem列出文件创建目录删除文件下载文件上传文件重命名文件完整程序 文件系统对象FileSystem Configuration conf = new Configuration(); // 获取配置文件对象 conf.set("fs.defaultFS", "hdfs://localhost:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem fsSource = FileSystem.get(URI.create("hdfs://localhost:9000"), conf, user); // 获取文件系统对象 列出文件 public void listfiles(String where) throws IOException, InterruptedException { Configuration conf = new Configuration(); // 获取配置文件对象 conf.set("fs.defaultFS", "hdfs://localhost:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem fsSource = FileSystem.get(URI.create("hdfs://localhost:9000"), conf, user); // 获取文件系统对象 try { RemoteIterator<LocatedFileStatus> iter = fsSource.listFiles(new Path(where.toString()), true); //这里的第二个参数true表示递归遍历,false反之 while (iter.hasNext()){ LocatedFileStatus file = iter.next(); String Path_file = file.getPath().toString(); // 获取文件目录 System.

源码阅读(17):红黑树在Java中的实现和应用

(接上文《源码阅读(16):Java中主要的Map结构——HashMap容器(上)》) 3.2、HashMap准备知识:红黑树 红黑树又称自平衡二叉查找树,由于其稳定的查找特性,红黑树在Java中有广泛的应用——例如我们将要讲解的TreeMap容器和当前正在讲解的HashMap容器都有红黑树的具体应用。红黑树的操作原理相对于我们已经讲解过的堆树要复杂一些,但也并不是说无法理解,读者只需要跟随本节的介绍思路进行理解,并自行动手对其中提到的关键点进行验证,即可掌握红黑树的基本原理。 在网络上也有一些介绍红黑树的资料,但部分资料生涩难懂,甚至有一部分资料存在明显的错误,无法实现红黑树的构造还原。本文将通过图文结合的方式,介绍红黑树构造的本质。 3.2.1、二叉查找树(二叉搜索树) 要讲解红黑树,就必须首先介绍二叉查找树,因为红黑树是二叉查找树在极端情况下,稳定其时间复杂度的一种优化结构。所谓二叉查找树是指这样一颗树: 首先它是一颗二叉树如果当前树的根结点存在左子树,则左子树上的任意结点的权值均小于当前根结点的权值如果当前树的根节点存在右子树,则右子树上的任意结点的权值均大于当前根结点的权值以此类推,以当前树上任何结点作为子树的根结点,则其左子树和右子树上的结点权值特点均满足以上第2点和第3点的描述二叉查找树上的结点,没有权值相等的两个结点。 请注意二叉查找树的定义和我们之前文章已经介绍过的堆树定义的区别,简单来说前者的定义更严格。针对以上对二叉查找树的定义,以下的树结构都是二叉查找树:

96秒破百亿,如何抗住双11高并发流量

2019年双十一,1 分 36 秒,交易额冲到 100 亿 !这个速度再次刷新天猫双 11 成交总额破 100 亿的纪录。 那么如何抗住双 11 高并发流量?接下来让我们一起来聊聊高可用的“大杀器”限流降级技术。 一、服务等级协议 我们常说的N个9,就是对SLA的一个描述。 SLA全称是ServiceLevel Agreement,翻译为服务水平协议,也称服务等级协议,它表明了公有云提供服务的等级以及质量。 例如阿里云对外承诺的就是一个服务周期内集群服务可用性不低于99.99%,如果低于这个标准,云服务公司就需要赔偿客户的损失。 1.1 做到4个9够好了吗 对互联网公司来说,SLA就是网站或者API服务可用性的一个保证。 9越多代表全年服务可用时间越长服务更可靠,4个9的服务可用性,听起来已经很高了,但对于实际的业务场景,这个值可能并不够。 我们来做一个简单的计算,假设一个核心链路依赖20个服务,强依赖同时没有配置任何降级,并且这20个服务的可用性达到4个9,也就是99.99%, 那这个核心链路的可用性只有99.99的20次方 = 99.8%, 如果有10亿次请求则有3,000,000次的失败请求 理想状况下,每年还是有17小时服务不可用 这是一个理想的估算,在实际的生产环境中,由于服务发布,宕机等各种各样的原因,情况肯定会比这个更差, 对于一些业务比较敏感的业务,比如金融,或是对服务稳定要求较高的行业,比如订单或者支付业务,这样的情况是不能接受的。 1.2 微服务的雪崩效应 除了对服务可用性的追求,微服务架构一个绕不过去的问题就是服务雪崩。 在一个调用链路上,微服务架构各个服务之间组成了一个松散的整体,牵一发而动全身, 服务雪崩是一个多级传导的过程,首先是某个服务提供者不可用,由于大量超时等待,继而导致服务调用者不可用,并且在整个链路上传导,继而导致系统瘫痪。 二、限流降级怎么做 如同上面我们分析的,在大规模微服务架构的场景下,避免服务出现雪崩,要减少停机时间,要尽可能的提高服务可用性。 提高服务可用性,可以从很多方向入手,比如缓存、池化、异步化、负载均衡、队列和降级熔断等手段。 缓存以及队列等手段,增加系统的容量 限流和降级则是关心在到达系统瓶颈时系统的响应,更看重稳定性 缓存和异步等提高系统的战力,限流降级关注的是防御。 限流和降级,具体实施方法可以归纳为八字箴言,分别是限流,降级,熔断和隔离。 2.1 限流和降级 限流顾名思义,提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。 限流需要结合压测等,了解系统的最高水位,也是在实际开发中应用最多的一种稳定性保障手段。 降级则是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。 从降级配置方式上,降级一般可以分为主动降级和自动降级。 主动降级是提前配置,自动降级则是系统发生故障时,如超时或者频繁失败,自动降级。 其中,自动降级,又可以分为以下策略: 超时降级 失败次数降级 故障降级 在系统设计中,降级一般是结合系统配置中心,通过配置中心进行推送,下面是一个典型的降级通知设计 2.2 熔断隔离 如果某个目标服务调用慢或者有大量超时,此时熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。 熔断一般需要设置不同的恢复策略,如果目标服务情况好转则恢复调用。 服务隔离与前面的三个略有区别,我们的系统通常提供了不止一个服务,但是这些服务在运行时是部署在一个实例,或者一台物理机上面的, 如果不对服务资源做隔离,一旦一个服务出现了问题,整个系统的稳定性都会受到影响! 服务隔离的目的就是避免服务之间相互影响。 一般来说,隔离要关注两方面,一个是在哪里进行隔离,另外一个是隔离哪些资源。 何处隔离 一次服务调用,涉及到的是服务提供方和调用方,我们所指的资源,也是两方的服务器等资源,服务隔离通常可以从提供方和调用方两个方面入手。 隔离什么 广义的服务隔离,不仅包括服务器资源,还包括数据库分库,缓存,索引等,这里我们只关注服务层面的隔离。 2.3 降级和熔断的区别 服务降级和熔断在概念上比较相近,通过两个场景,谈谈我自己的理解。

小学生四则运算300题-python实现

题目要求:给小学生出的100以内四则运算,有两个运算符,保证每个步骤运算结果都能整除,并且在100以内。 第一次作业代码实现: import random oper = ['+','-','*','/'] i = 0 while i<300: a = random.randint(1,99) b = random.randint(1,99) c = random.randint(1,99) num = random.randint(0,3) a = str(a) b = str(b) c = str(c) res = a + oper[num] + b + oper[num] + c m = eval(res) res1 = a + oper[num] + b n = eval(res1) if (m<100) & (m>0) & isinstance(m,int) & (n>0) & isinstance(n,int): print(res,'=',m) i+=1 选择python就是因为字符转数字,并且算出结果很方便,但是以上的代码存在问题:16行只保证了运算结果和前两位运算在100以内,像5+1/4这样的式子也能出现。

etcd租约机制

新建租约 新建一个过期时间为120s的租约 # etcdctl lease grant 120 lease 018f6d7bb11aba0d granted with TTL(120s) 查看新建的租约信息 # etcdctl lease list found 1 leases 018f6d7bb11aba0d # etcdctl lease timetolive 018f6d7bb11aba0d --keys lease 018f6d7bb11aba0d granted with TTL(120s), remaining(99s), attached keys([]) 新建key,并为该key指定租约 # etcdctl put name alice --lease="018f6d7bb11aba0d" OK # etcdctl put name1 tina --lease="018f6d7bb11aba0d" OK # etcdctl lease timetolive 018f6d7bb11aba0d --keys lease 018f6d7bb11aba0d granted with TTL(120s), remaining(60s), attached keys([name name1]) # etcdctl get --prefix "

etcd常用命令-增删改查

增删改查key-values 插入数据测试 # etcdctl put name1 james # etcdctl put name11 alice # etcdctl put name12 seli # etcdctl put name2 jetty # etcdctl put name3 tom # etcdctl put name4 cris # etcdctl put avg_age 25 查询数据 按key值查询 # etcdctl get name1 name1 james 不显示key只限制values # etcdctl get --print-value-only name1 james 按key前缀查找 # etcdctl get --prefix name name1 james name11 alice name12 seli name2 jetty name3 tom name4 cris 按key的字节排序的前缀查找>= # etcdctl get --from-key name2 name2 jetty name3 tom name4 cris 按key的字节排序区间查找<= value < # etcdctl get name1 name3 name1 james name11 alice name12 seli name2 jetty 查找所有key # etcdctl get --from-key "

Element upload组件上传图片与回显图片

场景:新增商品时需要添加商品主图,新增成功之后可编辑 上传图片: <el-form-item label="专区logo:" style="height:160px"> <div class="img"> <el-upload action="https://testopenapi.nbdeli.com/crm/customer/saveChannelLogoFile" :limit="1" :on-preview="handlePictureCardPreview" :on-success="handleUploadSuccess" list-type="picture-card" :on-remove="handleRemove" :class="{disabled:uploadDisabled}" :file-list="fileList" > <i class="el-icon-plus"></i> </el-upload> <el-dialog :visible.sync="dialogVisible"> <img width="100%" :src="ruleForm.dialogImageUrl" alt /> </el-dialog> </div> <div class="imgSpan2">只能上传jpg/png文件,50X50px</div> </el-form-item> data(){ return{ uploadDisabled: false, logoId: "1", //专区logo id dialogVisible: false, fileList: [], ruleForm: { dialogImageUrl: "1", //专区logo 上传到后台之后,后台会返回一个id,只需要给后台传id,但是点击编辑的时候后台返回的是http地址 }, } } //删除图片 handleRemove(file, fileList) { console.log(file); this.uploadDisabled = false; }, //上传中 handlePictureCardPreview(file) { this.dialogImageUrl = file.url; console.log(this.dialogImageUrl); this.

一个屌丝程序猿的人生(一百零五)

3月份的北京,立春已经过去了将近一个月,天气渐渐转暖,虽然城市内到处都是高楼大厦,但仅从道路两旁的一点绿意盎然中也能发现,春天是真的到了。 林萧自从踏入职场以来,已经度过了4个多月的职业生涯。 这段时间里,林萧基本上所有的精力都献给了工作,哪怕是私底下周末学习,也基本上都和工作有关,原因无他,只因为初入职场的林萧,就像一个干瘪的海绵一样,只是工作当中的东西,就足够他吸收了,实在是没有精力再研究别的东西。 这就像追女生一样,必须要先成为朋友,才能慢慢的变成女朋友,不然的话,结局往往反而会得不偿失。 所以这个阶段的林萧也不做他想,只想着能尽快把工作当中需要的知识尽快掌握,然后再考虑接下来的事情。 而随着时间的推移,在线做题网这个项目也逐渐进入到了维护阶段,林萧依旧是一个人负责网站的后台系统,而程佳丽和王立新,则是负责网站的前台系统,至于李魁,因为用的是C#,所以和三人所做的并不是同一个项目。 最近随着实践经验的增加,林萧对于增删改查那一套,已经是越来越熟练,所以林萧周末的精力,大部分都花在了研究框架上面,毕竟框架这东西在工作当中有着举足轻重的作用。 以前林萧只知道SSH整合要搞一堆XML配置,却不知道是什么意思,现在经过林萧工作中的实践和平时的学习,已经大概知道了每个配置是做什么的,这也算是林萧在知其然的基础上,迈出了知其所以然的第一步。 ....... 一天中午,林萧四人一起出去吃饭。 而这次午饭四人没有去地下一层,几个月过去,林萧四人已经对周边越来越熟悉了,所以吃饭的地方也不仅限于地下一层,偶尔也会出来在周边找个饭馆尝尝鲜,林萧也就顺带着偶尔换换口味,不至于每顿饭都去地下一层吃燃面。 不过一般情况下,林萧一天里面中午和下午两顿饭,总是至少有一顿,会去地下一层吃上一碗燃面,这也算是林萧几个月以来养成的习惯了。 四人溜达了一会儿,最终来到了一家桂林米粉店,这家店几人也算是常来,走路离公司大约15分钟的样子,站在店门口,可以模糊的看到国贸附近的标志建筑——大裤衩。 之所以看的不是很清楚,倒不是因为距离的问题,而是因为雾霾的原因,这也算是北京的一大特色了。 饭桌上,等饭的时候,王立新一个人在旁边默默的玩手机,林萧三人则是一边等饭,一边有一句没一句的闲聊着。 本来三人始终是在聊一些租房的琐事,不过李魁在聊天空档中的一句话,却让林萧和程佳丽愣了一下,王立新的身体也不自觉地抖动了一下,只不过这一幕林萧三人都没有注意到。 “我最近发现,程刚好像对我有意见啊。”说完这个,李魁顿了一下,继续说道:“对了,你们三个有没有这种感觉?” 程佳丽回过神来后疑惑道:“对你有意见我们仨能有什么感觉?” 李魁哎呀一声,解释道:“我说的不是这个意思,我是说,你们三个有没有同样的感觉,就是有没有觉得程刚对你们三个也有意见的感觉。” 虽然李魁说的有点绕,但是林萧是听懂了,遂问道:“你是想问,程刚是不是对我们四个都有意见?” 李魁一拍大腿,“对,我就是这个意思,你们三个有没有感觉到?” 王立新闻言在一旁一直沉默不语,不过这也是他一贯的风格,林萧三人早就习以为常了。 程佳丽经过林萧这么一解释,倒是也理解了李魁的意思,但还是疑惑道:“你这么一说,倒确实有那么一点,不过他以前对我的态度也就一般般啊,这也没啥奇怪的吧。” 林萧倒是被李魁搞得心中一惊,因为他确实感觉到,程刚对自己的态度似乎比以前差了许多,虽然程刚也没有明着对林萧做什么,但程刚态度上的变化,林萧多少还是能感觉出来一点的。 不过林萧也没立马说出来,而是问道:“你怎么会觉得程刚对你有意见,你又不归他管。” 李魁闻言小声道:“正因为不归他管,我才觉得奇怪啊。我又没招他惹他,虽然我不喜欢他这个人,但平时路上碰到也会做做样子,我也都是笑着跟他打招呼,但他最近却老是板着一张脸,搞得好像我欠他钱似的,以前我们俩碰到他也不这样啊。” 程佳丽听完说道:“是不是你想多了,可能那会儿他有什么别的事心情不好呢?” 李魁连连摆手说道:“不可能,不可能。心情不好也不能一直心情不好吧,已经好几次了。” 林萧和程佳丽相互对视了一眼,从对方的眼神中能看出,两人都觉得李魁说的有道理,毕竟你心情再不好,也不可能老是对别人甩脸色吧,这明显有些不正常。 察觉到这一点,林萧有些忍不住的说道:“其实我也感觉出来了,他最近好像也不怎么跟我说话,似乎对我不太满意,本来我还以为,是因为我最近偶尔堵车迟到才这样,但听你这么一说,似乎跟这个也没什么关系啊。毕竟你又没迟到过,而且也不在他手底下干活,他对你这样,感觉没有必要啊?” “你是不是最近得罪他了?”程佳丽出口问了句。 李魁露出一副思索的样子,随后说道:“没有啊。我特么都没怎么跟他说过话好吧?要非说得罪他的话,那也不能说没有,咱们吃饭的时候我不是经常骂他吗?难道是因为这个?那也不应该啊,他又听不到......” 话说到这,程佳丽的身体却猛地一颤,随后轻声的说道:“难道......” 其实程佳丽想说的是“难道有内奸”,但话到嘴里最终还是咽回去了,毕竟要说有内奸的话,那岂不是说内奸就在现场的四个人里。 这话要是说出去,那以后四人也别想愉快的玩耍了,肯定会心生间隙。 但很明显已经有些晚了,经他这么一提醒,林萧和李魁似乎都意识到了什么,随后三人互相对视了一眼,竟然都不约而同的看向了低头玩手机的王立新。 或许是感受到了三人的目光,王立新抬起头后,扫了三人一眼,随后有些不自然的笑了笑说道:“你们看我干什么?” 转载于:https://www.cnblogs.com/zuoxiaolong/p/diaosi105.html

一个屌丝程序猿的人生(一百零四)

打开官网之后,林萧来来回回的浏览了几遍。 看着网站上精致的手机图片,再看看自己手中的绝版三星翻盖手机,林萧心中换手机的想法已经一发不可收拾。 不过可悲的是,过完年回来,林萧才刚刚转正,虽然领了三个月工资,但都是打了八折的,而且房租马上三个月到期,这一下又要交三个月的房租,而林萧过年也花了一些钱,还特意给了父母每个人1006块钱。 为啥是1006? 林萧对此也算是花了些心思,因为过完年就是2012年,两个1006加一起就是2012,代表着父母两人在一起就是未来的意思。 这样做的结果倒是没让林萧失望,父母两人虽然嘴上没说什么,但林萧看得出来,两人十分的高兴,也算是成全了林萧的一番孝心。 但这样一通乱七八糟的花销下来,就导致林萧到现在基本上没存着什么钱。 眼瞅着网站上的手机似乎在向自己招手,而自己却囊中羞涩,林萧一时间不由得更加郁闷了。 当天晚上,林萧躺在床上,翻来覆去的死活就是睡不着,满脑子都是手机的影子。 如此过了约莫一个小时后,林萧实在是毫无睡意,“噌”的一下就从床上坐了起来,迅速拿起自己的绝版三星翻盖手机,打了个电话出去。 电话一接通,另一头就响起了一声咆哮,震得林萧差点没把手机给扔了。 “林萧,你特么脑子进水了?大半夜给我打电话。” 接电话的人叫杨阳,和林萧初中就是同学,两人上初中时就一起上下学,一起泡游戏厅打拳皇,这么多年过去了,虽然林萧和包括杨阳在内的几个初中死党都联系着,但如果非要分个亲疏远近的话,杨阳绝对算得上是林萧关系最好的死党,没有之一。 刚才在床上躺了这么久,林萧实在是经受不住新手机的诱惑,于是便想起了杨阳,想着看能否让杨阳帮忙给借点钱,反正以他的工资,一个5000多的手机,很快就能把钱还上。 “啊哈......兄弟啊,这不是想你了吗。”林萧十分无耻的说道。 “去你大爷的,少废话,说,到底啥事?” “额......找你借点钱......” 电话另一头的杨阳沉默了片刻说道:“你可是第一次找我借钱,咋了这是?遇上啥事了?” “我想买个手机......” 一听这个,对面的杨阳炸了,“妈的,我当是啥事!原来是想买手机,没钱买什么手机,还想借钱买手机,还特么大半夜找我借钱买手机,你吃错药了吧!” “你懂啥!本来我再过两个月钱就够了,但是......这不是心急等不了了吗,嘿嘿。” “行吧,要借多少钱?” “额......也不多,6000就够了......” 不出意外的,对面的杨阳再次炸了,“你买个手机要借6000?你特么是要买坨金子用吗!” “你懂啥!这手机老漂亮了,就是那个iPhone,听过没?老牛逼了啊!” “牛逼也没用!我没钱,妈的,困死我了,睡觉了。” 话音一落,对面的杨阳便把电话给挂了,林萧坐在床上一脸懵逼,“妈的,这家伙敢挂我电话,看我回老家怎么收拾你。” 不过想是这么想,林萧是肯定收拾不了杨阳的,原因无他,因为杨阳身高185,体重将近200斤,而林萧这身高165,体重100出头的人,压根就不是杨阳的对手。 无奈之下,林萧也知道今晚肯定是没戏了,只能明天再找人想想办法,实在不行,也就只能再等两个月了。 ...... 第二天,林萧照常起床上班,不过因为昨晚睡得晚,林萧十分顺利的搞了一双熊猫眼。 而就在去公司的路上,林萧收到了杨阳的短信,“把你的银行卡号发过来。” 看到这个,林萧心中已经隐隐猜到了一些,默默的把自己的工资卡号给发了过去。 没过多久,林萧的手机上便又收到一条短信,还是杨阳发来的,“钱已经打过去了,你第一次找兄弟我借钱,怎么说也得给你搞来,钱是我找别人借的,说了三个月内还给他,你特么可别放我鸽子,不然等你回老家看我怎么收拾你。” 林萧看完后,嘴角不由得扬起一抹微笑,默默地念叨了一句,“算你小子够兄弟,这事办的还算靠谱。” 等林萧到公司以后,刚坐到工位上,手机上便收到了汇款的短信,6000元整,一分不多,一分不少。 林萧过后又上网查了查自己的网银,确认钱已经到账后,给杨阳发了条短信过去,“钱已经收到,谢了。” 没过一会儿,林萧收到了杨阳的回复,“谢啥,上班忙着呢,回头再聊。” 看完短信之后,林萧把自己的绝版三星翻盖手机扔到了一旁,随后再次打开了Apple的网站。 一波操作下来,林萧买下了人生第一部苹果手机——iPhone4s。 接下来的几天里,林萧没事儿就忍不住看看快递到哪了,那叫一个度日如年。 好在Apple的快递速度并不慢,倒是让林萧少受了一些煎熬。 当林萧拆完包装,看到那做工精致,外观时尚漂亮的手机之后,瞬间便觉得,这5000多块钱花的是真值,就算抛开手机不说,哪怕人家这装手机的盒子,看着也都是那么的高端大气上档次。 以前林萧还觉得宋刚买那个iPhone4不划算,如今林萧把手机拿到自己手里以后才发现,这么好看的手机,哪是用钱来衡量的,能买来好心情就是赚到。 这也算是林萧第一次真正体会到了购物的快感,毕竟这是花自己的钱买的! 虽然这钱实际上是借来的,但在林萧心里,这和花自己的钱也没啥区别,毕竟早晚都是自己还钱。 ...... 新手机到手,林萧自然是将原来的绝版三星翻盖手机,彻底的封存了起来。 刚开始的几天,林萧对新手机的热度持续不减,特别是每次听到手机解锁和锁机的声音,都让林萧觉得是那么的动听,也极大程度上满足了林萧装逼的欲望。 而这也就导致,林萧经常乐此不疲的没事解锁和锁机,如此反复,就为了听到那悦耳的声音。 李魁和程佳丽为此经常调侃林萧,说林萧为了买个手机已经魔怔了,不过话虽如此,但二人眼神中那偶尔出现的羡慕,却是没有办法掩盖的。 王立新对此倒显得比较矜持,始终保持着沉默旁观的态度。 不过,过了一周之后,让林萧三人惊讶的事情出现了。 王立新不声不响的也买了一部iPhone4s,配置甚至比林萧的还要好上一个档次。 这件事情一出,林萧倒还好点,李魁和程佳丽彻底不淡定了,这尼玛以前看林萧一个人嘚瑟也就罢了,现在却变成了两个人轮流嘚瑟。 事实上在这种情况下,哪怕林萧和王立新就算是正常用手机,恐怕李魁和程佳丽也会觉得是二人在嘚瑟。 这就是人性的本性。 为了最后不至于成为孤家寡人,李魁和程佳丽很快达成了统一战线,二人谈好了,要买iPhone的话,两个人必须先通知对方,到时候要买一起买,免得造成一个人看对方三个人嘚瑟的场景出现。 得知两人的这个约定之后,王立新倒是没什么反应,林萧却被两个人给搞得有些莞尔,心中忍不住嘀咕,这俩人也真特么是够奇葩。 转载于:https://www.cnblogs.com/zuoxiaolong/p/diaosi104.html

移动网页唤起手机内 支付宝 微信支付

本文链接:https://blog.csdn.net/qq_36710522/article/details/90483194 业务场景介绍: H5移动端支持微信支付 [ 微信支付分为微信内支付(JSAPI支付官方API)和微信外支付(H5支付官方API)] && 支付宝支付 [手机网站支付转 APP 支付 官方API ] 订单生成逻辑:前端请求后端提交订单,后端去和微信或者支付宝对接生成订单(后续支付都是这个逻辑进行的对接) 一、移动端微信支付,vue中如何玩? 在移动端微信支付分为微信内支付和微信外支付。 1.在订单组件中选择支付方式之后在支付页面先去判断是否是在微信内: //判断是否微信 is_weixn(){ var ua = window.navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == 'micromessenger'){ return true; } else { return false; } }, 2.触发立即支付方法,根据微信内外的不同请求后端不同的接口,如果是微信外支付非常简单了~ 3.【微信外支付】下面先看微信外支付,官方文档也写的很清楚,后端返回一个url地址,前端的工作就是拿到这个url地址进行跳转就可以了,看一下2-3步代码: handelPay() { if(this.wechatpayType == 'wxpay'){ // console.log("微信内支付") let data={ amount:this.number, } this.$http.insideWeChatPay(data).then( res => { if(res.data.code === 200){ this.weChatParameter=res.data.data // console.log(this.weChatParameter,"微信内支付需要参数") this.weixinPay() }else{ Toast({ message: res.data.msg, position: 'middle', duration: 1000 }); } }); } else if(this.

SpringBoot(13) 集成Shiro实现动态加载权限

一、前言 本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,不用重启项目,以及在页面分配给用户 角色 、 按钮 、uri 权限后,后端动态分配权限,用户无需在页面重新登录才能获取最新权限,一切权限动态加载,灵活配置 基本环境 spring-boot 2.1.7mybatis-plus 2.1.0mysql 5.7.24redis 5.0.5 温馨小提示:案例demo源码附文章末尾,有需要的小伙伴们可参考哦 ~ 二、SpringBoot集成Shiro 1、引入相关maven依赖 <properties> <shiro-spring.version>1.4.0</shiro-spring.version> <shiro-redis.version>3.1.0</shiro-redis.version> </properties> <dependencies> <!-- AOP依赖,一定要加,否则权限拦截验证不生效 【注:系统日记也需要此依赖】 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency> <!-- Shiro 核心依赖 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>${shiro-spring.version}</version> </dependency> <!-- Shiro-redis插件 --> <dependency> <groupId>org.crazycake</groupId> <artifactId>shiro-redis</artifactId> <version>${shiro-redis.version}</version> </dependency> </dependencies> 2、自定义Realm doGetAuthenticationInfo:身份认证 (主要是在登录时的逻辑处理)doGetAuthorizationInfo:登陆认证成功后的处理 ex: 赋予角色和权限 【 注:用户进行权限验证时 Shiro会去缓存中找,如果查不到数据,会执行doGetAuthorizationInfo这个方法去查权限,并放入缓存中 】 -> 因此我们在前端页面分配用户权限时 执行清除shiro缓存的方法即可实现动态分配用户权限 @Slf4j public class ShiroRealm extends AuthorizingRealm { @Autowired private UserMapper userMapper; @Autowired private MenuMapper menuMapper; @Autowired private RoleMapper roleMapper; @Override public String getName() { return "

vue调色板

<template> <div id="app"> <h1>调色板</h1> <div class="box" :style='{background:`rgb(${r},${g},${b})`}'></div> <div>r: <input type="range" min="0" max="255" v-model='r'></div> <span v-text='r'></span> <div>g: <input type="range" min="0" max="255" v-model='g'></div> <span v-text='g'></span> <div>b: <input type="range" min="0" max="255" v-model='b'></div> <span v-text='b'></span> </div> </template> <script> import HelloWorld from "./components/HelloWorld.vue" export default{ components:{ HelloWorld }, data(){ return{ r:0, g:0, b:0 } } } </script> <style> .box{ width: 100px; height: 100px; border: 1px solid red; } </style>

Linux 踩坑系列-错误Error: ENOSPC: System limit for number of file watchers

Linux 踩坑系列-错误Error: ENOSPC: System limit for number of file watchers 发现背景解决办法 发现背景 系统: Ubuntu18 问题发生场景: 在使用react脚手架写案例的时候,使用指令 npm start 不成功,发生 Error: ENOSPC: System limit for number of file watchers错误。 解决办法 Error: ENOSPC: System limit for number of file watchers错误,是文件监视程序的系统产生了限制,达到了默认的上限,需要增加限额。 可以使用指令 $ cat /proc/sys/fs/inotify/max_user_watch来查看 root@:~$ cat /proc/sys/fs/inotify/max_user_watch es 524288 临时限额增加可以设置新的指令: $ sudo sysctl fs.inotify.max_user_watches = 524288 $ sudo sysctl -p 永久增加限额 $ echo fs.inotify.max_user_watches = 524288 | sudo tee -a /etc/sysctl.conf $ sudo sysctl -p [参考文献]https://github.

Qt5 模拟鼠标点击

windows官方说明:https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-mouse_event?redirectedfrom=MSDN 参考自:https://www.fearlazy.com/index.php/post/168.html 做一个游戏辅助,使用Windows API鼠标自动在某一个坐标点击。 //头文件 #include<Windows.h> #pragma comment(lib, "User32.lib") QDesktopWidget *desktopwidget = QApplication::desktop(); int desktop_width = desktopwidget->width(); //获取屏幕分辨率宽度 int desktop_height = desktopwidget->height(); //获取屏幕分辨率高度 int stronghold_height = desktop_height * 0.68; //要点击鼠标的位置在屏幕一定比例的位置 int stronghold_width = desktop_width * 0.9; ::mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, stronghold_width * 65535 / 1366, stronghold_height * 65535 / 768,0 ,0); //移动到指定位置 ::mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); //按下左键 ::mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); //左键抬起

package zy03; import java.io.*; import java.util.*; public class ceshi { private static String str=""; private static Scanner sc=new Scanner(System.in); private static BufferedReader br=null; private static String a[]=new String[1000000]; private static String c[]=new String[10000000]; private static int b[]=new int[1000000]; private static int l=0; private static int l1=0; private static int n=0; private static int j=0; //private static Boolean false; public static void cunfang() throws IOException {//将单词存到数组a while(str!=null) { int i=0; str=str.

.Net平台调用の参数对应

具体对应参见官方<----点击此处 C#和C++的互操作性,同行的文章不错,点我跳转 //C++中的DLL函数原型为 //extern "C" __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned char* 变量名2) //extern "C" __declspec(dllexport) bool 方法名二(const unsigned char* 变量名1, char* 变量名2) //C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试 //c++:HANDLE(void *) ---- c#:System.IntPtr //c++:Byte(unsigned char) ---- c#:System.Byte //c++:SHORT(short) ---- c#:System.Int16 //c++:WORD(unsigned short) ---- c#:System.UInt16 //c++:INT(int) ---- c#:System.Int16 //c++:INT(int) ---- c#:System.Int32 //c++:UINT(unsigned int) ---- c#:System.UInt16 //c++:UINT(unsigned int) ---- c#:System.UInt32 //c++:LONG(long) ---- c#:System.Int32 //c++:ULONG(unsigned long) ---- c#:System.UInt32 //c++:DWORD(unsigned long) ---- c#:System.UInt32 //c++:DECIMAL ---- c#:System.Decimal //c++:BOOL(long) ---- c#:System.

html2canvas+jspdf 将html‘截图’放入pdf 后用PDFjs预览/打印/下载等

废话不多说,还得废话一句 :太菜了 一个坑爬另一个坑,差点放弃了,还好实现了 思路 用html2canvas 把html转图片;把图片放到 jspdf 中 变成pdf(这会儿就可以保存、打印了,但打印有个bug,就是点击 打印处的下载,会导致下载的文件没格式 ,手动改格式就可以正常打开了);为了解决这个打印页面下载的问题 ,使用了PDFjs 这个可以预览pdf文件、pdf的base64码或者二进制文件 实现也比较简单 ,但我在jspdf 转 base64的时候遇到了麻烦 ,官网 http://mrrio.github.io/上的例子转的 是 形如 data:application/pdf;base64,JVBERi0xLj… 而我 的是 形如 data:application/pdf;filename=generated.pdf;base64,JVBERi0xL… 而这也导致了转的码用PDFjs无法正常解码,然后就开始搞,之前以为是版本问题 虽引入旧版测试 ,果然 没fienname这个了 ,但还是打不开,这就是转码方式不对了。虽转变策略,用二进制文件终于能正常打开了 ,预览 、打印、下载等也没问题 效果如下 主要代码 var pdfDom = document.querySelector(id);//要转图片的html html2Canvas(pdfDom, { //相关参数 百度 帖子很多 useCORS: true, allowTaint: true, // 清晰度 dpi: window.devicePixelRatio, scale:2 }).then(function (canvas) { console.log(canvas) const marginBottom = 34 // 项目页面显示微处理 let canvasWidth = canvas.width //页面生成canvas宽度 let canvasHeight = canvas.

字符流

Reader BufferedReader提供了读取文本文档,每次读取一行,读到文件返回null; package zy03; import java.io.*; public class text02 { public static void main(String[] args) throws IOException { File f=new File("D://大二java//1.txt"); try { FileReader fr=new FileReader(f);//输入流 BufferedReader br=new BufferedReader(fr);//缓存输入流 String s; while((s=br.readLine())!=null) { System.out.println(s); } br.close(); } catch(FileNotFoundException e) { System.out.println("文件未找到!"); } catch(IOException e) { System.out.println("读取失败"); } } } Writer 输出流FileWriter 缓存输出流BufferedWriter; 换行的时候使用newLine()函数; package zy03; import java.io.*; public class writer { public static void main(String[] args) { File f=new File("

LinkedList一定比ArrayList的插入和删除效率高吗

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 本文主要看一下,两种List集合,插入删除效率情况,为什么使用ArrayList的情况更多些? LinkedList首部插入数据很快,因为只需要修改插入元素前后节点的prev值和next值即可。 ArrayList首部插入数据慢,因为数组复制的方式移位耗时多。 LinkedList中间插入数据慢,因为遍历链表指针(二分查找)耗时多; ArrayList中间插入数据快,因为定位插入元素位置快,移位操作的元素没那么多。 LinkedList尾部插入数据慢,因为遍历链表指针(二分查找)耗时多; ArrayList尾部插入数据快,因为定位速度快,插入后移位操作的数据量少; 总结:在集合里面插入元素速度比对结果是,首部插入,LinkedList更快;中间和尾部插入,ArrayList更快; 在集合里面删除元素类似,首部删除,LinkedList更快;中间删除和尾部删除,ArrayList更快; 由此建议,数据量不大的集合,主要进行插入、删除操作,建议使用LinkedList; 数据量大的集合,使用ArrayList就可以了,不仅查询速度快,并且插入和删除效率也相对较高