java编程
Cynthia_wpp
互相交流,共同进步!
展开
-
Java中的四个访问控制符
Java中的四个访问控制符权限从高到低分别为private、protected、包访问权限和private。访问控制符属于类所有,所以在方法中不能使用访问控制符修饰。访问控制符只能修饰类中的成员变量、成员方法和类本身。 1、private 修饰的成员变量,只能为本类中的成员方法所用,在外部类中无法使用。private修饰的成员方法,只能为本类中的其它方法服务。 2、protec...原创 2018-05-16 20:23:59 · 3090 阅读 · 0 评论 -
Java中通过ThreadLocal实现线程绑定来传递参数
ThreadLocal的基本理解Threadlocal很多地方都叫线程本地变量,也有很多地方叫线程本地存储,个人理解在业务上方法调用方法时都是在单线程中进行操作,在进行访问数据库时牵扯到事务操作时,因为要求要做到事务的start transaction()和commit()操作都需要同一个connection来执行,而恰巧我们的connection是从线程池中调用的。因此,我们不能保证我们进行事...原创 2018-10-12 23:37:08 · 5621 阅读 · 1 评论 -
Get和post的区别
get参数通过url传递,post放在request body中。get请求在url中传递的参数是有长度限制的,而post没有。get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。get请求只能进行url编码,而post支持多种编码方式get请求会浏览器主动cache,而post支持多种编码方式。get请求参数会被完整保留在浏览历史记录里,而post中的参数不...原创 2018-09-28 11:22:47 · 114 阅读 · 0 评论 -
redis详解-面试篇
使用redis有哪些好处?(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2) 支持丰富数据类型,支持string,list,set,sorted set,hash(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期...原创 2018-09-28 12:51:16 · 160 阅读 · 0 评论 -
HashMap桶中链表转红黑树为什么选择数字8?
在JDK8及以后的版本中,HashMap引入了红黑树结构,其底层的数据结构变成了数组+链表或数组+红黑树。添加元素时,若桶中链表个数超过8,链表会转换成红黑树。 翻了一下HashMap的源码,发现其源码中有这样一段注释:Because TreeNodes are about twice the size of regular nodes, we use them only when bins c...原创 2018-10-08 11:13:16 · 2268 阅读 · 0 评论 -
Eclipse中查看及调整JVM堆内存大小
一、查看堆内存设置路径:Windows > Pregerences > General 勾选右侧窗口的show heap status一项 点击 ok,即可在eclipse右下方看到实时的heap情况二、调整堆内存进入eclipse程序文件夹,打开名称为eclipse.ini的配置文件进行编辑,按需添加或修改如下两项设置:#当堆内存的余量小于40%时,JVM会将内存扩大到...原创 2018-10-08 11:28:38 · 2950 阅读 · 0 评论 -
Java并发——线程池Executor框架
什么是线程池?线程池的概念大家应该都很清楚,帮我们重复管理线程,避免创建大量的线程增加开销。若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时:①、线程生命周期的开销非常高②、资源消耗③、稳定性引入线程池任务是一组逻辑工作单元,线程则是使任务异步执行的机制。当存在大量并发任务时,创建、销毁线程需要很大的开销,运用线程池可以大大减小开销。Executor...原创 2018-10-15 23:32:30 · 220 阅读 · 0 评论 -
Redis为什么使用单进程单线程方式也这么快
Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps。这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached差。Redis快的主要原因是:1、完全基于内存2、数据结构简单,对数据操作也简单3、使用多路 I/O 复用模型第一、二点不细讲,主要围绕第三点采用多路 I/O 复用技术来展开。多路 I/O...原创 2018-10-09 19:56:23 · 240 阅读 · 0 评论 -
链表环与入口问题
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程)当快慢指针相遇的时候:此时慢指针走的路程为Sslow = x + m * c + a快指针走的路程为Sfast = x + n * c + a2 Sslow = Sfast2 * ( x + m...原创 2018-10-09 22:55:49 · 150 阅读 · 0 评论 -
Synchronized与ReentrantLock的区别
java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock。相似点:这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,而进行线程阻塞和唤醒的代价是比较高的(操作系统需要在用户态与内核态之...原创 2018-10-09 23:52:47 · 323 阅读 · 0 评论 -
高并发常见的面试题
1. 什么是进程进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间)。比如用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。当用户再次点击左边的IE浏览器,又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。目前操作系统都支持多进程。2. 什么是线程进程是表示自愿分配的基本单位。而线程则是进程中执行运算的最小单位,即执行处理机调度...原创 2019-02-28 23:45:06 · 48960 阅读 · 2 评论 -
Objects的hash()和hashCode()比较
Objects类是Java jdk 1.7开始引入的This class consists of static utility methods for operating on objects. These utilities includenull-safe or null-tolerant methods for computing the hash code of an object, ...原创 2018-10-12 16:36:08 · 5272 阅读 · 0 评论 -
Set 对存储对象集合去重,需要重写equals和hashcode
昨天遇到对象去重问题,想当然用Set存储对象,debug的时候发现个数还是没变,所有的都存进来了,百度了一会发现Set是需要重写equals和hashcode的。@Override public boolean equals(Object obj) { if(this==obj){ return true; } if...原创 2018-10-12 16:32:16 · 1339 阅读 · 0 评论 -
HashMap、HashTable、CurrentHashMap的区别于实现原理
HashTable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化 初始size为11,扩容:newsize = olesize*2+1 计算index的方法:index = (hash & 0x7FFFFFFF) % tab.length H...原创 2018-08-06 15:16:29 · 2672 阅读 · 0 评论 -
创建多线程的几种方式
多线程的形式上实现方式主要有两种,一种是继承Thread类,一种是实现Runnable接口。本质上实现方式都是来实现线程任务,然后启动线程执行线程任务(这里的线程任务实际上就是run方法)。 继承Thread类 实现线程的第一种方式就是继承Thread类的方式。继承Thread类是最简单的一种实现线程的方式,通过jdk给我们提供的Thread类,重写Thread类的run方法即可,那么当线程启...原创 2018-08-22 16:42:20 · 221 阅读 · 0 评论 -
lock和synchronized的同步区别与选择
区别如下: 1. lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现;(具体实现上的区别在《Java虚拟机》中有讲解底层的CAS不同,以前有读过现在又遗忘了。) 2. synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁...原创 2018-08-23 17:11:44 · 251 阅读 · 0 评论 -
使用c3p0连接池
1.JDBC数据库连接池的必要性在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet、beans)中建立数据库连接。进行sql操作断开数据库连接。这种模式开发,存在的问题:普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费...原创 2018-09-12 18:42:25 · 323 阅读 · 0 评论 -
java static方法不能被重写原因
重写方法的目的是为了多态,或者说:重写是实现多态的前提,即重写是发生在继承中且是针对非static方法的。语法上子类允许出现和父类只有方法体不一样其他都一模一样的static方法,但是在父类引用指向子类对象时,通过父类引用调用的依然是父类的static方法,而不是子类的static方法。即:语法上static支持重写,但是运行效果上达不到多态目的class Father {public s...原创 2018-09-17 18:43:52 · 5215 阅读 · 3 评论 -
短信验证
本程序是通过使用中国网建提供的SMS短信平台实现的(该平台目前为注册用户提供5条免费短信,3条免费彩信,这足够用于我们测试用了。在使用前需要注册,注册地址为http://sms.webchinese.cn/reg.shtml),下面是程序源码:package ly.wpp;import org.apache.commons.httpclient.Header;import org.apac...原创 2018-09-24 18:39:26 · 264 阅读 · 0 评论 -
Hash算法解决冲突的方法
Hash算法解决冲突的方法一般有以下几种常用的解决方法1, 开放定址法:所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入公式为:fi(key) = (f(key)+di) MOD m (di=1,2,3,……,m-1)※ 用开放定址法解决冲突的做法是:当冲突发生时,使用某种探测技术在散列表中形成一个探测序列。沿此序列逐个单...原创 2018-09-27 17:35:07 · 447 阅读 · 0 评论 -
static关键字的四种使用场景
static关键字主要有以下四种使用场景:1、修饰成员变量和成员方法2、静态代码块3、修饰类(只能修饰内部类)4、静态导包(用来导入类中的静态资源,1.5之后的新特性)修饰成员变量和成员方法(最常用)被static修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用调用格式:类名.静态变量名类名.静态方法名()用public修饰的static成员...原创 2018-09-27 17:48:04 · 3767 阅读 · 0 评论 -
自旋锁与互斥锁的区别
自旋锁(Spin lock)自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是 否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。其作用是为了解决某项资源的互斥使用。因为自旋锁不会引起调用者睡眠,所以自旋锁的效率远 高于互斥锁。虽然它的效率比互斥锁高,但是它也有些不足之处: 1、自旋锁...原创 2018-09-22 12:38:51 · 540 阅读 · 0 评论 -
Object类中有哪些方法
1 package java.lang; 2 3 public class Object { 4 5 private static native void registerNatives(); 6 static { 7 registerNatives(); 8 } 9 10 public final native Class&...原创 2019-03-13 12:04:02 · 1264 阅读 · 0 评论