- 博客(35)
- 收藏
- 关注
翻译 什么是Java中的Object?------对Object的理解和应用
一、Object对象简介Java是一门面向对象的语言。无论在Java 中出现什么,都可以认为它是对象(除了八大基本数据类型)而Object就是这些对象的最高级别,不论是Java对象还是用户自定义对象都隐式或者显式的继承了Object对象,当然,它们都拥有Object默认的方法。二、Object方法clone()finalize()equals(Object obj)hashcode(...
2019-07-16 23:22:19 4666
原创 阿里面试:合并K个有序链表
合并K个有序链表首先看一下合并两个有序链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { publ...
2020-02-07 18:32:21 267
原创 Java中的volatile和synchronized
volatile在jdk1.2之前,java的内存模型实现总是从主存(即共享内存)中读取变量,而在当今的Java版本中,可以将变量保存到本地内存(比如说寄存器)中,而不是从主存中读取,所以就等于将变量做了份拷贝,A线程改了值B线程仍用原值就会造成数据的不一致。因此就有了volatile,在变量前声明,告诉jvm这个变量是不稳定的,每次读取都要从主存中读取。volatile使得每个线程每次都是...
2019-11-21 10:58:43 275
原创 Redis总结
为什么要用redis/为什么要用缓存?主要从"高性能"和"高并发"这两点来看待问题。高性能:假设用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变后,同步改变缓存中相应的数据即可。高并发:直接操作缓存能够承受的请求...
2019-09-05 16:22:29 165
原创 Redis底层剖析
Redis提供了五种数据结构:字符串、链表、集合、哈希表、有序集合这五种结构。说一下简单实现1. 字符串类型 string存储:set 获取:get 删除:del2. 哈希类型 hash:map格式存储:hset key field value//获取指定的field对应的值获取:hget key field hgetall key删除:hdel key field3. ...
2019-09-04 23:31:34 154
原创 高并发缓存处理
缓存穿透:1 出现原因:大量的请求在缓存中没有查询到指定的数据,因此需要从数据库中进行查询,造成缓存穿透。2 后果:大量的请求短时间内涌入到database中进行查询会增加database的压力,最终导致database无法承载客户端请求的压力,出现宕机卡死等现象3 解决方案:a.空值缓存:在某些特定的业务场景中,对于数据的查询可能会是空的,没有实际的存在,并且这类数据信息在短时间进行多...
2019-09-04 00:36:23 183
原创 happens-before
如何让多线程之间,对象的状态对于各线程的“可视性”是顺序一致的:ConcurrentHashMap 使用了 happens-before 规则来实现。 happens-before规则(摘取自 JAVA 并发编程):程序次序法则:线程中的每个动作A都 happens-before 于该线程中的每一个动作B,其中,在程序中,所有的动作B都能出现在A之后。监视器锁法则:对一个监视器锁的解锁 ha...
2019-09-03 08:27:35 97
原创 Java中的PO、VO、DAO、BO、DTO、POJO的解释说明
一、PO :(persistant object ),持久对象可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。二、VO :(value object) ,值对象通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于...
2019-09-01 01:17:51 1179
原创 一步一步手撕ArrayList
注:本文所有方法和示例基于jdk1.8简介ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。线程安全性对ArrayList的操作一般分为两个步骤,改变位置(size)和操作元素(e)。所以这个过程在多线程的环境下是不能保证具有原子性的,因此ArrayLi...
2019-08-28 18:06:26 143
原创 session和cookie
1. 问题提出:HTTP是一种无状态的协议,为了分辨链接是谁发起的,因此提出了cookie和session两个机制2. 应用场景:cookie:保存用户登录信息,创建购物车,跟踪用户行为session的一个场景是购物车,添加了商品之后客户端可以知道添加了哪些商品,而服务器辨别存储信息就用到了session3. cookie:a.是一种数据结构(key->value)b.是服务器...
2019-08-13 10:02:19 79
原创 getAttribute和getParameter的区别
获取的值不同getAttribute表示从request范围取得设置的属性,必须要通过setAttribute设置属性,才能通过getAttribute取得。设置和取得的值都是Object类型。getParameter表示接收页面提交的 参数,主要有表单提交的参数、URL重写传递的参数等,所以不需要通过setParameter来设置参数,而且参数的返回类型是String类型。数据传递的路径不...
2019-08-08 20:17:47 330
原创 HTTP状态码100、200、300等含义
1xx (临时响应)表示临时响应并需要请求者继续执行操作的状态代码。100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。102 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。2xx (成功)表示成功处理了请求的状态代码。200 (成功)...
2019-08-08 08:24:25 1894
转载 LinkedHashSet源码详解
问题(1)LinkedHashSet的底层使用什么存储元素?(2)LinkedHashSet与HashSet有什么不同?(3)LinkedHashSet是有序的吗?(4)LinkedHashSet支持按元素访问顺序排序吗?简介上一节我们说HashSet中的元素是无序的,那么有没有什么办法保证Set中的元素是有序的呢?答案是当然可以。我们今天的主角LinkedHashSet就有这个功...
2019-07-29 10:12:02 168
原创 mac 【maven配置及idea创建maven项目】 -----最详解
windows和mac差不了多少,只是配置环境变量时不同。下面进入正题首先下载maven:https://maven.apache.org/或者在我的百度网盘下载:链接:https://pan.baidu.com/s/1pbNBt8fLZYWo7ouMRS_VCw 密码:oyzlmac配置环境变量: 1.打开终端 2.输入 vim ~/.bash_profile...
2019-07-24 22:13:49 4411
转载 面向对象和面向过程的区别
**面向对象和面向过程的区别****第一 :从性能方面来说,面向过程比面向对象性能能好一点,因为面向对象会加载类的实例也就是说实例化各种对象,这是比较消耗资源的。比如说嵌入式开发、单片机、Linux系统等都是基于面向过程的。第二 :面向对象比面向过程易维护、易服用、易扩展,因为面向对象的特征就是封装、继承、多态,可以设计出低耦合的程序,使程序更容易维护、使用。第三 :面向过程把算法放在...
2019-07-17 22:40:48 564
原创 NowCoder:链表中倒数第k个结点
class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } int i = 0; ListNode p,q; q = p =head;...
2019-07-14 22:27:57 94
原创 NowCoder:矩形覆盖
问题描述:我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?暴力破解法: if(target<=0) return 0; if(target<=2) return target; if(target>=3) return RectCover(target-1)+Rec...
2019-07-12 00:15:06 105
转载 LeetCode:两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。来源:力扣(LeetCode)示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:...
2019-07-02 00:16:03 92
原创 Leetcode:汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0)上面的加粗数字指出了对应二进制位不同的位置。执行用时 : 1 ms, 在Hamming Distance的Jav...
2019-05-13 17:21:24 133
原创 Leetcode:爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。3. 1 阶 + 1 阶 + 1 阶4. 1 阶 + 2 阶5. ...
2019-05-01 19:08:53 124
原创 LeetCode:二进制求和
二进制求和难度:简单给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"说转换成整数后加再转换成二进制的可以去XXOO了,你开心就好执行用时 : 4 ms, 在Add Bina...
2019-04-24 18:22:52 170
原创 LeetCode:合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,...
2019-04-23 17:24:22 78
原创 Git简单命令
1.登录git config --global user.name “账户名”git config --global user.email “邮箱”2.创建版本库版本库又名仓库,英文名repository,可以简单地理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪。git init //将当前目录变成可以Git可以管理的仓库3.git ...
2019-04-20 21:42:42 156
原创 LeetCode:有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: falsepublic static boolean isAnagram(String s, String t) { //定义两个数组,分别存...
2019-04-20 01:16:02 99
原创 存在重复元素
给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: truepublic static boolean contai...
2019-04-17 22:46:38 66
原创 finally、final、finaize三兄弟
它们看似相同,实则大有不同final:final可以修饰类、方法、变量,分别有不同的意义,修饰类时该类不能被继承,修饰方法时,该方法在被继承后不能被重写(override),修饰变量时该变量值不可被改变finally:finally是处理异常时经常使用的关键字,形如try-catch-finally或try-finally,finally里的代码块总会执行finaize:finaize是ja...
2019-04-05 18:20:57 417
原创 Abstract与哪些关键字不能共存?为什么?
abstract::表明希望被重写,即该类中的方法被继承后需要重写。1.private被private修饰的方法,子类不能继承到,故不能重写,也就不能共存2.finalfinal修饰的类不能被继承,方法不能被重写,变量不能更改值,故不能共存3.staticstatic能被实例化直接调用,即不需要依赖对象就可进行访问,而abstract不能被实例化,故不能共存4.……...
2019-04-05 18:10:09 717
原创 二叉树创建
结点定义: typedef struct node{ int data; struct node * left; struct node * right; }BTNode;创建一颗二叉树:BTNode * createBinaryTree(int a[],int n)//创建二叉树 { BTNode * p,* c,* pa,* root; r...
2019-04-02 16:41:03 120
原创 扫描电脑上所有图片,并存于指定文件中
import java.io.File;import java.io.FileFilter;import java.io.FilenameFilter;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;/** 扫描你电脑上所有图片文件,将其存入D:\all.data文件中格式如:...
2019-03-20 15:35:43 560
原创 八皇后算法(回溯)
算法描述: 八皇后是一道很具典型性的题目。它的基本要求是这样的:在一个8*8的矩阵上面放置8个物体,一个矩阵点只允许放置一个物体,任意两个点不能在一行上,也不能在一列上,不能在一条左斜线上, 当然也不能在一条右斜线上。八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能...
2019-03-17 16:06:21 1205
转载 简单工厂、抽象工厂、工厂的区别
解释一工厂的核心是一个抽象工厂类,而简单工厂模式把核心放到了一个具体类上.简单工厂是工厂模式的特例。工厂模式和抽象工厂模式的最主要的区别在于对工厂的抽象程度上。抽象工厂模式中一般是抽象出工厂接口,表示他就是一个工厂,而不管它是制造什么产品的工厂,他的抽象程度较高。而工厂模式的抽象工厂一般是针对于产品进行抽象,表示它是一个生产某类产品的工厂。简单工厂是不支持继承的,如果需要建立的对象过多...
2019-03-13 17:12:37 553 1
原创 链表的定义及其简单解释
链表1.存储方式:(1)顺序存储:以连续的存储单元进行存储(2)链式存储:存储单元不联系2.链式存储:(1)不可计算存储单元的地址,只能以存储的形式来完成(2)结构:①结点的结构:数据域(data) 指针域(next)②数据域:存储本结点的数据③指针域:存放下一个结点的地址④定义:struct node{ int data; struct node * next;...
2019-03-11 17:17:29 11146 2
原创 栈(Stack)的解释及简单应用
栈的定义:栈是限定在表尾进行插入和删除操作的线性表,它是一种数据结构,其数据元素之间的关系呈线性关系。2.结构:3.栈的操作:(1)入栈:向栈口存储数据元素(push)(2)出栈:从栈中去数据元素(pop)(3)栈顶指针(top):用来指向最后一个入栈元素(4)入栈操作: ①栈满不可入栈:top=SIZE-1(上溢) ②入栈(未满):top=top+1,S[top]...
2019-03-10 15:58:45 433
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人