mysql updated 优化更新的方式

在工作中遇见个问题,navicat premiun for mysql 要把两张表A,B关联更新根据id字段更新pass字段,每张表的数据都是2000w+,用update
A as a,B as b SET a.pass=b.pass WHERE a.id=b.id;的方式进行更新,从昨天下午15开始,今天早上
发现电脑在晚上凌晨就宕机了,有什么办法可以避免这种情况,耗时稍微长一些没有关系(mysql版本为5.1)
听说update可以分批次更新,具体要怎么做,麻烦详细些,我刚刚使用mysql,对于语法什么的都不了解,谢谢大家!

10个回答

这是基于spring的代码,基于其他照葫芦画瓢就行了,我电脑是4核,开了5个线程(并发5个线程),线程数=cpu核心数+1,按这个规则来


        package com.example.demo;

        import com.sun.jmx.remote.internal.ArrayQueue;
        import org.junit.Before;
        import org.junit.Test;
        import org.junit.runner.RunWith;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.boot.test.context.SpringBootTest;
        import org.springframework.dao.DataAccessException;
        import org.springframework.jdbc.core.JdbcTemplate;
        import org.springframework.test.context.junit4.SpringRunner;

        import java.util.List;
        import java.util.Map;
        import java.util.Queue;
        import java.util.concurrent.Semaphore;
        import java.util.concurrent.atomic.AtomicLong;

        @RunWith(SpringRunner.class)
        @SpringBootTest
        public class DemoApplicationTests {

                private Long total;
                // 声明volatile关键字为了保证可见性,多线程2大特性,一:原子性,二:可见性
                private volatile Semaphore semaphore;
                private volatile AtomicLong aleary;// 已经取了多少条
                private volatile AtomicLong real;// 真实已执行了多少条
                private volatile AtomicLong threadCount;// 执行第几次线程

                @Autowired
                private JdbcTemplate jdbcTemplate;

                @Before
                private void init(){
                        // 初始化总数,因为我看你的事a表根据b表更新
                        total = jdbcTemplate.queryForObject("SELECT COUNT(id) FROM B",Long.class);
                        // 初始化信号量(并发锁数量)
                        semaphore = new Semaphore(5);
                        // 初始化已经取了0条
                        aleary = new AtomicLong(0);
                        real = new AtomicLong(0);
                        threadCount = new AtomicLong(0);
                }

                @Test
                public void contextLoads() {
                        // 开始多线程执行
                        for(int i=0;i<total/1000+1;i++){// 除以1000是因为1个线程取1000,一共需要多少个线程,其实可以优化,让线程可回收,这样可以减小内存消耗,不过,你的应该是只执行一次,以后不用了,所以就没有必要了
                                new Thread(new Runnable() {
                                        @Override
                                        public void run() {
                                                // 获取一把锁
                                                try {
                                                        semaphore.acquire();
                                                        System.out.println("第"+threadCount.addAndGet(1)+"个线程进来了...");
                                                        List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT id,pass FROM B LIMIT " + aleary.longValue() + "," + 1000);// 取一千条数据,最后一次可能取不到1000条数据不过无所谓,
                                                        aleary.addAndGet(1000);// 增加1000 ,最后已处理数量会比总数多,无所谓,不影响,其就是为了标记,对了,把mysql的max_allowed_package设大一点,要不取1000条数据可能不让取
                                                        list.forEach((l)->{// jdk8 新特性,lamb表达式,jdk版本低的话改为普通for循环
                                                                try {
                                                                        // 忽略错误插入
                                                                        jdbcTemplate.update("UPDATE IGNORE A SET pass=? WHERE id=?",new Object[]{l.get("pass"),l.get("id")});
                                                                } catch (DataAccessException e) {// try catch 忽略异常
                                                                        e.printStackTrace();
                                                                }finally {
                                                                        System.out.println(real.addAndGet(1));
                                                                }
                                                        });
                                                } catch (InterruptedException e) {
                                                        e.printStackTrace();
                                                }finally {
                                                        semaphore.release();// 释放锁
                                                }
                                        }
                                });
                        }
                }

        }

zhangpan_soft
zhangpan_soft 我这个地方写的有点问题,线程应该调用start()方法,new Thread(new Runnable(){}).start()才对
一年多之前 回复

转储数据的时候看好表结构是否一致,字段限制是否一致,,,如你所说不在意速度快慢的话,,,,上述方法已经测试有效..
配置好数据库的链接,,,随意写一个main方法执行 transService方法 即可
希望能够对你有所帮助

cashT
cashT 回复ggx1abc: 已在本地测试可用,如果适合您的需求并有幸解决您的问题,请采纳0.0谢谢
一年多之前 回复
ggx1abc
gu123xin 好的,谢谢!
一年多之前 回复

update A as a set a.pass=(select pass from B as b where a.id=b.id ) where a.id between 0 and 10000;
……

这样分批次更新呢

ggx1abc
gu123xin Truncated incorrect DOUBLE value 会报这样的错误
一年多之前 回复

要是分批更新有没有说,让mysql每次自动更新多少条的,不用每次更新都去操作

update A as a,B as b SET a.pass=b.pass WHERE a.id=b.id and a.id in (select a.id from A as a,B as b where a.pass!=b.pass limit 10000)
自动更新的话可以设置一个定时任务,参考https://blog.csdn.net/zhenzhendeblog/article/details/50599994

qq_38361634
爱_LOVE 回复ggx1abc: update A as a,B as b SET a.pass=b.pass WHERE a.id=b.id and a.id in (select * from(select distinct a.id from A as a,B as b where a.pass!=b.pass limit 10000)as t)
一年多之前 回复
ggx1abc
gu123xin 回复qq_38361634: 这个语句是错的,我试验了一下,无论limit 后面数值多大,都只能更新四列,而且第一列还无法更新
一年多之前 回复
qq_38361634
爱_LOVE 回复ggx1abc: update A as a,B as b SET a.pass=b.pass WHERE a.id=b.id and a.id in (select * from(select a.id from A as a,B as b where a.pass!=b.pass limit 10000)as t)加个嵌套就好
一年多之前 回复
ggx1abc
gu123xin 不能在子句里面用limit语句
一年多之前 回复
ggx1abc
gu123xin - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
一年多之前 回复

主要问题是这个语句会导致表联接查询,数据量大,联接肯定不行,除非你将数据一点点迁移到临时表再做联接更新,不知道你的id有没有什么规则?
可以搞个存储过程通过mysql进行分页查询,每次查询1000条记录的id然后依次执行,update
A as a,B as b SET a.pass=b.pass WHERE a.id=b.id and a.id=n,有索引语句执行很快

ggx1abc
gu123xin 回复zhaomin_g:好吧,我试试
一年多之前 回复
ggx1abc
gu123xin 回复zhaomin_g: update A as a,B as b SET a.pass=b.pass WHERE a.id=b.id and a.id=id;这个b.id and a.id=id;后面的id还要指定是哪张表的id吧?还是指定两张表的id
一年多之前 回复
zhaomin_g
_赵明 回复zhaomin_g: 自己建两张表插入数据测试下,我mysql也,没怎么用过,应该是这样的
一年多之前 回复
zhaomin_g
_赵明 回复ggx1abc: update A as a,B as b SET a.pass=b.pass WHERE a.id=b.id
一年多之前 回复
ggx1abc
gu123xin 回复zhaomin_g:给两张表的id字段加个索引然后这样写是吧? update A as a,B as b SET a.pass=b.pass WHERE a.id=b.id and a.id=id;
一年多之前 回复
zhaomin_g
_赵明 回复ggx1abc: 给你两张表的id都加个索引就可以了,数据量大,加索引也是很耗时的,加完就好了
一年多之前 回复
zhaomin_g
_赵明 n就是id,没有索引那玩不起来,加个索引就搞定了,加完索引,你再运行你原先的语句是可以的
一年多之前 回复
ggx1abc
gu123xin id 就是些字符串,也没有设置索引,如果建立索引,...b.id and a.id=n,这个n是A,B共同的索引名字吗?
一年多之前 回复

mysql 几百万的数据量就会影响性能,几个百万级的表关联查询性能差表现的尤为明显,你这两个2000W加的表关联起来更扩张,建议分区。

1.创建与原始表一样结构的新表,新分区。
2.将原始表中数据复制到新表。
3.删除原始表。
4.将新表名称改为原始表名称
两张表都要这样做。

用 ID 做RANGE分区:
PARTITION BY RANGE (id)
(PARTITION d10w VALUES LESS THAN (100000) ENGINE = InnoDB,
PARTITION d20w VALUES LESS THAN (200000) ENGINE = InnoDB,
PARTITION d50w VALUES LESS THAN (500000) ENGINE = InnoDB,
PARTITION d100w VALUES LESS THAN (1000000) ENGINE = InnoDB

你是用 a.id=b.id去关联更新的,两张表你的id都按一样的规则去分区。
之后再写一个存储过程去,用游标一个分区一个分区的去更新。
如果你想 不做任何改变,就通过优化一个sql去改变,那是不可能。。。mysql没办法实现你的需求。
就单写一个sql来说,你这个sql没什么可优化的,你的 id已经是主键了。
照我我说的 去普及一下相关资料,动起来。
望采纳啊啊啊啊啊 老铁

u013927589
还来得及 回复ggx1abc: 有前途,毕业直接来我们公司
一年多之前 回复
ggx1abc
gu123xin 有没有是加个索引比较快点的方法
一年多之前 回复
ggx1abc
gu123xin 哥,B表的id数据行数和A表行数也不一样,也就是有些要更新,有些不用。分表的化,也要花很多时间,我怕时间不够,因为我只是暑假实习,下个星期就要离职了,但我很想把任务做好
一年多之前 回复

@Service("transservice")
public class transService {
@Autowired
JdbcTemplate jdbcTemplatesql1;

@Autowired
JdbcTemplate jdbcTemplatesql2;
    //从原表中查询数据
    String asql = "SELECT id,pass FROM A";
    List<Map<String, Object>> AList = jdbcTemplatesql1.queryForList(asql);
    for (Map<String, Object> Amap : AList) {

                Integer Aid = Amap.get("id") == null ? "" : (Integer) Amap.get("id");
                String passA = Amap.get("pass") == null ? "" : ((String) Amap.get("pass")).trim();

                 String bsql = "UPDATE B set "
                                + "pass = '" + passA
                                + "' WHERE id = '"
                                + Aid + "' ;";

                jdbcTemplatesql2.update(bsql);

                }

}

1.关联字段建立索引
2.创建一张临时表,先将两表关联记录转存临时表
3.分批次更新

你照着步骤操作,复制到你的navicat执行,注意<改一下> 的注释,有些地方需要改一下。操作完后耐心等待,看看会不会弘机。
假如能跑完,别忘了采纳,我还需要 10+8个C就行了
-- 1.创建存储过程
create procedure update_pro()
begin -- 开始存储过程
DECLARE val_id INT(10);
DECLARE val_pass varchar(32); -- <改一下> 这里把32改成你要更新字段的长度
DECLARE done INT DEFAULT FALSE; -- 控制游标循环变量,默认false
DECLARE My_Cursor CURSOR FOR ( SELECT id, pass FROM test_b ); -- <改一下> 这个sql改成你的表和字段
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转true
START TRANSACTION;-- 打开事务
OPEN My_Cursor; -- 打开游标
myLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到
FETCH My_Cursor into val_id, val_pass; -- 将游标当前读取行的数据顺序赋予变量val_id,val_pass
IF done THEN -- 判断是否继续循环
LEAVE myLoop; -- 结束循环
END IF;
-- 更新数据
UPDATE test_a SET pass = val_pass WHERE id = val_id ; -- <改一下> 这个sql改成你的表和字段 ,val_pass和val_id是上面声明的变量,不用改
END LOOP myLoop; -- 结束自定义循环体
CLOSE My_Cursor; -- 关闭游标
COMMIT; -- 提交事务
END; -- 结束存储过程

-- 2.调用你刚刚创建的存储过程
CALL update_pro();

u013927589
还来得及 博主,你把创建存储过程的语句改一下,把 START TRANSACTION;-- 打开事务 和 COMMIT; -- 提交事务 去掉
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mysql 数据库,spring使用mybatis返回五万条数据花费一分钟时间,navicat中执行只有四五秒,如何优化mybatis
mysql 数据库,spring使用mybatis返回五万条数据花费一分钟时间,navicat中执行只有四五秒,如何优化mybatis
MySQL安装时出现Error The update has been cancelled的提示,请问大佬们有没有解决的方法。
之前电脑重装过,然后重新安装mysql时,安装过程中就会弹出这个对话框,然后点击OK之后,就自动结束了安装,安装不了。上网搜查了一下没有解决的方法,不知道是不是跟电脑安装的plsql有冲突。 求大佬解答,有没有解决的方法,谢谢了~ ![图片说明](https://img-ask.csdn.net/upload/202002/15/1581750552_906242.jpg)
mysql千万级数据,写多读少,如何优化
mysql数据库,其中有一张表数据量有3千万,写多读少,如何优化? 我对表进行大量写操作的时候,整个系统都无法访问了,请问是什么原因? 是因为对表执行大量的新增操作,IO变慢了?
请教MySql 多表分页优化
请教MySql 多表分页优化 1知道用索引具体怎么用(多表之间做不到索引覆盖吧?) 2表之间怎么连接好 最好有代码示例 十分感谢!
mysql root用户更新密码后系统显示为明文,输入正确的密码无法登录
mysql root用户更新密码后系统显示为明文,输入正确的密码无法登录,自己新创建一个用户,密码显示是加密后的,可以正常登录,mysql版本是最新的免安装版,百度一下说要给root用户赋权,使用“grant all privileges on . to ‘root’@’localhost’ identified by ‘mypassword’ with grant option;”无法赋权成功。
数据库mysql查询优化问题
最近做项目遇到一些mysql数据库查询优化的问题,单表查询一百万左右的数据,select count(*) 查询比较慢,如果再有分页查询,按条件查询又比较慢,各位有没有好的优化建议?
mysql单表分页查询数据量大的情况下怎么优化
mysql单表分页查询数据量大的情况下怎么优化,另外mysql优化有哪些注意的地方
mysql如何进行优化的问题
请问一个百万级的mysql表,进行普通全表查询大概需要多长时间,怎么我的数据库表只有60万条数据,却需要查询2分钟以外,我应该从哪些方面进行优化?
MacOS下 mysql 无法通过terminal启动
起因是在Spring boot中启动报错,没有找到本地数据库 1. terminal 输入 **mysql --version** > 弹出版本号 8.0.19 2. terminal 输入 **mysql.server start** 提示 > command not found: mysql.server 3. terminal 输入 **mysql** 报错 > ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: NO) 4. 可以手动在界面中开启或关闭mysql ![图片说明](https://img-ask.csdn.net/upload/202002/10/1581289159_236074.png)
Mysql中sql优化以及索引失效问题
求助,Mysql中sql优化有哪些方式?在什么情况下索引会失效?
mysql 大数据量查询优化
请教大神,关于mysql优化的,目前有三个字段, host(varchar2), sip(varchar2),request(text),这三个字段是用 or 来模糊查询的,这表也经常更新,目前数据500多万, 查询有点慢,怎么优化呀
求指教 android mysql更新问题
环境 Android 6.0 Android studio Xampp Mysql连接方式JDBC 数据在更新的时候,不管数据库里面含不含有想修改的数据 按下在库移动的按钮之后都会提示”移动完了“ 如何加一个验证的过程,如没有符合的Hinban和Tanaban1则提示输入错误 求指教 代码如下 ``` protected String doInBackground(String... strings) { try{ Class.forName("com.mysql.jdbc.Driver"); Connection conn= DriverManager.getConnection(url,user,pass); if (conn==null){ msg="接続エラー"; Toast.makeText(getApplicationContext(),msg, Toast.LENGTH_LONG).show(); } else { String query="UPDATE snk_io SET Tanaban='"+Tanaban2+"' WHERE Hinban='"+Hinban+"' and Tanaban='"+Tanaban1+"'"; Statement stmt = conn.createStatement(); stmt.executeUpdate(query); msg="移動完了です!!"; } conn.close(); } catch (Exception e) { msg="エラー発生しました。"; e.printStackTrace(); } return msg; } @Override protected void onPostExecute(String msg){ textView.setText(msg); ET1.setText(""); ET2.setText(""); ET3.setText(""); //Toast.makeText(getApplicationContext(),"入力しました", Toast.LENGTH_SHORT).show(); } ```
mysql connector c++ 抛出异常
我在官网下了mysql-connector-c++-8.0.17之后跑官网上的例程,抛出了下面这个错误: Connector/C++ standalone program example... Creating session on tcp://127.0.0.1 ... terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc 已放弃 (核心已转储) 我想知道是哪里出了问题,应该怎么解决 我用的系统是Ubuntu 18.04.4 下面是我的cmake ``` cmake_minimum_required(VERSION 3.10) project(SERVER) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Boost Library set(BOOST_INC_DIR /usr/local/include) set(BOOST_LIB_DIR /usr/local/lib) include_directories(${BOST_INC_DIR}) link_directories(${BOOST_LIB_DIR}) add_subdirectory(src) ``` ``` # Class MySqlConnector referenced by Class MySqlSession set(MYSQLCONNECTOR_LIB_DIR /usr/local/lib/mysql-connector-c++) set(MYSQLCONNECTOR_INC_DIR /usr/local/include) set(MYSQLCONNECTOR_SRC mysqlcppconn) include_directories(${MYSQLCONNECTOR_INC_DIR} ${SQL_INC_DIR}) link_directories(${MYSQLCONNECTOR_LIB_DIR}) add_executable(Server main.cpp) target_link_libraries(Server ${MYSQLCONNECTOR_SRC}) ``` ``` /* * Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2.0, as * published by the Free Software Foundation. * * This program is also distributed with certain software (including * but not limited to OpenSSL) that is licensed under separate terms, * as designated in a particular file or component or in included license * documentation. The authors of MySQL hereby grant you an * additional permission to link the program and your derivative works * with the separately licensed software that they have included with * MySQL. * * Without limiting anything contained in the foregoing, this file, * which is part of MySQL Connector/C++, is also subject to the * Universal FOSS Exception, version 1.0, a copy of which can be found at * http://oss.oracle.com/licenses/universal-foss-exception. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License, version 2.0, for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Basic example of an application using JDBC API of Connector/C++ */ /* Standard C++ includes */ #include <stdlib.h> #include <iostream> #include <sstream> #include <stdexcept> /* Note: Boost must be in the include path to build code which uses the JDBC API. */ #include <boost/scoped_ptr.hpp> #include <mysql/jdbc.h> #define DEFAULT_URI "tcp://127.0.0.1" #define EXAMPLE_USER "root" #define EXAMPLE_PASS "" #define EXAMPLE_DB "test" using namespace std; /* Usage example for Driver, Connection, (simple) Statement, ResultSet */ int main(int argc, const char **argv) { const char *url = (argc > 1 ? argv[1] : DEFAULT_URI); const string user(argc >= 3 ? argv[2] : EXAMPLE_USER); const string pass(argc >= 4 ? argv[3] : EXAMPLE_PASS); const string database(argc >= 5 ? argv[4] : EXAMPLE_DB); cout << endl; cout << "Connector/C++ standalone program example..." << endl; cout << endl; try { sql::Driver * driver = sql::mysql::get_driver_instance(); /* Using the Driver to create a connection */ cout << "Creating session on " << url << " ..." << endl << endl; boost::scoped_ptr< sql::Connection > con(driver->connect(url, user, pass)); con->setSchema(database); boost::scoped_ptr< sql::Statement > stmt(con->createStatement()); boost::scoped_ptr< sql::ResultSet > res(stmt->executeQuery("SELECT 'Welcome to Connector/C++' AS _message")); cout << "\t... running 'SELECT 'Welcome to Connector/C++' AS _message'" << endl; while (res->next()) { cout << "\t... MySQL replies: " << res->getString("_message") << endl; cout << "\t... say it again, MySQL" << endl; cout << "\t....MySQL replies: " << res->getString(1) << endl; } } catch (sql::SQLException &e) { /* The JDBC API throws three different exceptions: - sql::MethodNotImplementedException (derived from sql::SQLException) - sql::InvalidArgumentException (derived from sql::SQLException) - sql::SQLException (derived from std::runtime_error) */ cout << "# ERR: SQLException in " << __FILE__; cout << "(" << "EXAMPLE_FUNCTION" << ") on line " << __LINE__ << endl; /* Use what() (derived from std::runtime_error) to fetch the error message */ cout << "# ERR: " << e.what(); cout << " (MySQL error code: " << e.getErrorCode(); cout << ", SQLState: " << e.getSQLState() << " )" << endl; return EXIT_FAILURE; } cout << endl; cout << "... find more at http://www.mysql.com" << endl; cout << endl; return EXIT_SUCCESS; } ```
mysql单表千万数据如何优化
mysql 单表一千万的数据 多对多中间表 有A,B,C三张表 A表 表结构 id,name,time,.... B表 表结构 id,name.... C表(多对多中间表)表结构 id,Aid,Atime,Bid 为了优化把A表的time也放在了C表 C表 索引,index_Aid, index_Bid, index_Bid_Atime,index_Atime 查询语句:select DISTINCT Aid from C where Bid in (.....) order by Atime desc limit 0,20 在in大量的情况下 看解释器 走的索引是 index_Bid_Atime (Using index condition; Using temporary; Using filesort ) 很慢,如果把联合索引去掉 走排序的索引很快 在in只有1,2个的情况下 走联合索引很快,在排序索引很慢。有大神有优化办法吗?
谁能帮我解释下这段mysql是做什么的?怎么查询数据库名为[ShFTZNQI]的相关跟踪语句?为什么这段查询会很慢
```mysql -- 临时开启慢查询日志 show variables like '%quer%'; set global slow_query_log=1; -- 临时开启慢查询时间 show variables like 'long_query_time'; set global long_query_time=1; -- 设置慢查询存储的方式 show variables like 'log_output'; set global log_output = 'FILE'; set global log_output = 'TABLE'; -- 设置查看日志 SELECT * FROM mysql.slow_log; SELECT * FROM mysql.general_log; select sleep(30); explain select ID from new_table; 清空sql日志 SET GLOBAL slow_query_log = 'OFF'; ALTER TABLE mysql.slow_log RENAME mysql.slow_log_drop; CREATE TABLE mysql.slow_log LIKE mysql.slow_log_drop; SET GLOBAL slow_query_log = 'ON'; DROP TABLE mysql.slow_log_drop; SELECT * FROM mysql.slow_log order by start_time desc ```
mysql更新数据的同时查询记录
多线程更新mysql数据库表里的某个字段值,更新过程中查询特别慢,有什么好办法解决吗,数据量很小,就几条记录
如何打印出MySQL优化之后的SQL语句呢
我们知道SQL优化的基本原则就是是我们的SQL或HQL满足数据库查询优化器,那么我们能够通过什么方式看到查询优化器优化之后的SQL语句呢?
MySQL 插入更新报错 Truncated incorrect DOUBLE value: '2225600'
mysql两张表关联插入更新报错 目的将一张表中的几个字段值更新到另外一张表中。 关联字段一个是bigint,另外一个是varchar。 两个表关联查询时没有报错,但是插入更新就会报错 有什么方法可以解决报错问题,实现数据的插入或更新。 Truncated incorrect DOUBLE value: '2225600'。
php与mysql的优化问题
20万数据处理需小于3s。原生语句写的希望不是百度出来的答案。优化的方法都有哪些?
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
微服务中的Kafka与Micronaut
今天,我们将通过Apache Kafka主题构建一些彼此异步通信的微服务。我们使用Micronaut框架,它为与Kafka集成提供专门的库。让我们简要介绍一下示例系统的体系结构。我们有四个微型服务:订单服务,行程服务,司机服务和乘客服务。这些应用程序的实现非常简单。它们都有内存存储,并连接到同一个Kafka实例。 我们系统的主要目标是为客户安排行程。订单服务应用程序还充当网关。它接收来自客户的请求...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
SpringBoot2.x系列教程(三十六)SpringBoot之Tomcat配置
Spring Boot默认内嵌的Tomcat为Servlet容器,关于Tomcat的所有属性都在ServerProperties配置类中。同时,也可以实现一些接口来自定义内嵌Servlet容器和内嵌Tomcat等的配置。 关于此配置,网络上有大量的资料,但都是基于SpringBoot1.5.x版本,并不适合当前最新版本。本文将带大家了解一下最新版本的使用。 ServerProperties的部分源...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
爬取薅羊毛网站百度云资源
这是疫情期间无聊做的爬虫, 去获取暂时用不上的教程 import threading import time import pandas as pd import requests import re from threading import Thread, Lock # import urllib.request as request # req=urllib.request.Requ...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
HTML5适合的情人节礼物有纪念日期功能
前言 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字段也可自行修改,还有代码下半部分的JS代码需要修改一下起始日期 注意月份为0~11月 也就是月份需要减一。 当然只有一部分HTML和JS代码不够运行的,文章最下面还附加了完整代码的下载地址 &lt;!...
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问