- 博客(53)
- 收藏
- 关注
原创 iterator、for遍历集合的优缺点
对于在内存中存储空间为连续的集合,如ArrayList、数组,可以采用以下三种方式进行遍历:1、iterator迭代器遍历方式, 适用于连续内存存储方式,比如数组、 ArrayList(其实 ArrayList底层实现也是数组形式)。 缺点是只能从头开始遍历, 优点是可以边遍历边删除。例如:Iterator iter = list.iterator();while(iter.h
2017-07-27 22:39:14 11369 3
原创 理解高并发(4).死锁监测方法
windows环境:查看当前活动java进程jstack 堆信息输出分析堆信息,发现死锁死锁的通用解决法则:按相同的顺序加锁。
2017-07-24 12:34:40 304
原创 理解高并发(3).多线程开发常见问题示例
多线程开发过程中,经常会出现的一些问题:非线程安全、死锁、饥饿锁。 示例代码如下:非线程安全package com.zuche.thread.demo1;public class TestClient {public static void main(String[] args) {final Account account = new Accoun
2017-07-24 12:32:40 403
原创 理解高并发(2).我对并发编程的理解
对于并发编程, 涉及的技术点非常多, 我们首先需要明确一些基本概念,只有概念清晰,才能做到在以后深入学习关键技术的过程中不致于感觉到吃力和迷惑。 其次,我们还需要明白在并发编程最需要关注的问题是什么? 带着关键问题去学习,才能够起到事办功倍、稳扎稳打的效果。下面是我所总结的一些很多人容易混淆的概念:1. 高并发、多线程高并发高并发是请求,指的是多个客户端同一时刻向服
2017-07-24 12:31:43 4779 1
原创 理解高并发(1).序言
高并发已不是个热词, 然而用好它并非易事,很多时候如果没有使用得当,极容易产生适得其反的效果。 本系列我将系统性的给大家分享高并发的技术要点。 其具体技术点包括以下:1. 我对并发编程的理解2. synchronized原理及用法3. 显式锁的用法4. 锁的优化技巧5. 线程通信之_wait/notify6. 线程通信之_semaphore信号量7. 线程通信之_cou
2017-07-24 12:29:58 301
原创 理解mysql_常用经典sql
1、允许mysql远程连接 同4 3、查看字符集设置 show variables like 'character%'; 4、数据库赋权 grant all on *.* to 'root'@'%' identified by 'Reset123QWE'; flush privileges;
2017-07-22 17:30:17 226
原创 理解mysql_order by排序原理及优化
一、排序算法 a. 一次扫描性能高,减少了io随机请求的次数 b. 排序操作是在内存(sort_buffer)里面进行的, 先select结果再进行排序,如果结果值大于max_length_for_sort_data 阀值设置需要二次io读取 c. 关联查询会产生临时表再进行order by 二、优化思路 a. 尽量减少io的读取 max_
2017-07-22 17:29:19 2434
原创 理解mysql_简述mvcc
Mvcc其实并不是真正意义上实现的乐观锁。mysql只是用它来解决事务隔离级别中的不可重复读的问题。 当事务T1 开启后, 需要修改某行, 会先给该行加上排他锁, 并且生成一个版本。 此时,事务T2进入,读取的记录永远是事务T1提交前的一个版本。 避免了2次读的记录不一致的情况。
2017-07-22 17:28:23 323
原创 理解mysql_limit优化思路
Limit 是将所有记录查询出来进行范围限制输入。 会导致前面不需要的记录也进行io读取。 优化整体思路就是尽可能少操作io, 常用手段: 1、使用记录主键的方式进行优化 如: select * from p2p_20131230 where main_id > 1000000 order by main_id limit 10; 2、使
2017-07-22 17:27:46 166
原创 理解mysql_锁的概念
对于锁需要重点掌握以下: 1. 锁分类 ● 表锁 ● 行锁 ● 对象锁(meta-table锁),在table cache层实现 ● 页锁 ● 排他锁(互斥锁、X锁) ● 共享锁(S锁) 2.锁的使用注意事项 ● innodb引擎是行级锁,适用于高并发场景的后台系统 ● myisam引擎采用的是表级锁,适用于前端we
2017-07-22 17:26:44 341
原创 理解mysql_mybatis字段映射表
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.Big
2017-07-22 17:25:37 1156
原创 理解mysql_mysql主从原理及配置
实现原理: mysql的主从同步主要是通过bin-log来实现, 它是数据库服务器来控制的而非存储引擎控制,大概思路是master服务器从log buffer刷新磁盘的同时生成一个bin-log文件,通过socket消息发送给slave,slave执行完毕后(有可能是失败,也有可能是成功)向master报告一个消息, master根据情况判断是否commit还是roll
2017-07-22 17:24:44 203
原创 理解mysql_事务的隔离级别
我们经常会出现A事务未交更改,B事务就能看到, 或者B 事务执行2次相同sql但查询的结果不一致,遇到这种情况可以通过设置不同的事务隔离级别来解决。 mysql有四种隔离级别: ● read-uncommited(读-不需要提交): set tx_isolation='READ-UNCOMMITTED'; 在2个事务同时进行过程中,A事务做过数
2017-07-22 17:23:46 228
原创 理解mysql_事务原理及常见优化思路
WAL机制, 先采用日志的方式将操作记录下来,然后刷新磁盘。 InnoDB遵循WAL协议,在日志持久化到磁盘之后,才会将日志对应的脏页刷 回磁盘; InnoDB内存中,DML操作顺序如下: – 写Undo(获取ROLLBACK_PTR系统列) – 修改Page – 写Redo的顺序 不同的Update语句,写的日志量有较大差异(三种Update C
2017-07-22 17:22:03 1164
原创 理解mysql_索引的原理及优化技巧
innodb的索引: ● innodb采用索引组织数据的形式,它是在存储引擎层面实现的,与后端的服务器层没有关联。不同的存储引擎有不同的实现算法。 ● 索引的原理 索引采用b tree(平衡树)树的形式保存,所以是有顺序的。 索引的数据存储在表空间(tablespace)里面, 聚集索引(主键
2017-07-22 17:21:06 227
原创 理解mysql_批量执行的性能优化
MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。 只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)。不过,驱
2017-07-22 17:16:48 502
原创 理解mysql_分库分表的一些认识
垂直切分: 垂直分表: 将原有表中的字段拆分成多个表 垂直分库: 微服务中盛行, 每个业务子系统有自己独立的数据库。 好处:结构清晰 缺点:增加系统复杂度,需要各个系统对外暴露接口。 水平切分: 水平分表: 表结构一致。 将原有记录按一定规律拆分到多个相同结构的表里
2017-07-22 17:15:11 382
原创 理解mysql_如何优雅的设计表结构
数据存储的重要性大家都知道,在此就没必要去强调了。 那么如何将软件运行的这些数据有效合理的存储起来呢? 在设计时可以参考如下几点: 1、表结构的设计优先考虑遵循3范式 为什么要遵循第3范式? 遵循第3范式的设计可以使数据存储简洁、清晰、数据不会有冗余的情况。 3范式的基本原则: a. 字段必须不
2017-07-22 17:13:38 2062
原创 理解mysql_序言
可以说, 不懂mysql基础原理和简单优化思路的程序员算不上一名合格的程序, 因为你不懂这些技术,你就很难开发出高效能的代码出来。 也接触过很多开发人员,他们的重心大多数数还集中在程序代码这个层面,对数据库层面的东西知之甚少。 为了帮助广大技术同行,使他们的专业技能体系能够更加完善,决定从开发的角度,完整性的将mysq核心技术点进行总结梳理, 旨在 大概内容包括: 1、如何
2017-07-22 17:11:49 288
原创 管理感言_留住人才很重要
现在的社会人们普遍都很浮澡, 特别是IT行业, 每年的5、6月份为跳槽热季(因为那个时候大部分公司年终奖已经发完了)。 如果说你们团队没有什么让人值得留恋的话,那么下属离开你是迟早的事。 马云也说过: 离职的原因有2种,一是钱没给到位; 二是心受委曲了。 对于薪资待遇或许非你力所能及,但是作为leader你完全可以做你能做的,尽你自己最大的努力去稳住这个团队, 通常我所采用的几
2017-07-22 16:53:04 414 1
原创 管理感言_进度把控2原则
如何保证进度? 这里分享2点经验: 1、 寻找最佳路径 方法总比问题多,当出现问题时,总会有若干种的解决方案, 我们一定要选择出最合适的那个,究竟什么是最合适的,这个很难定论,就像挑对象,我们不需要最优秀的那个,但一定要最合适的那个。 拿我当年项目中的一个例子来举例。 2009年江西电信网管项目实施, 产品后台采用的是corba告警广播,当告警达到一定量
2017-07-22 16:51:32 482
原创 管理感言_任务分配要得当
记得在神州负责过的一期需求开发, 原本计划2周时间上线, 结果却拖延了1个多月, 事后总结的原因就是用人不当。 我们团队当时有好几个产品, 除了leader不轮岗之外,其他所有开发人员都实行轮岗制, 恰好这期需求有个工作七八年的女生轮到我这边了,因为平时工作上与她深入接触的也比较少,从其他leader那侧面打听到该人做事还行, 以前参与过几次他们的方案讨论,感觉她确实也还不错,于是这期需求的核心模
2017-07-22 16:50:21 719 1
原创 管理感言_需求开发八字诀
总结起来就8个字:小步迭代,快速交付。 假如说团队有4人,同时来了4个系统, 每个系统每人需要花费4天, 你会如何安排? 可能有些朋友会说每人负责一个系统,4天后所有系统都能完成交付了。 其实不然,举一个我自己亲身经历的项目: 2007年在吉林移动实施了BAM监控系统,前后共计投入10多人,4个模块(监控、告警、报表、工作流),历时长达10个月之久(哈哈,后来大家都
2017-07-22 16:47:51 352
原创 管理感言_人员培养看人品
众观以往参与的各个项目, 分析团队成员的特性,无外乎以下几种,主要从人品和能力象限来划分: 1、有能力, 有人品 2、有能力, 无人品 3、无能力、有人品 4、无能力, 无人品 值不值得培养,需要评判,毕竟培养人是需要花时间和精力的。套用一句时髦的语:培养是把双刃剑,培养得好能带来效益,培养不好让你受气。
2017-07-22 16:46:30 531
原创 管理感言_打铁还需自身硬
一线管理人员是公司的中坚力量,他们即要传播公司主体文化,又要带领底层开发人员完成各项开发任务目标, 不能来一点虚的, 因此对一线管理人员的素质要求特别高。 就我自己的经验, 我认为以下几项最为重要: 一、必须具备扎实的技术功底 不一定要有广度,但一定要有深度。计算机软件技术日新月异,人的精力也是非常有限的,不可能所有技术都涉猎到, 如果深度达到了学习其它技术能触类
2017-07-22 16:45:05 416
原创 管理感言_序
前几天和朋友聚会,聊到了产品管理和团队管理过程中遇到的一些问题, 总结了一下大致有这么几类:开发出来的东西bug多,需求交付经常性dely,下属挑活、懒散效率低。 交谈中不禁让我回想起了自己这么些年的职业生涯,感触颇多。 从刚出学校那会的懵懂少年程序员,到现在团队里面年龄最大的老鸟, 一路走来,不管是在技术上遇到的挑战还是在管理中遇到的困惑又岂是餐桌上几个小时所能道得清、说的尽的?
2017-07-22 16:42:25 272
原创 理解高并发_我对并发编程的理解
对于并发编程, 涉及的技术点非常多, 我们首先需要明确一些基本概念,只有概念清晰,才能做到在以后深入学习关键技术的过程中不致于感觉到吃力和迷惑。 其次,我们还需要明白在并发编程最需要关注的问题是什么? 带着关键问题去学习,才能够起到事办功倍、稳扎稳打的效果。 下面是我所总结的一些很多人容易混淆的概念: 1. 高并发、多线程 ● 高并发 ...
2017-07-20 13:28:14 686 1
原创 理解高并发_序言
高并发已不是个热词, 然而用好它并非易事,很多时候如果没有使用得当,极容易产生适得其反的效果。 本系列我将系统性的给大家分享高并发的技术要点。 其具体技术点包括以下: 1. 我对并发编程的理解 2. synchronized原理及用法 3. 显式锁的用法 4. 锁的优化技巧 5. 线程通信之_wait/notify...
2017-07-20 13:26:55 126
原创 理解mysql_常用经典sql
1、允许mysql远程连接 同4 3、查看字符集设置 show variables like 'character%'; 4、数据库赋权 grant all on *.* to 'root'@'%' identified by 'Reset123QWE'; flush privileges; ...
2017-07-20 09:43:22 118
原创 理解mysql_order by排序原理及优化
一、排序算法 a. 一次扫描性能高,减少了io随机请求的次数 b. 排序操作是在内存(sort_buffer)里面进行的, 先select结果再进行排序,如果结果值大于max_length_for_sort_data 阀值设置需要二次io读取 c. 关联查询会产生临时表再进行order by二、优化思路 a. 尽量减少io的读取 max_lengt...
2017-07-20 09:38:17 226
原创 理解mysql_简述mvcc
Mvcc其实并不是真正意义上实现的乐观锁。mysql只是用它来解决事务隔离级别中的不可重复读的问题。当事务T1 开启后, 需要修改某行, 会先给该行加上排他锁, 并且生成一个版本。此时,事务T2进入,读取的记录永远是事务T1提交前的一个版本。避免了2次读的记录不一致的情况。...
2017-07-20 09:38:05 294
原创 理解mysql_limit优化思路
Limit 是将所有记录查询出来进行范围限制输入。 会导致前面不需要的记录也进行io读取。优化整体思路就是尽可能少操作io, 常用手段: 1、使用记录主键的方式进行优化 如: select * from p2p_20131230 where main_id > 1000000 order by main_id limit 10; 2、使用子查...
2017-07-19 09:39:21 90
原创 理解mysql_锁的概念
对于锁需要重点掌握以下: 1. 锁分类 ● 表锁 ● 行锁 ● 对象锁(meta-table锁),在table cache层实现 ● 页锁 ● 排他锁(互斥锁、X锁) ● 共享锁(S锁)2.锁的使用注意事项 ● innodb引擎是行级锁,适用于高并发场景的后台系统 ● myisam引擎采用的是表级锁,适用于前端web系统 ● 执...
2017-07-19 09:39:12 92
原创 理解mysql_数据类型
bigint: 9223372036854775807 20位 2^63-1int: 2147483647 10位 2^32-1smallint : 32767 5位 2^16-1tinyint: 128
2017-07-19 09:38:43 88
原创 理解mysql_mybatis字段映射表
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.Big...
2017-07-19 09:33:38 167
原创 理解mysql_mysql主从原理及配置
实现原理: mysql的主从同步主要是通过bin-log来实现, 它是数据库服务器来控制的而非存储引擎控制,大概思路是master服务器从log buffer刷新磁盘的同时生成一个bin-log文件,通过socket消息发送给slave,slave执行完毕后(有可能是失败,也有可能是成功)向master报告一个消息, master根据情况判断是否commit还是roll...
2017-07-19 09:33:30 113
原创 理解mysql_事务的隔离级别
我们经常会出现A事务未交更改,B事务就能看到, 或者B 事务执行2次相同sql但查询的结果不一致,遇到这种情况可以通过设置不同的事务隔离级别来解决。 mysql有四种隔离级别: ● read-uncommited(读-不需要提交): set tx_isolation='READ-UNCOMMITTED'; 在2个事务同时进行过程中,A事务做过数据更...
2017-07-18 22:20:59 98
原创 理解mysql_事务原理及常见优化思路
WAL机制, 先采用日志的方式将操作记录下来,然后刷新磁盘。 InnoDB遵循WAL协议,在日志持久化到磁盘之后,才会将日志对应的脏页刷 回磁盘;InnoDB内存中,DML操作顺序如下: – 写Undo(获取ROLLBACK_PTR系统列) – 修改Page – 写Redo的顺序不同的Update语句,写的日志量有较大差异(三种Update Cas...
2017-07-18 22:20:01 140
原创 理解mysql_索引的原理及优化技巧
innodb的索引: ● innodb采用索引组织数据的形式,它是在存储引擎层面实现的,与后端的服务器层没有关联。不同的存储引擎有不同的实现算法。 ● 索引的原理 索引采用b tree(平衡树)树的形式保存,所以是有顺序的。 索引的数据存储在表空间(tablespace)里面, 聚集索引(主键索引)上...
2017-07-18 22:18:15 82
原创 理解mysql_批量执行的性能优化
MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。 只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)。不过,驱...
2017-07-18 22:16:35 162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人