如何处理JDBC批量插入sql不支持多表的情况下的入库速率不稳定的问题? 40C

是这样的,现在我要从来自Kafka的20多个topic中消费出数据,每个topic对应Clickhouse里面的一个表。

但是Clickhouse的JDBC批量插入只支持预编译SQL,即每个 PrepareStatement对象只能批量插入一个表的数据。如下:

Connection connection = getConnection();
PrepareStatement ps = connection.prepareStatement("insert into xxx values (?, ?, ?, ?)");
ps.setObject(1, xxx);
ps.setObject(2, xxx);
ps.setObject(3, xxx);
ps.addBatch();
ps.executeBatch();
ps.clearBatch();
// ......

所以,我在入库程序把每个表的入库分为不同的线程,分别维护不同的PrepareStatement对象,
入库不同的表。比如现在有20个表,我设定每个表3个线程,那么总共就有60个入库线程。

但是这样子做的话,我无法保证入库的速率稳定,因为有的表数据量大,有的因为业务开启有时较大,而分配的入库线程是固定的。各位盆友有什么解决办法吗?

ps:入库程序用的flume,用的官方的KafkaSource,然后写了一个Clickhouse的Sink,每个sink就是对应一个入库clickhouse的线程。Channel用的文件内存通道。当Kafka数据量大时,入库速率远远小于消费速率,可能导致Channel通道满,堆积大量磁盘文件,读写磁盘操作又进一步影响sink取数据,然后越来越慢。。最后Kafka都报一堆问题。

再ps:Clickhouse是6个节点的集群,三个分片,一个副本的配置。我批量插入设置150000条一次批量插入。

2个回答

说实话,你多线程除了让程序更慢,一点意义都没有,因为性能瓶颈在磁盘IO而不是CPU或者延迟上,如果你要优化插入的性能,少使用触发器、各种约束,关联等,这些都是开销。
建议你可以考虑分库分表了。

baidu_36694784
养浩爱你呦 入得Clickhouse,没有外键触发器事务之类的概念,测试的环境集群是6个节点的。如果不考虑内存文件通道的问题,从入库方面有什么更好的建议。现在想到的是可以根据Kafka的分区数部署多几个flume入库程序,但好像不能从根本解决入库速率不均匀的问题。
4 个月之前 回复

批量insert into表数据也有上限,每张表数据也需要分批插入,比如一次2000条数据,且建议使用多个定时任务,不同表错开执行时间。

hjs218
Json-Huang 回复养浩爱你呦: 20张表,可以分批执行,不要在同一个时间点执行,这样每次执行可以使用更多cpu、内存资源,比如表1-4可以在1点执行,表5-8在3点执行,依此类推。
4 个月之前 回复
baidu_36694784
养浩爱你呦 现在是1w条数据一次批量插入,请问定时任务错开不同表执行时间是什么道理,不太懂。
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
jdbc批量插入,数据只有一条
我统一10条插入一次,可是最后数据库只有第十条数据,前九条都没有,插入几次都是,怎么办 List<String> backList = new ArrayList<String>(); Connection con = getConnection(); PreparedStatement stat = null; String str= null; int j = 0; for(int i=0;i<list.size();i++){ str = list.get(i); String[] arr = str.split(","); j++; if(arr.length ==10){ try { String name = arr[0]; String pinyin = arr[1]; String age = arr[2]; String sex = arr[3]; String phone = arr[4]; String mobilephone = arr[5]; String address = arr[6]; String birthday = arr[7]; String birthPlace = arr[8]; String company = arr[9]; //根据参数动态拼一个insert语句("+deptno+",'"+dname+"','"+loc+"')" String sql = "insert into user_info "+"values ('"+name+"','"+pinyin+"','"+age+"','"+ sex+"','"+phone+"','"+mobilephone+"','"+address+"','"+birthday+"','"+birthPlace+"','"+company+"')"; stat = con.prepareStatement(sql); System.out.println(sql); stat.addBatch(); System.out.println("sql语句加入批处理中"); } catch (SQLException e2) { // TODO Auto-generated catch block } } if(j == list.size()){ int s [] = stat.executeBatch(); for(int a:s){ System.out.println(a); } } } try { stat.close(); con.close(); } catch (SQLException e1) { e1.printStackTrace(); }
jdbc批量插入抛异常,怎么找到有问题的数据
批量插入一批数据,如果这批数据中,有几条是有问题的,executeBatch会出异常,我怎么挑出来,是那几条有问题
关于jdbc事务处理,批量插入数据的问题
部分代码如下: Class.forName(driver).newInstance(); con = DriverManager.getConnection(url,"root","123456"); if (con==null){ System.out.println("NULL"); } String SQL = "Insert into test.test value (null,?,?,?,?,?,?,?,?,?,?,?,?,?);" ; con.setAutoCommit(false); PreparedStatement pst = (PreparedStatement) con.prepareStatement(SQL); while((dbtxtcontent = br.readLine())!=null) { dbtxtcontent = dbtxtcontent.replaceAll("\'",""); String[] val = dbtxtcontent.split(","); boolean flag = false; try { pst.setInt(1, k); k++; pst.setString(2, ""+val[0]); pst.setString(3, ""+val[1]); pst.setString(4, ""+val[2]); pst.setString(5, ""+val[3]); pst.setString(6, ""+val[4]); pst.setString(7, ""+val[5]); pst.setString(8, ""+val[6]); pst.setString(9, ""+val[7]); pst.setString(10, ""+val[8]); pst.setString(11, ""+val[9]); pst.setString(12, ""+val[10]); pst.setString(13, ""+val[11]); pst.addBatch(); } catch (Exception e) { System.err.println("Error CODE:" + e); } line++; } pst.executeBatch(); con.commit(); pst.close(); con.close(); 原程序目的是获取一数据文件内容,并将数据插入数据库。 现在的问题是,数据量较大,全部加入到addBatch,执行时提示内存溢出, 读一条插一条的方法不能在指定的时间内将数据插入数据库, 我想分多次插入,例如每次20000条,数据不是整万的,有零头,尝试了很多次,都没有找到方法 请问大神们该如何修改这段代码?????
jdbc跨服务查询表,插入表
用jdbc链接两个服务器,把一个数据库里的数据查询出来插入到另一个服务器上已经存在的结构一样表里
java JDBC 批量插入的时候报数组下标越界,求大神
代码: private static Boolean Function_User(Map<String, List> resultMap, String sql,String tableType) { // TODO Auto-generated method stub Connection conn=null; PreparedStatement insert_st=null; int count = 0; final int batchSize = 500; System.out.println("开始:"+Calendar.getInstance().getTime()); try { conn=DriverManager.getConnection(db_url,db_name,db_pwd); conn.setAutoCommit(false); insert_st = conn.prepareStatement(sql); for (int i = 0; i < resultMap.get(tableType).size(); i++) { Object obj = resultMap.get(tableType).get(i); OrderUserSnap user = (OrderUserSnap) obj; insert_st.setString(1, ZH_S(user.getId())); insert_st.addBatch(); if(++count % batchSize == 0) { insert_st.executeBatch(); insert_st.clearBatch(); } System.out.println("tt:"+count); } insert_st.executeBatch(); insert_st.clearBatch(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { insert_st.close(); conn.close(); System.out.println("结束:"+Calendar.getInstance().getTime()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return true; }
java 多线程 批量执行JDBC的 executeBatch会产生脏数据嘛
java多线程并发,每个线程中会生成多个sql语句,利用JDBC的executeBatch方法 对每个线程的产生的sql语句进行入库操作,这样会不会导致写入脏数据: 比如:A线程正在写入100条数据,B线程也正在写入100条数据,当执行JDBC的批量执行SQL的时候,会不会把B的数据复制到A的数据 中: JDBC的 方法如下: String sql="insert into xxx(id,ratio,date,status,close)" + "values(?,?,?,?,?)"; PreparedStatement pst=conn.prepareStatement(sql); String code=""; for(Today ts:tslist){ pst.setString(1, ts.getxxx); pst.setDouble(2, ts.getxxx); pst.setInt(3, ts.getxxx); pst.setInt(4, ts.getxxx); pst.setInt(5, ts.getxxx ); pst.addBatch(); } int arr[]=pst.executeBatch(); 这种数据库的批量操作,在多线程下,是不是会产生脏数据,请大牛们解答一下:
jdbc执行sql 不支持“variant”数据类型。
我一个sql查询表说明字段 ``` select top 100 [value] from sys.extended_properties ``` 在java中使用jdbc执行的时候总是报错,说value是一个变量类型。如下错误 ``` Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不支持“variant”数据类型。 ``` 请问有人遇到过吗,如何解决
关于jdbc中插入和更新的问题
我用的oracle用jdbc进行相关操作,可是,只有插入语句能执行,不能执行更新和删除语句,这是怎么回事呢?
【jdbcTemplate】批量插入异常捕获
在使用jdbctemplate的批量操作的时候 调用jdbcTemplate.batchUpdate,他的原理机制是,集合一定数量的sql,一起发送到数据库,这样减少与数据库频繁交互的成本 但现在有一个问题就是,我这有50条sql,批量插入,然后有一条有问题,我如何让这一条执行失败时,不影响其余49条语句的执行呢? 下面是我自己封装的一个方法 批量插入这个list到数据库去,如果出现什么值太大,违反唯一性约束什么之类的异常,我的那个catch根本就捕获不住,我最多只能知道这个list插入有问题,没法实现list中一条记录有问题,不影响其他记录的执行 [code="java"] public void insert(final List<?> lists) { // 获取insert语句 eg:sql = insert into user (id,name,age) values (?,?,?) String sql = SqlUtils.getInsertSql(lists.get(0)); jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) { Object value = lists.get(i); // objects = 获取代替?的具体值 Object[] objects = SqlUtils.getValues(value); for (int k = 0; k < objects.length; k++) { try { ps.setObject(k + 1, objects[k]); } catch (SQLException e) { log.error("数据库异常 -- "+value.getClass().getSimpleName(),e); } } } @Override public int getBatchSize() { return lists.size(); } }); } [/code]
jdbc定时批量插入数据报错
错误提示如下: Dec 19, 2014 12:20:00 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:00 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:00 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:00 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:03 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:03 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:06 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:06 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:06 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:06 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:08 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:08 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:09 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:09 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:09 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:09 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:11 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:11 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:11 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:11 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:13 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:13 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:17 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:17 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:19 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:19 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:20 AM org.hibernate.util.JDBCExceptionReporter logExceptions WARNING: SQL Error: 1615, SQLState: HY000 Dec 19, 2014 12:20:20 AM org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Prepared statement needs to be re-prepared Dec 19, 2014 12:20:21 AM org.hibernate.util.JDBCExceptionReporter logExceptions 32 AM org.hibernate.util.JDBCExceptionReporter logExceptions 注:定时器设置为每10分钟执行一次,使用的数据库为MySQL
JDBC 1443 sqlserver
JDBC 连接 sqlserver 必须要开启1433端口吗?不只是本机连接
JDBC使用占位符的插入语句插入不成功是什么原因
``` …… public static void insert(String name,String password) throws Exception{ Connection conn = null; PreparedStatement st = null; ResultSet rs =null; conn = DbUtils.getConn(); String sql="insert into User(name,password) values(?,?)"; st = conn.prepareStatement(sql); st.setString(1,name); st.setString(2, password); int num = st.executeUpdate(sql); if(num>0){ System.out.println("插入成功!!"); } DbUtils.release(conn, st, rs); } public static void main(String args[]) throws Exception{ …… IUserDao.insert("hello","89790"); …… } } ``` +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | userID | int(11) | YES | | NULL | | | name | varchar(255) | YES | | NULL | | | sex | varchar(255) | YES | | NULL | | | birthday | date | YES | | NULL | | | password | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 一直报错,但是不知道是怎么错了。求教 orz Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?)' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) at com.mysql.jdbc.Util.getInstance(Util.java:387) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547) at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1541) at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2605) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1469) at dao.IUserDao.insert(IUserDao.java:107) at dao.IUserDao.main(IUserDao.java:120) 表名没错,id不是自增的,没有primarykey。把sql写死是可以插入的,用“?”就不行了,为什么呢?
如何利用JDBC连接上SQL 2005?
sqljdbc.jar 在哪里下载?在网上找了半天没找到,再 如何利用JDBC连接上SQL 2005?
mybatis如何通过jdbc连接sqlserver数据库
我用的NavicatServer软件 制作的数据库表,并且可以连接上 有ip地址 用户名和密码 在junit测试的时候 报错: **Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 127.0.0.1,1433 的 TCP/IP 连接失败。错误:“null。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”。** 在网上找了很多办法没有解决。 1先是从官网下载了sqlserver的安装包 安装上了 2有下载了jdbc连接sqlserver的驱动包 这样反复几次还是这个报错信息 问题已经解决了:谢谢大家。 只需要更改url上的IP地址和端口号即可。无需在本地安装sqlserver数据库啦!
jdbc怎么同时插入两个有关联的表?
![图片说明](https://img-ask.csdn.net/upload/201912/25/1577238243_42992.png) role_info 和role_module这两个表,应该怎么写
Mysql批量插入和更新的性能
利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题。 1.批量插入。我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不固定),循环3000次。每次在循环到100次左右的时候,会出现“com.jolbox.bonecp.ConnectionPartition - BoneCP detected an unclosed connection and will now attempt to close it for you. You should be closing this connection in your application - enable connectionWatch for additional debugging assistance.”,紧接着程序就没有反映了。 2.批量更新。每次批量更新的数据量大约在3w条左右,居然要耗时16秒左右,有没有办法提高性能至2秒左右。代码如下: [code="java"] String sql = "replace into savedata(id , saveId , saveKey , value)values(?,?,?,?)"; Session session = getSessionFactory().openSession(); Connection conn = session.connection(); Transaction tx=getSessionFactory().openSession().beginTransaction(); try { PreparedStatement stmt=conn.prepareStatement(sql); for (Savedata savedata : list) { stmt.setString(1, savedata.getId()); stmt.setString(2, savedata.getSaveId()); stmt.setString(3, savedata.getSaveKey()); stmt.setString(4, savedata.getValue()); stmt.addBatch(); } stmt.executeBatch(); tx.commit(); } catch (Exception e) { }finally{ try { conn.close(); } catch (SQLException e) { log.warn("the db connection cant not close!" ,e); } if(session.isOpen()) session.close(); } [/code]
jdbc 从数据库一张表中查询得到一个值,插入到另一张表中,插入不进去
jdbc 从数据库一张表中查询得到一个值,插入到另一张表中,插入不进去,代码如下: public void addObjectFields(Company c)throws SQLException{ Connection conn=DBUtil.getConnection(); Statement stmt = conn.createStatement(); String insertSql = " insert into cdpt_object_fields"+ "( object_id,object_name,object_type,field_id,field_auto_id,field_name,field_type,field_level)"+ " values("+ "?,?,?,?,?,?,?,?)"; PreparedStatement ps = conn.prepareStatement(insertSql); String querySql = "select company_id from cdpt_company_info where cdpt_company_info.company_name= c.getCompany_name()"; ResultSet rs = stmt.executeQuery(querySql); while (rs.next()) { ps.setInt(1, rs.getInt("company_name")); } ps.setString(2, c.getCompany_name()); ps.setInt(3, 0); ps.setString(4, c.getIndustry_id()); ps.setInt(5, c.getField_autoid()); ps.setString(6, c.getIndustry_name()); ps.setInt(7, 0); ps.setString(8, "0"); ps.execute(); }
Mysql批量插入,显示错误Query execution was interrupted
问题:使用spring jdbc 批量向mysql数据库插入数据库,一次一万条,报错信息如下: SQL state [70100]; error code [1317]; Query execution was interrupted; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLQueryInterruptedException: Query execution was interrupted 使用的插入语句是 <sql id="batchInsert"> <![CDATA[ INSERT IGNORE INTO order( row_key, opr_id )VALUES <#list datas as r> ("${r['rowKey']}", "${r['oprId']}" ) <#if r_has_next>,</#if> </#list> ]]> </sql> spring版本3.1.2 mysql版本5.7.19-17 搞不懂,只是插入数据,为什么会导致查询被打断,请问这种问题如何修改?
jdbc连接不上数据库,sqlserver2000,jdbc
系统win7, 驱动sql2k,但就是连接不上数据库 jdbc-odbc可以连接数据库 求大神指教,谢啦 报错是:java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver package com.test_sql; import java.sql.*; public class Demo4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Connection conn = null; PreparedStatement ps = null; ResultSet rs =null; try { //加载驱动 //com\microsoft\jdbc\sqlserver Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //建立连接jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DBName conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=master","sa","arisen"); String sql = "select *from employee"; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ int uid = rs.getInt("uid"); String uname = rs.getString(2); double sal = rs.getDouble(3); int deptno = rs.getInt(4); System.out.println(uid+" "+ uname +" " +sal+" "+deptno); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally{ try { if(rs!=null){ rs.close(); } if(ps!=null){ ps.close(); } if(conn!=null){ conn.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# 二进制截断字符串 c#实现窗体设计器 c#检测是否为微信 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片
立即提问