Fork me on GitHub
雨正来【一路奔跑的人】


  • 首页

  • 归档

  • 分类

  • 标签

  • top

  • 关于

  • 搜索

java内存gc相关复习

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 1.4k

java内存gc相关复习

##平台无关性

jvm如何加载一个.class 文件的, classloader -》runtime data area -〉execution engine -》native interface

java 反射机制是 在运行状态中,对于任意一个类都能知道这个类的所有属性和方法,对于任意一个对象都能任意调用它的方法和属性;这种能力称 java 反射机制。

classforname();获取实例 , method 或者方法,invoke 进行调用。setacessiable 为true

bootstrapclassloader extclassloader appclassloader

##为什么有双亲委派机制?

​ 避免同一个class被多次加载,如果一个class 被加载是需要先去查询父类加载器是否已经加载,如加载直接返回。

class.forname 是完成初始化的

classloader.loadclass 为未完成初始化的

元空间metaspace 和 永久代区别 都属于 方法区,jdk8 之后元空间代替了永久代,元空间使用本地内存,永久代使用jvm内存。

metaspace优势于永久代的几点:

  1. 字符串常量池存储在永久代中容易出现性能问题和内存溢出
    1. 类的方法和信息大小难易确认给永久代带来困难
    2. 永久代给gc 带来复杂度提升
    3. hotspot 和 jrockit 可能要合并
      阅读全文 »

网络编程相关复习

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 176

网络编程复习

7层

物理层 ,链路层,网络层,传输层,会话层,表示层,应用层

tcp 报文头 构成

source ,target ,dist 各占2字节 ,序号 4字节,Ack序号,offset,tcp Flags ,滑动窗口,

tcpflags ACK,SYN,FIN,urg,rst,psh

三次握手

C端发送SYN ,seq=x ,S端 ACK和SYN 标识都是1 ,seq = y ,C端 接收 ACK =1 ,ack = y+1,seq =x+1.

阅读全文 »

一条SQL查询语句是如何执行的

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 210

#一条SQL查询语句是如何执行的?
当我们执行一条语句时候,select * from table where ID = 1;
下边是mysql 语句执行的过程


1
2
mysql -h$ip -P$port -u$user -p
show processlist

查看进程之后就显示出,现在数据库连接的状态等。

其中第一条就是空闲的连接,默认时间为8h,参数为wait-timeout ,请注意最早开发还遇到过 Lost connection to MySQL server during query 这样的错误就是因为连接超时自动断开了。
客户端其实最好保持长连接状态 ,执行完大的任务后,执行下 mysql_reset_connection,重新初始化连接资源。
mysql 8版本之后,查询缓存已经被去掉了。
主要简单理解下,mysql 执行过程,了解分析器,优化器,执行器,存储引擎 innodb,myisam

数据库的四大特效和隔离级别

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 278

数据库的四大特效和隔离级别

四大特性

ACID,原子性,一致性,隔离性,持久性。
隔离级别:

  • 读未提交 readuncommit
  • 读已提交 read commit
  • 可重复读 read repeat
    • 读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到。
    • 读已提交:别人改数据的事务已经提交,我在我的事务中才能读到。
    • 可重复读:别人改数据的事务已经提交,我在我的事务中也不去读。
      • 串行:我的事务尚未提交,别人就别想改数据。

        这4种隔离级别,并行性能依次降低,安全性依次提高。
        可重复读是mysql默认的级别,使用多版本控制去实现的,底层在开启一个事务的时候创建视图,所以能保证前后读取都是一致的。

  • 序列化
    避免客户端的长链接,mysql5.5 回滚事务的日志存储ibdata ,回滚日志来源于数据发生一次变动的时候,就会创建也就会有多个版本,

一条更新语句是如何执行的

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 846

一条更新语句是如何执行的?

复习之前学过的内容,分析器,解析器,优化器,执行器 。更新流程和查询不一样,会涉及到2个重要的日志,一个redo log ,一个是bin log 。

Redo Log

redo log 属于innodb 引擎的日志

  • mysql中的WAL 技术,全称 write-ahead-loging ,关键点,先写内存后写磁盘,更新到内存更新就算完成了,innodb会在系统空闲时候去做写入磁盘操作。
    • redo log 是固定大小的,比如配置4个大小为1G的文件,从头开始写,写到3的末尾结束。
    • write pos 和 check point 中间的位置是可以写入的内容,2个pos 都是向前推进的,当write 追上check的位置时,不能执行更新,需要check 往前进行推进。即使数据库发生异常,mysql 也能保证之前提交的记录保存下来,这个机制叫做crash-safe 。

Bin log

binlog 属于server层的日志 ,binlog 有二种模式,一种是statement 另外是row ,statement 格式的话是记sql语句, row格式会记录行的内容,记两条,更 新前和更新后都有。
注: mysql 其实就2块,一块server层 另外一块是引擎层 。

redo log 和 binlog 的不同点

  1. redo log 属于引擎层,binlog 属于server层。
  2. redo log 记录是的物理的日志,例如 “某个数据项上进行了修改”,binlog 是逻辑日志,记录这个语句的原始逻辑,例如 给id 为2 的c字段加一。
  3. redo log 可以循环写,空间固定会用完,binlog 进行追加写,写到固定大小后,换另外一块写,不会覆盖。
    阅读全文 »

mysql优化练习

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 1.6k

mysql优化练习

二叉树做为索引

特点 : root节点 ,左节点小于root,右节点大于root

平衡二叉树,左右子树的高度不能大于1. o(logn)

根据二叉树的特点,如果删除一边节点,并在另外一边添加节点,有可能变成链表结构,复杂度变成o(n)

阅读全文 »

架构理念

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 7.1k

架构学习

系统分解多个系统业务模块好处?(微服务)

  • 简单的系统更容易做到高性能,因为在单体应用中,提高了A业务效率有可能会降低其他的业务效率。
  • 分解之后更容易看到系统的瓶颈所在,可以对单个业务进行扩展,有针对性的优化比如代码或者增加服务解决,其他服务可以保持不变。
  • 分解的业务模块越多,网络的开销也就越大,调用的业务链路也长,排查问题越不方便。
  • 阅读全文 »

java 多线程梳理

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 837

java 多线程梳理

start和run方法区别,start 方法开启一个新的线程区执行,run是当前线程发起。可以看jvm.cpp有一个jvm_startThread 的方法。

runnable 接口和thread 关系,runnable就是一个有run方法的接口而已。

线程的6个状态,new ,runnable,waiting ,timed-wating ,blocked,terminated

sleep只会让出cpu,wait会让出cpu和锁。 sleep只能和synchronized 结合使用。

wait 和while经常一起使用为什么?不是wait 和if

构造一个固定大小的同步容器怎么实现?

阅读全文 »

java 内存模型如何解决可见性和有序性问题

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 671

java 内存模型如何解决可见性和有序性问题

看标题联想

  1. happen before 原则
  2. 之后就是并发编程实战中的图形 cmp等命令
  3. 内存模型 又想到什么?
  4. 导致可见性就是因为cup的缓存,有序性就用volatile关键字呗
    按需禁用缓存以及编译优化
    java 内存模型很复杂,synchronized ,volatile ,final 还有happen-before 6个原则
    volatile 在1.5版本才解决的可见性问题,因为加入了happen-before原则。
    前一个操作的结果对后续操作是可见的,这个是happen-before的原则。
阅读全文 »

算法复习

发表于 2019-03-31 | 分类于 编程 | | 阅读次数:
| 字数统计: 99

算法复习

堆排序, 把数组理解为完全二叉树形式。
二叉树,满二叉树,完全二叉树 理解
完全二叉树,左叶子节点 是 i乘以2+1 右节点是 i乘以2 +2,父节点是 i-1除以2
堆就是完全二叉树,
大根堆
任何这棵树最大值都在树的顶部所形成的结构。
小根堆

1…345…7
lancecong

lancecong

68 日志
9 分类
32 标签
点下试试
  • 😆 网易云音乐 😆
  • Coldplay Official Website
  • 获取 Elon Musk 的新闻
  • 尼古拉·特斯拉:发明了现代世界的人
© 2017 — 2020 lancecong
微信扫一扫,call me !
0%