2019-11-22 11:12
六、反射:运行时的类信息 我们已经知道了,在编译时,编译器必须知道所有要通过RTTI来处理的类。而反射提供了一种机制——用来检查可用的方法,并返回方法名。区别就在于RTTI是处理已知类的,而反射用于处理未知类。Class类与java.lang.reflect类库一起对反射概念进行支持,该类库包含Field、Method以及Constructor(每个类都实现了Member接口)。这些类型是由JVM运行时创建的,用来表示未知类种对应的成员。使用Constructor(构造函数)创建新的对象,用get(),set()方法读取和修改与Field对象(字段)关联的字段,用invoke()方法调用与Method对象(方法)关联的方法。这样,匿名对象的类信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。...
2019-11-22 11:51
最近我在博客园里,看到不少在校的同学在学java,而且,在我最近举办的一次直播活动中,也有不少在校生同学来提问,java该怎么学。
对于那些已经工作的同学,哪怕才工作不久,毕竟也能从项目实践里总结和探索java的学习途径和相关方法。但在校生同学由于没机会接触实际项目,在学习内容、进阶途径和学成标准这些方面都是两眼一抹黑,而大学里的内容可能偏重于理论,讲述的技术往往也和软件公司里常用的技术不匹配。
这就导致了很多上心的在校生,虽然很努力,但到毕业时,才发现自己起早贪黑学成的技能并不能帮他们找到工作。在本文里,就将结合我面试实习生和毕业生的标准,专门给在校生这个群体一些学习Java方面的建议。
...
2019-11-22 11:25
一年又要到年底了,vue3.0都已经出来了,我们也不能一直还停留在过去的js中,是时候学习并且在项目中使用一下Ts了。 如果说jsx是基于js的话,那么tsx就是基于typescript的...
2019-11-22 11:47
在前面随笔《在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动》中介绍了在代码生成工具中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,如果我们在框架应用中需要使用这个如何处理了?由于我们开发框架底层主要使用微软企业库(目前用的版本是4.1),如果是使用它官方的Oracle扩展,那么就是使用EntLibContrib.Data.OdpNet(这个企业库扩展类库使用了Oracle.DataAccess.dll),不过这种方式还是受限于32位和64位的问题;假如我们使用ODP.NET(Oracle.ManagedDataAccess.dll)方式,可以使用自己扩展企业库支持即可,类似于我们支持国产数据库--达梦数据库一样的原理,使用Oracle.ManagedDataAccess类库可以避免32位和64位冲突问题,实现统一兼容。
...
2019-11-22 11:00
今天下午在一个组的项目回顾会议上,这个同事讲了自己用DDD思想对三个模块的重构。把之前在Service层的一些业务逻辑下沉到了领域层里,由之而引起的讨论。部门经理:“其实你的业务逻辑总体并没有少,只是把边界重新划分了一下。”...
2019-11-22 11:14
系化包含两层含义:
回到顶部
比如分布式系统中常用的RPC技术,其背后就涉及到网络IO(Netty)、网络协议、服务发现(Zookeeper配置中心)、RPC服务治理(限流、熔断、降级)、负载均衡等。
回到顶部
在分布式系统领域中,有很多相似的概念,但又分布在不同的产品或层级中。比如负载均衡这个词,DNS、LVS、Ngnix、F5等产品都能实现,而且在大型分布式系统中他们会同时存在,那么就要搞清楚他们各自的位于什么层级,解决了什么问题。
再比如缓存这项技术,有分布式缓存、本地缓存、数据库缓存,在往下还有硬件层级的缓存。同样都是缓存,他们之间的区别又是什么?
...
2019-11-22 10:21
相关内容
开机过程
开机过程指的是从按下电源键开始,到进入系统登录画面前所经历的过程。
MBR与磁盘分区
在目前x86的系统架构中,系统硬盘位于第0号磁道:0到511KB的区块为MBR(硬盘中的每一个磁道容量为512KB),开机管理程序使用这块区域来储存第一阶段开机引导程序(stage1)。接着位于1到62号磁道作为第1.5阶段的开机引导程序(stage1.5),从第63号磁道开始才是操作系统的分区。
主引导记录(MBR,Master Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生。
...
2019-11-22 10:36
嘉宾:袁彩霞 博士 北京邮电大学 副教授整理:Hoh Xil...
2019-11-22 10:04
Java代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的
类型:可以理解为一个class
加载:查找并加载类的二进制数据,最常见的情况是将已经编译完成的类的class文件从磁盘加载到内存中
连接:确定类型与类型之间的关系,对于字节码的相关处理
验证:确保被加载的类的正确性
准备:为类的静态变量分配内存,并将其初始化为默认值。但是在到达初始化之前,类变量都没有初始化为真正的初始值
解析:在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用转换为直接引用的过程
初始化:为类的静态变量赋予正确的初始值
...
2019-11-22 10:52
1. defer的使用
defer 延迟调用。我们先来看一下,有defer关键字的代码执行顺序:
复制代码
1 func main() {
2 defer func() {
3 fmt.Println("1号输出")
4 }()
5 defer func() {
6 fmt.Println("2号输出")
7 }()
8 }
复制代码
输出结果:
1 2号出来
2 1号出来
结论:多个defer的执行顺序是倒序执行(同入栈先进后出)。
...
2019-11-22 10:28
一、nodejs模块语法与开闭原则
关于nodejs模块我在之前的两篇博客中都有涉及,但都没有对nodejs模块的底层做做任何探讨,但是为了使相关内容更方便查看比对理解,这里还是先引入一下之前两篇博客的连接:
js模块化入门与commonjs解析与应用
ES6入门十二:Module(模块化)
1.1 exports、module.exports、require()实现模块导出导入:
复制代码
1 //示例一:导出原始值数据
2 //a.js--用于导出数据
3 let a = 123;
...
2019-11-22 10:03
原文:The top data structures you should know for your next coding interview...
2019-11-22 10:06
MyISAM引擎的B+Tree的索引#
myisam
通过上图可以直接的看出, 在MyISAM对B+树的运用中明显的特点如下:
所有的非叶子节点中存储的全部是索引信息
在叶子节点中存储的 value值其实是 数据库中某行数据的index
MyISAM引擎 索引文件的查看:
在 /var/lib/mysql目录中
.myd 即 my data , 数据库中表的数据文件
.myi 即 my index , 数据库中 索引文件
.log 即 mysql的日志文件
InnoDB引擎 索引文件的查看:
...