![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
在路上&
这个作者很懒,什么都没留下…
展开
-
Java中的volatile和synchronized
volatile 在jdk1.2之前,java的内存模型实现总是从主存(即共享内存)中读取变量,而在当今的Java版本中,可以将变量保存到本地内存(比如说寄存器)中,而不是从主存中读取,所以就等于将变量做了份拷贝,A线程改了值B线程仍用原值就会造成数据的不一致。 因此就有了volatile,在变量前声明,告诉jvm这个变量是不稳定的,每次读取都要从主存中读取。 volatile使得每个线程每次都是...原创 2019-11-21 10:58:43 · 240 阅读 · 0 评论 -
mac 【maven配置及idea创建maven项目】 -----最详解
windows和mac差不了多少,只是配置环境变量时不同。 下面进入正题 首先下载maven:https://maven.apache.org/ 或者在我的百度网盘下载:链接:https://pan.baidu.com/s/1pbNBt8fLZYWo7ouMRS_VCw 密码:oyzl mac配置环境变量: 1.打开终端 2.输入 vim ~/.bash_profile ...原创 2019-07-24 22:13:49 · 4360 阅读 · 0 评论 -
Java中的异常(超详解)
原创 2019-07-22 23:25:26 · 172 阅读 · 0 评论 -
HTTP状态码100、200、300等含义
1xx (临时响应)表示临时响应并需要请求者继续执行操作的状态代码。 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 102 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。 2xx (成功)表示成功处理了请求的状态代码。 200 (成功)...原创 2019-08-08 08:24:25 · 1868 阅读 · 0 评论 -
getAttribute和getParameter的区别
获取的值不同 getAttribute表示从request范围取得设置的属性,必须要通过setAttribute设置属性,才能通过getAttribute取得。设置和取得的值都是Object类型。 getParameter表示接收页面提交的 参数,主要有表单提交的参数、URL重写传递的参数等,所以不需要通过setParameter来设置参数,而且参数的返回类型是String类型。 数据传递的路径不...原创 2019-08-08 20:17:47 · 317 阅读 · 0 评论 -
session和cookie
1. 问题提出:HTTP是一种无状态的协议,为了分辨链接是谁发起的,因此提出了cookie和session两个机制 2. 应用场景: cookie:保存用户登录信息,创建购物车,跟踪用户行为 session的一个场景是购物车,添加了商品之后客户端可以知道添加了哪些商品,而服务器辨别存储信息就用到了session 3. cookie: a.是一种数据结构(key->value) b.是服务器...原创 2019-08-13 10:02:19 · 76 阅读 · 0 评论 -
一步一步手撕ArrayList
注:本文所有方法和示例基于jdk1.8 简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。 线程安全性 对ArrayList的操作一般分为两个步骤,改变位置(size)和操作元素(e)。所以这个过程在多线程的环境下是不能保证具有原子性的,因此ArrayLi...原创 2019-08-28 18:06:26 · 133 阅读 · 0 评论 -
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 · 1153 阅读 · 0 评论 -
happens-before
如何让多线程之间,对象的状态对于各线程的“可视性”是顺序一致的:ConcurrentHashMap 使用了 happens-before 规则来实现。 happens-before规则(摘取自 JAVA 并发编程): 程序次序法则:线程中的每个动作A都 happens-before 于该线程中的每一个动作B,其中,在程序中,所有的动作B都能出现在A之后。 监视器锁法则:对一个监视器锁的解锁 ha...原创 2019-09-03 08:27:35 · 90 阅读 · 0 评论 -
高并发缓存处理
缓存穿透: 1 出现原因:大量的请求在缓存中没有查询到指定的数据,因此需要从数据库中进行查询,造成缓存穿透。 2 后果:大量的请求短时间内涌入到database中进行查询会增加database的压力,最终导致database无法承载客户端请求的压力,出现宕机卡死等现象 3 解决方案: a.空值缓存:在某些特定的业务场景中,对于数据的查询可能会是空的,没有实际的存在,并且这类数据信息在短 时间进行多...原创 2019-09-04 00:36:23 · 172 阅读 · 0 评论 -
Redis底层剖析
Redis提供了五种数据结构:字符串、链表、集合、哈希表、有序集合这五种结构。 说一下简单实现 1. 字符串类型 string 存储:set 获取:get 删除:del 2. 哈希类型 hash:map格式 存储:hset key field value//获取指定的field对应的值 获取:hget key field hgetall key 删除:hdel key field 3. ...原创 2019-09-04 23:31:34 · 130 阅读 · 0 评论 -
Redis总结
为什么要用redis/为什么要用缓存? 主要从"高性能"和"高并发"这两点来看待问题。 高性能:假设用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变后,同步改变缓存中相应的数据即可。 高并发:直接操作缓存能够承受的请求...原创 2019-09-05 16:22:29 · 140 阅读 · 0 评论 -
面向对象和面向过程的区别
** 面向对象和面向过程的区别 ** ** 第一 :从性能方面来说,面向过程比面向对象性能能好一点,因为面向对象会加载类的实例也就是说实例化各种对象,这是比较消耗资源的。比如说嵌入式开发、单片机、Linux系统等都是基于面向过程的。 第二 :面向对象比面向过程易维护、易服用、易扩展,因为面向对象的特征就是封装、继承、多态,可以设计出低耦合的程序,使程序更容易维护、使用。 第三 :面向过程把算法放在...转载 2019-07-17 22:40:48 · 542 阅读 · 0 评论 -
LinkedHashSet源码详解
问题 (1)LinkedHashSet的底层使用什么存储元素? (2)LinkedHashSet与HashSet有什么不同? (3)LinkedHashSet是有序的吗? (4)LinkedHashSet支持按元素访问顺序排序吗? 简介 上一节我们说HashSet中的元素是无序的,那么有没有什么办法保证Set中的元素是有序的呢? 答案是当然可以。 我们今天的主角LinkedHashSet就有这个功...转载 2019-07-29 10:12:02 · 164 阅读 · 0 评论 -
Abstract与哪些关键字不能共存?为什么?
abstract::表明希望被重写,即该类中的方法被继承后需要重写。 1.private 被private修饰的方法,子类不能继承到,故不能重写,也就不能共存 2.final final修饰的类不能被继承,方法不能被重写,变量不能更改值,故不能共存 3.static static能被实例化直接调用,即不需要依赖对象就可进行访问,而abstract不能被实例化,故不能共存 4.…… ...原创 2019-04-05 18:10:09 · 690 阅读 · 0 评论 -
finally、final、finaize三兄弟
它们看似相同,实则大有不同 final:final可以修饰类、方法、变量,分别有不同的意义,修饰类时该类不能被继承,修饰方法时,该方法在被继承后不能被重写(override),修饰变量时该变量值不可被改变 finally:finally是处理异常时经常使用的关键字,形如try-catch-finally或try-finally,finally里的代码块总会执行 finaize:finaize是ja...原创 2019-04-05 18:20:57 · 409 阅读 · 0 评论 -
存在重复元素
给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 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] 输出: true public static boolean contai...原创 2019-04-17 22:46:38 · 60 阅读 · 0 评论 -
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 · 115 阅读 · 0 评论 -
LeetCode:合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,...原创 2019-04-23 17:24:22 · 72 阅读 · 0 评论 -
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 · 142 阅读 · 0 评论 -
LeetCode:有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。 示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true 示例 2: 输入: s = “rat”, t = “car” 输出: false public static boolean isAnagram(String s, String t) { //定义两个数组,分别存...原创 2019-04-20 01:16:02 · 92 阅读 · 0 评论 -
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 · 119 阅读 · 0 评论 -
LeetCode:两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 来源:力扣(LeetCode) 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:...转载 2019-07-02 00:16:03 · 88 阅读 · 0 评论 -
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 · 81 阅读 · 0 评论 -
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 · 79 阅读 · 0 评论 -
什么是Java中的Object?------对Object的理解和应用
一、Object对象简介 Java是一门面向对象的语言。无论在Java 中出现什么,都可以认为它是对象(除了八大基本数据类型) 而Object就是这些对象的最高级别,不论是Java对象还是用户自定义对象都隐式或者显式的继承了Object对象,当然,它们都拥有Object默认的方法。 二、Object方法 clone() finalize() equals(Object obj) hashcode(...翻译 2019-07-16 23:22:19 · 4636 阅读 · 0 评论 -
扫描电脑上所有图片,并存于指定文件中
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 · 535 阅读 · 0 评论