一些看起来容易却忽视原理的知识

1.hashcode

hashcode是通过hash函数放回的一个int值,在对象的equals是,必须重写hashcode。因为对象的hashcode就类似一个MD5的加密值,只要这个值相等,对象肯定相等,而不用通过equal比较(equals比较就是一个属性一个属性的比对,效率太低,而hashcode就是计算的一个散列,一步就可以比较)。但是前提是生成hashcode的hash函数要没有冲突,所以,一般情况下,重新equals,为了更好生成对应唯一的hashcode,重写hashcode方法。

2.char基于uncode字符编码的,占2个字节,而一个汉字就可以用一个char表示。其次,string是不可变得,string对应一个常量池。

3.阻塞操作

  socket.accept,inputstrum.read,futre.get等,因为这些方法都要求有放回值,如果没有放回,程序就阻塞,不能继续执行。

  而NIO处理的机制就是通过轮询机制,以及事件监听机制,达到channel的复用,也就是说selector可以监听多个channel,那个里面有数据,那个就执行。

  NIO优势的基础是buffer,编程接口bufferFull()轮询监听buffer是否已满,此方法不阻塞,而reader.readLine()是阻塞的,其次NIO单线程处理多个connection,而IO是多个

  线程处理多个connection,因为线程多,耗费的资源就多。

  

NIO可让您只使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。
如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。同样,如果你需要维持许多打开的连接到其他计算机上,如P2P网络中,使用一个单独的线程来管理你所有出站连接,可能是一个优势。一个线程多个连接的设计方案如

如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合。下图说明了一个典型的IO服务器设计:

参看:http://www.jb51.net/article/50621.htm

3.缓存机制的原理是什么?

在开发中,我们基本都会使用缓存,本质就是将处理对象缓存在内存中,减少服务器的压力(比如2次一样的sql查询等),但是缓存管理的难点在于缓存的大小是固定的,那么

如何换入换出,基本的算法就是FIFO等。常见的缓存有分布式缓存以及单机缓存。而各个缓存的实现高效在于缓存空间的管理以及内存分配。

所以,涉及到内存或者磁盘的分配以及管理,基本都大同小易,比如oracle数据的磁盘与内存管理,但是基于的原理都是把磁盘内存空间对应成数据结构进行管理,此处了解不是很深刻,暂时记录一下。

4.SQL的执行计划

对于sql写完之后,基本就是优化,而优化的前提就是了解执行计划,执行计划就是sql转换成函数调用,其实RDBMS的SQL的执行计划就类似Hive的转换成MapReduce一样,下面说一下表链接的执行计划

NESTED LOOPS   对应exists

HASH JOIN         对应join/in

MERGE JOIN

时间: 2024-11-06 12:12:35

一些看起来容易却忽视原理的知识的相关文章

数据库原理相关知识

数据库原理相关知识 made by @杨领well([email protected]) 一.基础知识 1. 简述数据库系统的特点. 数据结构化 : 这是数据库系统与文件系统的本质区别. 数据的共享性高.冗余度低且易扩充 : 数据共享可以大大减少数据冗余, 节约存储空间.数据共享还能够避免数据之间的不相容性和不一致性. 数据的独立性高 : 数据独立性包括物理独立性和逻辑独立性. 数据由数据库管理系统统一管理和控制 : 数据的安全性保护(保护数据以防止不合法使用造成的数据泄密和破坏).数据的完整性

十分钟带你看懂比特币的运行原理

有一种货币目前价值成百上千美元 ,但不是由金子.铂金或任何贵重金属制造的,这就是比特币,那么比特币的原理是什么呢? 针对不方便打开视频的小伙伴,CDA字幕组也贴心的整理了文字版本,如下: 假设有一种货币目前价值成百上千美元 ,但不是由金子.铂金或任何贵重金属制造的,实际上这不是你能放在手中或存钱罐中的钱币. 这是数字货币,意味着它只以电子的形式存在. 我说的就是比特币,比特币的原理与大多数货币很不一样. 它不依附于国家或政府,因此它没有中央发行机构或监管机构.这意味着没有组织机构决定:什么时候要

从dubbo处理视角看Netty处理网络传输原理 -- 粘包与拆包

如今,我们想要开发一个网络应用,那是相当地方便.不过就是引入一个框架,然后设置些参数,然后写写业务代码就搞定了. 写业务代码自然很重要,但是你知道: 你的数据是怎么来的吗?通过网络传输过来的呗. 你知道网络是通过什么方式传输过来的吗?光纤呗,TCP/IP协议呗. 看起来都难不住我们的同学们,但是,以上问题都不是我们关注的重点,我们今天要关注的是,TCP.IP协议是如何把数据传输到我们的应用服务器,而且准确地交到对应的业务代码手上的? 我们也不关注TCP协议的三次握手四次挥手,我们只需要确认一点,

CVPR2019论文看点:自学习Anchor原理

原论文链接:https://arxiv.org/pdf/1901.03278.pdf CVPR2019的一篇对anchor进行优化的论文,主要将原来需要预先定义的anchor改成直接end2end学习anchor位置和size.首先anchor的定义通常为(x, y, w, h) (x, y为中心点),formulate一下: 本文所提的guided anchoring利用两个branch分别预测anchor的位置和w.h: guided anchoring的主要内容有如下几点: Anchor

编译原理文法知识通俗趣味理解

在正式介绍文法的知识之前,先来看一下西天取经团队成员的文法定义,以便对文法有个感性认识. 1.      <西天取经团队成员>::=<师父>|<徒弟成员> 2.      <师父>::= “唐僧” 3.      <徒弟成员>::=”孙悟空”|”猪八戒”|”沙和尚”|”白龙马” 不用我多解释,大家也知道上面文法的含义吧.西天取经团队成员是师父或徒弟,师父是“唐僧”,徒弟成员是”孙悟空”.”猪八戒”.沙和尚”或”白龙马”. 问大家一个问题,西天取经

001-权限原理基础知识

一.什么是权限管理 只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源. 权限管理包括用户认证和用户授权两部分. 二.用户认证 1.概念 用户认证,用户去访问系统,系统要验证用户身份的合法性.最常用的用户身份验证的方法:1.用户名密码方式.2.指纹打卡机.3.基于证书验证方法..系统验证用户身份合法,用户方可访问系统的资源. 2.用户认证流程 3.关键对象 subject:主体,理解为用户,可能是程序,都

jQuery选择器容易忽视的小知识大问题

1 关于检查某个元素在网页上的存在 很多人会惯性的写成 1 if($("#tt")){ 2 //do something 3 } 其实应该根据获取到元素的长度来判断 if($("#tt").length>0){ //do something博客园如何修改我的标签 } 当然啦还可以转化成DOM对象来判断 if($("tt")[0]){ //do somethign } 2 关于子元素过滤选择器:nth-child(index/even/odd

C++容易被忽视的基础知识

作为一个java开发者,由于实际需要最近开始接触C++,这是最近接触C++碰到的一些难点和易错点,整理如下,给自己和其他C++的初学者···· 通过本文,你可以学到: 1)浮点值的上溢和下溢 2)浮点数舍入误差 3)使用%d显示float值不会把float转化为近似的int值,而是显示垃圾值 4)scanf的读取习惯 5)strlen()函数和sizeof()区别 6)负数转化为unsigned和大于255的值转化为字符相当于取模 7)prinf读取stack里的数字是按%读取的 1.浮点值的上

互联网服务端技术——如何学(中)

boys & girls,我们的中场休息结束了哈,赶紧搬板凳继续听老王扯技术的淡~ (悄悄的广播一下:如果没有看过上一篇的同学,请关注老王的微信simplemain,或者拉到本文末尾扫描/识别二维码) 上一篇,我们谈到了互联网服务端技术的整体蓝图.同时顺着这个蓝图中,介绍了语言.算法和数据结构.框架具体有哪些要求以及怎么样去学习他们.接下来,老王准备介绍另外几个比较基础,又在工程中大量使用的技术.具体是什么呢?我们接着往下看.首先我们还是把那幅蓝图摆出来(开始装B啦~). 聪明的同学一定已经发现