Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器 软件资源

软件开发小程序制作系统集成与运维空间租用硬件开发视频监控技术咨询与支持——联系电话:0311-88999002/88999003

首页 / 操作系统 / Linux

10行Java代码实现最近被使用(LRU)缓存

10行Java代码实现最近被使用(LRU)缓存

在最近的面试中,我曾被多次问到,怎么实现一个最近最少使用(LRU)的缓存。缓存可以通过哈希表来实现,然而为这个缓存增加大小限制会变成另一个有意思的问题。现在我们看一下怎么实现。最近最少使用缓存的回收为了实现缓存回收,我们需要很容易做到:查询出最近最晚使用的项给最近使用的项做一个标记链表可以实现这两个操作。检测最近最少使用的项只需要返回链表的尾部。标记一项为最近使用的项只需要从当前位置移除,然后将该项放置到头部。比较困难的事情是怎么快速的在链表中找到该项。哈...
[翻译]用 JSON 构建 API 的标准指南

[翻译]用 JSON 构建 API 的标准指南

如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。基于 JSON API 的客户端还能够充分利用缓存,以提升性能,有时甚至可以完全不需要网络请求。下面是一个使用 JSON API 发送响应(response)的示例:{"links": {"posts.author": ...
HTML5 input事件检测输入框变化

HTML5 input事件检测输入框变化

之前一直用change事件来监听输入框内容是否发生变化,只有当输入框失去焦点时才会触发,没想到html5还有个input事件,只要输入框内容发生变化就会立即触发,既然有这么好的东西我们干嘛放着不用呢,接下来就来给大家介绍一下:如果我们页面上有这样一个简单到极致的输入框:<input type="text">那么我们现在用jquery给它绑定input事件,如下:$("input:text").bind("input propertychange...
深入理解进程间通信之消息队列

深入理解进程间通信之消息队列

消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。消息队列是随内核持续的。IPC持续概念随进程持续IPC一直存在到打开IPC对象的最后一个进程关闭该对象为止。如管道和有名管道;随内核持续IPC一直持续到内核重新自举或者显示删除该对象为止。如消息队列、信号灯以及共享内存等;随文...
深入理解进程间通信之信号

深入理解进程间通信之信号

信号及信号源信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。信号来源 信号事件的发生有两个来源:...
B树——思路、及C语言代码的实现

B树——思路、及C语言代码的实现

0.序 本人现读本科大二,这学期学习数据结构,老师为我们的期末作业布置一道任选题,而我一直以来都有听说B树是一棵挺神奇的树,所以我选择了它,当然更重要的原因是因为B树的难度最高,我喜欢做有挑战性的工作。同时,我听我基友说他热衷于将自己所学所想分享到博客园上,故才有了这样一篇文章。希望我能够在写博客的同时学习到更多东西,同时也能帮助到其他遇到或者即将遇到雷同问题的初学者们。1.关于B树 B树是一种称之为查找树的树,与之类似的有查找二叉树,平衡二叉树,除此...
Unity3D 的物理渲染和光照模型

Unity3D 的物理渲染和光照模型

为什么地球在两极严寒,而在赤道火热?这个问题,仿佛与着色器毫不相干,但却是理解光照模型怎样工作的基础。正如这个教程前面部分所解释的,表面着色器使用数学模型来预测光照在三角形上怎样反射。总的来说,Unity 引擎支持两种着色技术,一个是哑光着色器,一个是镜面材料着色器。前一种对于不透明表面的支持很完美,而后一种则用来模拟反射对象。这些光照模型背后的数学可能非常复杂,但是如果你想创造属于你自己的光照效果,你就得理解它们是如何工作的。直到 Unity 版本 4....
排序算法之快速排序

排序算法之快速排序

基本思想任取待排元素序列中的某个元素(例如第一个元素)作为基准,按照该元素的排序码大小,将整个元素序列划分为左右两个子序列:左侧子序列中所有元素的排序码都小于基准元素的排序码,右侧子序列中所有元素的排序码都大于或等于基准元素的排序码,基准元素则排在这两个子序列中间(这也是该元素最终安放的位置)。然后分别对这两个子序列重复进行上述方法,直到所有的元素都排在相应的位置上为止。代码private void quickSort(int[] a, int left,...
排序算法之希尔排序

排序算法之希尔排序

基本思想设待排元素序列有n个,首先取一个整数gap(gap< n)作为间隔,将全部元素分为gap个子序列,所有距离为gap的元素放在同一个子序列中,在每一个子序列中分别进行直接插入排序。然后缩小间隔gap,重复上述的子序列划分和排序工作。知道最后gap等于1时,将所有元素放在同一个序列中排序为止。 至于gap的取法有各种方案。最初Shell提出取gap=⌊n/2⌋ ,gap=⌊gap/2⌋ ,直...
排序算法之冒泡排序

排序算法之冒泡排序

基本思想首先第一个元素和第二个元素比较,如果第一个大,则二者交换,否则不交换;然后第二个元素和第三个元素比较,如果第二个大,则二者交换,否则不交换……一直按这种方式进行下去,最终最大的那个元素被交换到了最后,一趟冒泡排序完成。代码public void BubbleSort(int[] a, int n) { int temp; for (int i = 1; i < n; i++) { for (int j =...
排序算法之直接插入排序算法

排序算法之直接插入排序算法

基本思想当插入第i(i≥1)个元素,前面的i-1个元素已经排好序。这时用第i个元素与前i-1个元素进行比较,找到插入位置即将第i个元素插入,原来位置上的元素向后顺移。 代码://待排数据存储在数组a中,以及待排序列的左右边界public void InsertSort(int[] a, int left, int right) { int temp;//临时变量 int i, j;//循环标记 for (i = left + 1; i <...
Java关键字浅析之native

Java关键字浅析之native

native的简单概述使用native关键字说明这个方法是原生函数(Native Method),也就是说,这个方法是用C/C++语言实现的,并且被编译成了DLL,由Java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是Java的底层机制,实际上Java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。什么是Native Method简单地说,一个Native Meth...
Java对象的串行化(Serialization)

Java对象的串行化(Serialization)

串行化的概念对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的串行化(Serialization) 。 串行化的主要任务是写出对象实例变量的数值。如果变量是另一对象的引用,则引用的对象也要串行化。这个过程是递归的,串行化可能要涉及一个复杂树结构的串...
Java关键字浅析之final

Java关键字浅析之final

final限定变量如果在指定变量值之后,就不想再改变变量值,可以在声明变量时加上final限定,如果后续撰写程序时,自己或者别人不经意想改变final变量,就会出现编译错误。如果对象数据成员被声明为final,但没有明确使用=指定变量值,那表示延迟对象成员值的指定,在构造函数执行流程中,一定要有对该数据成员指定值的动作,否则编译错误。final限定类如果class前使用了final关键字定义,那么表示这个类是最后一个了,不会再有子类,也就是不能被继承。如果...
排序算法之二分法(折半)插入排序算法

排序算法之二分法(折半)插入排序算法

基本思想折半插入排序的基本思想与直接插入排序一样,在插入第i(i≥1)个元素时,前面i-1个元素已经排好序。区别在于寻找插入位置的方法不同,折半插入排序是采用折半查找法来寻找插入位置的。 折半查找法的基本思路是:用待插元素的值与当前查找序列的中间元素的值进行比较,以当前查找序列的中间元素为分界,确定待插元素是在当前查找序列的左边还是右边,如果是在其左边,则以该左边序列为当前查找序列,右边也类似。按照上述方法,递归地处理新序列,直到当前查找序列的长度小...
Java注解(Annotation)详解

Java注解(Annotation)详解

基本概念什么是注解(Annotation) Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。从某些方面来看,Annotation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数以及本地变量的声明语句中。这些信息被存储在Annotation的”name=value”结构对中。更通俗的意思是为程序的元素(类、方法、成员变量等)加上更直观更明了的...
<< 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 >>