问题描述 react 项目使用 Ant Design Table表格中使用Checkbox.Group 组件默认值 defaultValue变化页面不刷新。
const columns = [ { title:'标签', dataIndex:labelCodes, key:labelCodes, width:500, render:(text,record) =>( <Checkbox.Group defaultValue={record.labelCodes} key={record.labelCodes}>{ this.state.labelList.map(item => ( <Checkbox key={item.value} value={item.value} onChange={(e) => this.onChange(e,record.id)}>{item.label}</Checkbox> )) } </Checkbox.Group> ) }, ]; <Table columns={columns} dataSource={this.state.itemList} /> 当接口请求返回的this.state.itemList数据发生变化时,传递给页面表格中的Checkbox.Group defaultValue的值发生变化但页面不能刷新。使用this.forceUpdate()以及setState({ itemList:[...itemList]})均没有效果。
解决办法 Checkbox.Group添加key为defaultValue的值**,即可当this.state.itemList.labelCodes变化时,页面可以取到数据更新之后的最新视图。
<Checkbox.Group defaultValue={record.labelCodes} key={record.labelCodes}> 将defaultValue属性更改为value属性。
<Checkbox.Group value={record.labelCodes} key={record.labelCodes}>
1.Install C++ connector
sudo apt install libmysqlcppconn-dev 2.
#include <iostream> #include <cppconn/driver.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> #include <cppconn/exception.h> using namespace std; void mySQL65(); int main(int args, char **argv) { mySQL65(); } void mySQL65() { try { sql::Driver *driver; sql::Connection *conn; sql::Statement *stmt; sql::ResultSet *res; driver = get_driver_instance(); conn = driver->connect(tcp://127.0.0.1:3306, root, Root0001!); conn->setSchema(myDB); stmt = conn->createStatement(); res = stmt->executeQuery(SELECT 'Hello World!' AS _message); // replace with your statement while (res->next()) { cout << \t.
步骤:
定义MyRunnable类实现Runnable接口 实现run()方法,编写线程执行体 创建线程对象(将MyRunnable实例作为线程对象创建时的参数),调用start()方法启动线程 代码:
public class MyRunnable implements Runnable{ @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(我是子线程:+i); } } public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); for (int i = 0; i < 200; i++) { System.out.println(我是主线程:+i); } } } 结果:
如果在服务器上使用了反向代理。
你可能会收到下面的错误信息: 413 Request Entity Too Large errors`。
问题和解决 问题的原因就是反向代理服务器针对 HTTP 访问的时候有限制,
Nginx 在 Nginx 的配置文件中,添加下面的内容 client_max_body_size 100M;
上面的配置信息显示了具体的配置位置。
在默认情况下 Nginx 配置的 client_max_body_size 大小为 1M。
很多时候是肯定不够用的。
Apache Apache 在 http.conf 配置文件中有一个 LimitRequestBody 参数。
你可以将这个参数配置为:LimitRequestBody 104857600。
虽然你成功配置了上面的参数,但是有时候上面的参数在 Apache 中可能没有办法解决你的问题。
这是因为有时候和后台代理的程序也有关系。
总结 根据最近想买的一些调整,使用 Nginx 作为反向代理,会比 Apache 更加轻量,配置更加容易。
https://www.ossez.com/t/413-request-entity-too-large/13963
目录Elasticsearch高级之-集群搭建,数据分片一 广播方式二 单播方式三 选取主节点四 什么是脑裂五 错误识别
Elasticsearch高级之-集群搭建,数据分片 es使用两种不同的方式来发现对方:
广播 单播 也可以同时使用两者,但默认的广播,单播需要已知节点列表来完成
一 广播方式 当es实例启动的时候,它发送了广播的ping请求到地址224.2.2.4:54328。而其他的es实例使用同样的集群名称响应了这个请求。
一般这个默认的集群名称就是上面的cluster_name对应的elasticsearch。通常而言,广播是个很好地方式。想象一下,广播发现就像你大吼一声:别说话了,再说话我就发红包了!然后所有听见的纷纷响应你。 但是,广播也有不好之处,过程不可控。
#1 在本地单独的目录中,再复制一份elasticsearch文件 # 2 分别启动bin目录中的启动文件 # 3 在浏览器里输入:http://127.0.0.1:9200/_cluster/health?pretty -通过number_of_nodes可以看到,目前集群中已经有了两个节点了 二 单播方式 当节点的ip(想象一下我们的ip地址是不是一直在变)不经常变化的时候,或者es只连接特定的节点。单播发现是个很理想的模式。使用单播时,我们告诉es集群其他节点的ip及(可选的)端口及端口范围。我们在elasticsearch.yml配置文件中设置:
discovery.zen.ping.unicast.hosts: [10.0.0.1, 10.0.0.3:9300, 10.0.0.6[9300-9400]] 大家就像交换微信名片一样,相互传传就加群了.....
一般的,我们没必要关闭单播发现,如果你需要广播发现的话,配置文件中的列表保持空白即可。
#现在,我们为这个集群增加一些单播配置,打开各节点内的\config\elasticsearch.yml文件。每个节点的配置如下(原配置文件都被注释了,可以理解为空,我写好各节点的配置,直接粘贴进去,没有动注释的,出现问题了好恢复): #1 elasticsearch1节点,,集群名称是my_es1,集群端口是9300;节点名称是node1,监听本地9200端口,可以有权限成为主节点和读写磁盘(不写就是默认的)。 cluster.name: my_es1 node.name: node1 network.host: 127.0.0.1 http.port: 9200 transport.tcp.port: 9300 discovery.zen.ping.unicast.hosts: [127.0.0.1:9300, 127.0.0.1:9302, 127.0.0.1:9303, 127.0.0.1:9304] # 2 elasticsearch2节点,集群名称是my_es1,集群端口是9302;节点名称是node2,监听本地9202端口,可以有权限成为主节点和读写磁盘。 cluster.name: my_es1 node.name: node2 network.host: 127.0.0.1 http.port: 9202 transport.tcp.port: 9302 node.
继承Thread类: 子类继承Thread类具备多线程能力启动线程:子类对象. start() 不建议使用:避免OOP单继承局限性 实现Runnable接口: 实现接口Runnable具有多线程能力 启动线程:传入目标对象+Thread对象.start() 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
内存是用于存放数据的硬件。 程序执行前需要先放到内存中才能被CPU处理。
2的10次方=1K(千) 2的20次方=1M(兆,百万) 2的30次方=1G(十亿,千兆) 一台手机/电脑有4GB内存,是指该内存中可以存放4乘2的30次方个字节。也就是2的32次方个地址,所以地址需要用32个二进制位来表示
实际生成机器指令时并不知道该进程的数据会被放到什么位置。所以编译生成的指令中一般是逻辑地址(相对地址)
只要知道逻辑地址(相对地址)和起始地址,就可以知道物理地址(绝对地址)
从写程序到程序运行的步骤:编辑→编译→链接→装入
编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言) 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块 装入(装载):由装入程序将装入模块装入内存运行
装入的三种方式:绝对装入、静态重定位、动态重定位 1.绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。绝对装入只适用于单道程序环境。程序中使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。通常情况下都是编译或汇编时再转换为绝对地址。
2.静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。
3.动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。 特点:1.允许程序在内存中发生移动。并且可将程序分配到不连续的存储区中2.在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存3.便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。
重定位寄存器:存放装入模块存放的起始位置
链接的三种方式: 1.静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。 2.装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。 3.运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对 目标模块的共享。
E. Moving Chips 题目大意: 2*n的棋盘上有若干棋子,每次可以选择任意一颗移动。问吃掉棋盘上所有棋子的最小步数是多少。
思路和代码: 麻了,最后剩十分钟做这个,还理解错题意了
首先,贪心去想肯定不把把两边全空的格子计入考虑。
我一开始理解成只能移动其中一颗棋子了,但是是每次都可以随意移动的。区别就在于下图:
考虑状态方程定义:dp[i,1/2]表示前面所有的棋子都吃完后剩下来的那颗棋子在点(1/2,i)处所能得到的最小点数(最后的花费要减去1).下面给出AC代码。
void solve2(){ cin >> n ; cin >> s[1] >> s[2] ; s[1] = + s[1] ; s[2] = + s[2] ; int l = 1 , r = n ; while(l <= n && s[1][l] == '.' && s[2][l] == '.') l ++ ; while(1 <= r && s[1][r] == '.' && s[2][r] == '.') r -- ; string t[3] = {} ; t[1] = ; t[2] = ; rep(i , l , r ) t[1] += s[1][i] ; rep(i , l , r ) t[2] += s[2][i] ; int m = t[1].
常用的前端JavaScript方法封装:https://blog.csdn.net/qq_31967569/article/details/82461499
1、输入一个值,返回其数据类型
function type(para) { return Object.prototype.toString.call(para) } 2、数组去重
function unique1(arr) { return [...new Set(arr)] } function unique2(arr) { var obj = {}; return arr.filter(ele => { if (!obj[ele]) { obj[ele] = true; return true; } }) } function unique3(arr) { var result = []; arr.forEach(ele => { if (result.indexOf(ele) == -1) { result.push(ele) } }) return result; } 3、字符串去重
String.prototype.unique = function () { var obj = {}, str = '', len = this.
1,
sudo apt update 2.
sudo apt upgrade 3. sudo apt install mysql-server 4.Check version
mysql --version 5.
sudo mysql_secure_installation And failed,its prompts is Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server.