JVM 自动内存管理
Java 内存区域对于从事 C、C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”,又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”,又担负着每一个对象生命从开始到终结的维护责任。
对于 Java 程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个 new 操作去写配对的 delete/free 代码,不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是因为 Java 程序员把控制内存的权力交给了 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那排查错误、修正问题将会成为一项异常艰难的工作。
运行时数据区域JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。
程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当 前线程所执行的字节码的行号 ...
机器学习入门
模型评估与选择误差与过拟合错误率
通常我们把分类错误的样本数占样本总数的比例称为错误率。假设 m 个分类样本中有a个错误样本,则错误率为
$$E=a/m$$
相应的,精度则是 $1-a/m $。
学习器实际预测输出与样本的真实输出之间的差异称为误差。在训练集上的误差称为经验误差或者训练误差,在新样本上的误差称为泛化误差。
过拟合与欠拟合
我们实际希望的,是在新样本上能表现得很好的学习器.为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别,然而,当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降.这种现象在机器学习中称为过拟合(overftting)。与过拟合相对的是欠拟合(underftting),这是指对训练样本的一般性质尚未学好。
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。欠拟合比较容易克服, ...
设计模式
设计模式讲的是如何写出可扩展、可读、可维护的⾼质量代码,所以,它们跟平时的编码会有直接的关系,也会直 接影响到你的开发能⼒。
什么是面向对象编程?⾯向对象编程的英⽂缩写是 OOP,全称是 Object Oriented Programming。对应地,⾯向对象编程语⾔的英⽂缩 写是 OOPL,全称是 Object Oriented Programming Language。 ⾯向对象编程中有两个⾮常重要、⾮常基础的概念,那就是类(class)和对象(object)。这两个概念最早出现在 1960 年,在 Simula 这种编程语⾔中第⼀次使⽤。⽽⾯向对象编程这个概念第⼀次被使⽤是在 Smalltalk 这种编程 语⾔中。Smalltalk 被认为是第⼀个真正意义上的⾯向对象编程语⾔。 如果⾮得给出⼀个定义的话,我觉得可以⽤下⾯两句话来概括 ⾯向对象编程是⼀种编程范式或编程⻛格。
它以类或对象作为组织代码的基本单元,并将封装、抽象、继 承、多态四个特性,作为代码设计和实现的基⽯ 。
⾯向对象编程语⾔是⽀持类或对象的语法机制,并有现成的语法机制,能⽅便地实现⾯向对象编程四⼤特性 (封装 ...
zookeeper
什么是 zookeeperZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
很多分布式协调服务都可以用 ZooKeeper 来做,其中典型应用场景如下:
配置管理(configuration management):如果我们做普通的 Java 应用,一般配置项就是一个本地的配置文件,如果是微服务系统,各个独立服务都要使用集中化的配置管理,这个时候就需要 ZooKeeper。
DNS 服务。
组成员管理(group membership):比如上面讲到的 HBase 其实就是用来做集群的组成员管理。
各种分布式锁。
ZooKeeper 适用于存储和协同相关的关键数据,不适合用于大数据量存储。如果要存 KV 或者大量的业务数据,还是要用数据库或者其他 NoSql 来做。主要有以下两个原因:
设计方面:ZooKeeper 需要把所有的数据(它的 data tree)加载到内存中。这就决定了 ZooKeeper 存储的数据 ...
手撸RPC框架
第一章 RPC 整体架构RPC 框架介绍RPC 全称 Remote Procedure Call,意为远程过程调用,能让开发人员像调用本地服务一样调用远程服务,是较为常用的中间件框架。一个完整的 RPC 一般可以分为服务消费者、服务提供者、注册中心、监控中心四个部分。其中服务提供者、服务消费者和注册中心。
RPC 工作流程如上图所示。
在一次远程调用过程中,服务提供者启动后,会将其提供的服务列表信息注册到注册中心。当服务消费者启动后,会向注册中心订阅服务列表。当注册中心的服务列表发生变化时,注册中心也会向服务消费者主动推送服务列表。服务消费者会从订阅的服务列表中按照一定的规则选择一个地址,将服务提供者需要的数据通过网络发送出去。服务消费者会通过动态代理的方式远程调用服务提供者提供的服务,服务消费者调用需要的接口名称、方法名称、方法参数类型列表、方法参数列表等信息序列化成二进制字节流传输给服务提供者。服务提供者接收到数据后,将数据反序列化,根据得到的数据调用对应的服务再将调用结果序列化返回给消费者。消费者反序列化数据,得到调用结果。
从上述工作流程可以知道,一个 RPC 框架的核心就是 ...
计算机网络
计算机网络体系结构计算机网络的定义
一些相互连接的、自治的计算机的集合,互连是指计算机之间可以通过有线或者无线的方式进行数据通信,自治是指独立的计算机,它有自己的软硬件,集合是指至少两台计算机。计算机网络由若干节点和连接这些节点的链路组成,节点可以是计算机,集线器,路由器,交换机等。
计算机网络的功能
数据通信。数据通信是计算机网络最基本和最重要的功能,用来实现联网计算机之间的各种信息传输。
资源共享。资源共享可以是软件共享、数据共享、硬件共享,使计算机网络中的资源互通有无、分工协作,提高资源利用率。
分布式处理。当计算机网络中某个计算机负载过重时,可将其处理的某个复杂任务分配给网络中的其他计算机系统,利用空闲计算机资源提高整个系统的利用率。
提高可靠性。也是在分布式场景,计算机网络中的各台计算机可以互为代替机器。
负载均衡。将任务均匀的分配给计算机网络中的计算机。
计算机网络中的交换技术电路交换最典型的电路交换往就是传统的电话网,电路交换主要分为三步:建立连接、数据传输和释放连接。在进行数据传输之前两个节点之间需要先建立一条专用的物理路径,在传输过程中始终被用户独占,直到通信结束后 ...
leetcode 1-10
1.两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
123456789101112131415161718class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; unordered_map<int,int> m; for (int i = 0; i < nums.size(); i ++ ) { int another = target - nums[i]; if (m.count(another)) { ...
异常和中断
异常和中断的基本概念由 CPU 内部产生的意外事件被称为异常,有些地方也叫做内中断。由来自 CPU 外部的设备向 CPU 发出的中断请求被称为中断,有些地方会称为外中断。异常时 CPU 执行一条指令时,由 CPU 内部检测到的、与正在执行的指令相关的同步事件。中断师一种典型的由外部设备触发的、与当前正在执行的命令无关的异步事件。异常和中断处理过程的描述基本一致:若 CPU 在执行用户程序的第 i 条指令时检测到一个异常事件/中断请求信号,则 CPU 打断当前程序,然后转去执行相应的异常/中断处理程序。若异常/中断处理程序可以解决相应问题,则在异常/中断处理程序的最后,CPU 通过执行异常/中断返回命令,回到被打断的第 i 条或者第 i+1 条指令继续执行。若若异常/中断处理程序不能解决相应问题,则终止程序。通常对于异常/中断的具体处理由操作系统完成。
异常的分类异常分为硬故障异常和程序性异常。硬故障是由硬连线出现的异常引起的,比如存储器校验错、总线错误等。程序性异常也称为软件中断,是指在 CPU 内部因执行指令而引起 ...
中央处理器CPU
CPU 的功能和基本结构中央处理器(CPU)由运算器和控制器组成,控制器负责协调并控制计算机各部件执行程序的指令序列,运算器负责对数据的加工处理。CPU 的具体功能包括:
指令控制。完成取指令、分析指令和执行指令。
操作控制。产生完成一条指令所需要的操作信号,把各种操作信号送到相应部件,从而控制这些部件按指令的要求执行。
时间控制。严格控制各种操作信号的出现时间、持续时间和出现顺序。
数据加工。对数据进行算术运算和逻辑运算。
中断处理。对运行过程中出现的异常情况和中断请求进行处理。
运算器主要由算数逻辑单元(ALU)、暂存寄存器、累加寄存器(ACC)、通用寄存器组(GPRs)、程序状态字寄存器(PSW)、移位寄存器(SR)、计数器(CT)等组成。功能是根据控制器送来的命令,对数据完成算数运算、逻辑运算和条件判断。
控制器主要有程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)以及一些时序电路和信号发生器。主要功能是根据指令的操作码和条件信号,生成当前计算机各部件的控制信号,让整个硬件系统协调运行。
通用寄存器组:用于存 ...
HDU-7276 City Upgrading
City UpgradingThe city where crazyzhk resides is structured as a tree. On a certain day, the city’s network needs to be upgraded. To achieve this goal, routers need to be deployed. Each router covers the node it is placed on and its neighboring nodes. There is a cost $ a_i $ associated with placing a router at each node. The question is: How can the routers be deployed at minimum cost to ensure that every node is covered?
题目大意crazyzhk 所居住的城市被构建成一棵树。在某一天,城市的网络需要升级。为了实现这个目标,需要部署路由器。每个路由器覆盖其所放置的节点及 ...