自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

点滴积累

小女子杂记

  • 博客(33)
  • 问答 (1)
  • 收藏
  • 关注

原创 mysql必知必会——GROUP BY和HAVING

GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。select子句中的列名必须为分组列或列函数,列函数对于group by子句定义的每个组返回一个结果。某个员工信息表结构和数据如下:  id  name  dept  salary  edlevel  hiredate   1 张三 开发部 2000 3

2016-09-16 23:58:49 132162 26

原创 常见的java线程面试题

1.什么是线程?线程是操作系统中能够运行的最小单位,它被包含在进程中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务需要100毫秒,那么用十个线程完成改任务只需10毫秒。2.在java中实现线程的方式?继承Thread类,重写run()方法实现Runable接口,重写run()方法实现Cal

2016-09-15 17:42:19 700

原创 MySQL性能优化小记

关于MySQL性能优化我的几点总结:根据业务选择合适的数据库;采用数据库缓存技术,如memcache、redis等。可以使用动态服务器层的的程序来控制数据库缓存的分布式访问;采用MySQL主从结构;如果业务量更加巨大时,可以对数据库进行拆表、拆库,实现数据库级别的负载均衡。下面是在开发过程中关于MySQL优化的几点最佳实践:为查询缓存优化你的查询:大多数My

2016-09-08 08:52:59 677

原创 Spring AOP的实现——动态代理机制

在java的动态代理中,有两个重要的类或者接口,一个是InvocationHandler(Interface)、另一个是Proxy(Class),这一个类和接口是实现动态代理所必须的。InvocationHandler:每一个动态代理类都必须实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会

2016-08-29 21:15:05 19007

原创 web缓存知识整理

1.缓存的分类:缓存分为服务侧和客户端侧。服务端缓存又分为代理服务器缓存和反向代理服务器缓存(也叫网关缓存,比如Nginx反向代理、Squid等),其实广泛使用的CDN也是一种服务器缓存,目的是让用户的请求走“捷径”,并且都是缓存图片、文件等静态资源。客户端侧缓存一般指浏览器缓存,目的是加速各种静态资源的访问,如现在大型的网站,随便一个页面请求都是一两百个请求,如果没有缓存,用户体验会

2016-08-13 12:20:40 641

原创 java多线程

一、线程的生命周期及五种基本状态关于线程的生命周期,首先看看下面这张图:java线程中的五种基本状态:新建状态(New):当线程对象创建后,即进入了新建状态,如Thread t = new Thread();就绪状态(Runnable):当调用线程对象的start()方法(t.start()),线程就会进入就绪状态。处于就绪状态的线程,只是说明了此线程已经做好了

2016-08-03 15:03:32 419

原创 讨论MySQL索引底层实现

MySQL支持多种索引类型,如BTree索引,哈希索引,全文索引等待。本文主要讨论BTree索引,这也是我们平时用得最多的索引。索引的本质MySQL官方对于索引的定义为:索引是帮助MySQL高效获取数据的数据结构。即可以理解为:索引是数据结构。我们知道,数据库查询是数据库最主要的功能之一,我们都希望查询数据的速度尽可能的快,因此数据库系统的设计者会从查询算法

2016-10-02 15:35:35 7232 2

原创 浅谈ThreadLocal类

java.lang.ThreadLocal,线程局部变量,把一个共享变量变为线程的一个私有对象。不同线程访问一个ThreadLocal类对象时,锁访问和修改的是每个线程变量各自独立的对象。通过ThreadLocal可以快速把一个非线程安全的对象转换成线程安全的对象。(同时也不能达到数据传递的作用了)get()和set()分别用来获取和设置当前线程中包含的对象的值remove()表示删除

2016-09-18 18:52:34 1027

原创 MySQL事务的隔离级别

设置的目的在数据库操作中,为了有效保证并发读取数据的正确性,提出事务的隔离级别。数据库事务并发带来的问题更新丢失:两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。这是因为系统没有执行任锁操作,因此并发事务没有被隔离出来。脏读:一个事物开始读取某行数据,但是另外一个事务已经更新了此数据但没有及时提交。不可重复读:一个事物两次读取数据,两次读

2016-09-14 20:02:32 547

原创 设计模式——单例模式的几种实现方式

1.饿汉式:静态常量这种方法非常的简单,因为单例的实例被声明成static和final变量了,在第一次加载类到内存中时就会初始化,所以会创建实例本身是线程安全的。public class Singleton1 { private final static Singleton1 instance = new Singleton1(); private Singleton1(){} pub

2016-09-01 00:03:25 3894

原创 面试题总结3

1.如何判断两个类是否相同?2.哪些集合是线程安全的?为什么是线程安全的?3.如何解决hash冲突?4.java中常见的异常?java.lang.NullPointerException(空指针)调用了未经初始化的对象或者不存在的对象,这个错误经常存在。如在创建图片、调用数组的操作中,图片未经初始化,或者图片创建时的路径错误等

2016-08-24 09:48:29 523

转载 处理哈希(HASH)冲突的方法

虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时。冲突就难免会发生。另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记录,不仅发生冲突,而且还会发生溢出。因此,处理冲突和溢出是哈希技术中的两个重要问题。1、开放定址法  用开放定址法解决冲突的做法是:当冲突发生时,使用某种探查(亦称

2016-08-22 22:58:17 1158

转载 如何解决秒杀的性能问题和超卖的讨论

一、秒杀带来了什么?    秒杀或抢购活动一般会经过【预约】【抢订单】【支付】这3个大环节,而其中【抢订单】这个环节是最考验业务提供方的抗压能力的。  抢订单环节一般会带来2个问题:  1、高并发  比较火热的秒杀在线人数都是10w起的,如此之高的在线人数对于网站架构从前到后都是一种考验。  2、超卖  任何商品都会有数量上限,如

2016-08-21 23:29:15 469

转载 Java中的hashCode()和equals()

原文地址:点击打开链接以下是关于HashCode的官方文档定义:[plain] view plain copyhashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。     hashCode 的常规协定是:   在 Java 应用程序执行期间

2016-08-18 01:07:21 428

原创 Spring AOP的实现——对AOP的理解

什么是AOPAOP(Aspect Orient Programming,即面向切面编程)。AOP和OOP(Object Orient Programming,面向对象编程)互为补充,面向对象编程将程序分解成各个层次的对象,而面向切面编程将程序运行过程分解成各个切面。可以这么理解:面向对象编程是从静态的角度考虑程序结构,而面向切面编程是从动态的角度考虑程序的运行。为什么要用AOP

2016-08-17 00:55:15 3917

转载 索引基础——B-Tree、B+Tree、红黑树、B*Tree数据结构

B树(B-Tree,并不是B“减”树,横杠为连接符,容易被误导)       是一种多路搜索树(并不是二叉的):       1.定义任意非叶子结点最多只有M个儿子;且M>2;       2.根结点的儿子数为[2, M];       3.除根结点以外的非叶子结点的儿子数为[M/2, M];       4.每个结点存放至少M/2-1(取上整)和至多M-1

2016-08-15 11:03:25 636

原创 银行家算法

面试临近,最近复习操作系统中,银行家算法是面试常考点。银行家算法是为了避免死锁。我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。为保证资金的安全,银行家规定:当一个顾客对资金的最大需求量不超过银行家现有的资金就可以接纳该顾客顾客可以分期贷款,但贷款总数不能超过最大的需求量当银行家现有的资金不能满足顾客尚

2016-08-14 17:43:09 1605

原创 java中请求转发和重定向的区别

对于初学者来说,可能一开始并不太关注这个问题。最近刷笔试题时,我又复习了一遍。今天在这里稍做总结,希望能帮助到大家。请求转发:request.getRequestDispatcher().forward();重定向:response.sendRedirect();例如:请求转发:response.getRequestDispatcher("/student_li

2016-08-11 21:28:08 14009 2

原创 并发和并行的区别

并发是指在一个时间段,多条指令串行执行,但由于CPU轮换速度非常快,所以可以看做多条指令同时进行。并行是指在一个时间点,多条指令在多个处理机上同时执行。你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,说明你不支持并发也不支持并行。你吃饭吃到一半,电话来了,你停下来接了电话,接完继续吃饭,这说明你支持并发。你吃饭吃到一半,电话来了,你一边打电话一边吃饭,说明你支持并行。

2016-08-11 15:49:13 458

原创 初识webSocket

一、WebSocket的前世今生:Web应用的交互过程通常是客户端通过浏览器发出一个请求,服务器接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、海量并发的应用来说,高并发与用户实时响应是Web应用经常面临的问题,比如金融证券的实时信息、Web导航中的地理位置获取、社交网络的实时消息推送等。传统的请求-响应模式的we

2016-08-05 23:57:48 532

原创 MongoDB学习笔记(1)

安装MongoDB参考点击打开链接一、什么是MongoDBMongoDB是由C++语言编写的,是一个基于分布式文件储存的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器的性能。MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值(key=>value)组成,MongoDB文档类似于json对象。字段

2016-08-04 19:25:53 1416

转载 从关系型数据库到非关系型数据库

1. 关系型数据库关系型数据库,是指采用了关系模型来组织数据的数据库。关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。关系模型中常用的概念:

2016-08-04 09:56:25 275

原创 HashMap的工作原理

首先,先回答一些简单的问题:“你用过HashMap吗?” “什么是HashMap?你为什么用它”几乎每个人都会回答“是的”,然后阐述一些HashMap的特性,如HashMap可以接受null键值和值,而Hastable不行;HashMap是非synchronized,而HashTable是synchronized,这意味着HashTable是线程安全的,多个线程可以共享一个HashTabl

2016-08-01 09:34:27 376

原创 理解Java内存模型

Java内存模型(JMM)的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与Java编程里面的变量有所不同,它包含了实例字段、静态字段和构成数组对象的元素,但不包含局部变量和方法参数,因为后者是线程私有的,不会共享,当然不存在数据竞争的问题。JMM规定了所有变量都存储在主内存中,但每个线程还有自己的工作内存,线程的工作内存中保存

2016-07-31 10:00:41 403

原创 Java虚拟机学习笔记(1)

前前后后翻阅《深入理解Java虚拟机》,总是看完就忘。所以打算这次学习时做好记录,以便日后查看。一、Java内存区域:程序计数器:类似字节码的行号指示器线程私有,独立内存如果指示的是字节码,则记录正在执行的字节码指令地址;若为native方法,则记录null唯一一个在JVM规范中没有任OutOfMemoryError的区域Java虚拟机栈:线程私有,生命周期与线

2016-07-30 08:42:34 625

原创 面试题总结2

1.常见的异常分为哪两种?常见的异常基类以及常见的异常Throwable是java语言中所有错误和异常的超类,它有两个子类:Error   Exception异常的种类:Eorror: Eorror称之为错误,是程序无法处理的,如OutOfMemoryError、ThreadDeath等,出现这种错误唯一能做的就是听之任之,交给JVM来处理,不过JVM大多情况下会选择终止线程。

2016-07-29 09:27:46 404

原创 初识Java回调机制

原来一直听闻回调机制,但是也一直不理解,于是就在网上查了许多资料。在这里,简单总结。 首先回调,单从字面上来理解,即返回去调用。我的解释是不是很好理解! 再来,所谓回调就是:A类中调用B类中的方法C,然后B类中反过来调用A类中的方法D,D这个方法就是回调方法。不要晕,我们一步一步来…… 下面,举个栗子: 1.老师在黑板上出了道“1+1”的计算题,让小明来填,这么简单的题,小明直接心算就出来了

2016-07-28 14:40:33 285

原创 面试题总结1

1.面向对象和面向过程的区别?用面向过程可以实现面向过程吗?面向对象和面向过程的区别: - 面向过程就像是一个细心的管家,所有细节都要考虑;面向对象就像是家用电器,你只需要知道它的功能,不需要知道它的工作原理。 - 面向过程是一种以事件为中心的编程思想,即分析出解决问题的步骤,然后用函数把这些步骤实现,并按照顺序调用;面向对象是以“对象”为中心的编程思想。 -

2016-07-28 10:35:33 688

原创 理解Session和Cookie机制

一、Cookie机制 在web程序中是使用HTTP协议来传输数据的,因为http是无状态协议,一旦数据交换完毕,客户端和服务器端的连接就会关闭,再次交换数据需要建立新的连接,所以无法实现会话跟踪,cookie技术则弥补了这一缺陷。 cookie实际上一段的文本信息,客户端请求服务器。如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个cookie。客户端浏览器会把cook

2016-06-25 23:41:51 2290

原创 java中的四种引用类型

一、强引用(StrongReference):相当于生活中的必需品,平时接触最多,不会被GC回收。当内存空间不足时,java虚拟机宁愿抛出OutOfMemoryEerror异常,也不愿意回收强引用对象来解决内存不足的问题。二、弱引用(WeakReference) : 相当于可有可无的生活品。在垃圾回收线程扫描它所管理的内存区域的过程中,一旦发现只具有弱引用的对象,不管当前内存足够与否,都会回收它的内

2016-06-17 00:55:24 2226

原创 初识java线程池

一、首先,什么是线程池? 一个线程池管理了一组工作线程,同时它还包括了一个用于放置等待执行任务的队列。 二、如何创建线程池? 线程池可以通过Executors工厂方法来创建,JDK中实现ExecutorService的类有: - ForkJoinPool - ThreadPoolExecutor - ScheduledThreadPoolExecutor Executor类有以

2016-06-10 15:13:54 349

原创 java中抽象类和接口的比较

一、相同点 1. 接口和抽象类都位于继承树的顶层,且都不能被实例化,用于被其他类实现或继承 2. 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法二、不同点: 首先,可以这么理解: 接口是多个模板间的耦合标准,当多个应用程序之间使用接口时,接口则是多个程序之间的通信标准,它类似于一个系统中的“总纲”。因此,接口不应该经常改变,一旦接口改变,会导致

2016-06-08 12:36:21 546

原创 java中的抽象类和接口

一、抽象类 1.1定义:抽象类是用来捕捉子类通用特性的。它不能被实例化,只能被用作子类的超类,使用abstract修饰符来定义。 1.2抽象类和抽象方法: - 有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法 - 抽象类和抽象方法都必须使用abstract修饰符来修饰,抽象方法不能有方法体 - 抽象类不能被实例化,所以无法用new关键字来创建抽象类的实例

2016-06-07 01:06:06 274

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除