自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 收藏
  • 关注

原创 JVM的学习

1. 类加载器子系统Java的动态类加载功能是由类加载器子系统处理。当它在运行时(不是编译时)首次引用一个类时,它加载、链接并初始化该类文件。1.1 加载类由此组件加载。启动类加载器 (BootStrap class Loader)、扩展类加载器(Extension class Loader)和应用程序类加载器(Application class Loader) 这三种类加载器帮助完成类的加载。启动类加载器 – 负责从启动类路径中加载类,无非就是rt.jar。这个加载器会被赋予最高优先级。

2020-10-03 00:16:35 169

原创 JDBC连接数据库操作

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class TestJDBC { private static void tes

2020-10-02 22:08:09 205

原创 SSM框架介绍以及功能原理

SSM是sping+springMVC+mybatis集成的框架。Spring框架概述1.1 什么是SpringSpring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发

2020-10-02 22:05:59 5582 3

原创 网络分层osi七层模型TCP/IP四层模型

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;ISO/OSI参考模型功能简介

2020-08-15 19:55:10 1545

原创 初始Spring

1.什么是SpringSpring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能范围:任何Java应用它是一个容器框架,用来装javabean(jav

2020-08-12 14:44:13 206

原创 面向对象三大特性:继承,封装,多态

一、封装封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。也就是说不需要知道对象的实现细节,就可以使用该对象提供的接口来访问这个对象.使用封装有以下好处:1、良好的封装能够减少耦合。2、类内部的结构可以自由修改。3、可以对成员进行更精确的控制。4、隐藏信息,实现细节。二、继承继承是使用已存在的类的定义作为基础

2020-08-07 12:48:57 139

原创 笔记本摄像头打开自动灭的问题解决(win10)

我的笔记本摄像头总是打开之后总是显示几秒钟自动关闭,最后终于找到了解决方案,分享给大家1:打开方式:设置-隐私-相机(保证所有应用权限已开)2:确保摄像头开关已打开(键盘第一行有个摄像图标,我的是f8)3:(重点来了)注册表设置(1)win+R呼出运行,输入regedit,按下回车打开注册表;(2)在注册表中依次双击:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows Media Foundation \ Platform(3)在右边空白处点击

2020-08-06 11:29:31 23728 35

原创 CAS实现原理

一、什么是CAS?在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新,则写入将失败。 操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应(这个变体通常称为比较和设置),或通过返回从内存位置读取的值来完成(摘自维基百科)CAS有3个操作数,内存值V,旧的预期值

2020-08-02 19:13:14 660

原创 接口和抽象类的联系和区别

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。接口和抽象类的联系抽象类:1.一个类中有抽象方法,这个类就变成了抽象

2020-07-30 16:31:07 466

原创 Java集合框架中的接口

Java 集合框架中接口、之间的关系及其含义集合框架是为表示和操作集合而制定的统一的标准,主要包括三大部分:对外的接口,接口的是实现和对集合的运算。简单地说,编程过程中会涉及对一类数据的处理,这类数据用统一的数据结构表示,为能统一的存放、规范的操作就定了存放、操作的结构规范,类似数组。其实在Java2之前sun就提供了集合操作,更准确的叫法应该是容器,比如Vector,Stack,Hashtable等,但功能相当有限,后来统一了集合架构,有了泛型之后更是对所有集合进行了重写,就有了现在我们看到的集合。J

2020-07-27 21:26:08 355

原创 java多线程--定时器

在某些应用场合,需要定时地完成一些操作,希望能有一个“精准”的定时的工具,方便编程。应该有一个线程,这个线程每经过一段时间(这个时间可以指定),就“醒来”,并执行外部要求完成的操作。作为一个定时器,需要定义一个时延,即要求等待的时间delay;需要用线程来实现该定时器,便需要一个变量来控制线程goon;既然存在线程,必然要给两个方法,开启线程start(),关闭线程stop();定时器要应用在某些场合来做一些其他事情,那么就需要一个方法来负责做某些事,但是由于现在无法获悉未来要做什么,所以给一个抽

2020-07-27 20:18:50 422

原创 java多线程--阻塞队列

生产者消费者模型生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添

2020-07-27 18:17:11 176

原创 左右最值最大差(非贪心)

import java.util.*;public class MaxGap { public int findMaxGap(int[] A, int n) { // write code here if(n == 0){ return 0 ; } int[] arr = new int[n]; int k = 0,left,right; int x; for(

2020-07-26 17:16:33 92

原创 线程通信(wait,notify,notifyAll)

通信-对象的等待集wait set1.wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)2.notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程。3.wait(long timeout)让当前线程处于“等待(阻塞)状态”,“直到其他线程调用

2020-07-22 22:49:46 228

原创 单例模式-懒汉和饿汉模式

单例模式可以带来的几个好处:对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。单例模式的实现1.饿汉模式(线程安全)public class Singleton{ //在静态初始化器中创建单例模式保证了线程安全 private static Singleton uniqueInstance = new Singleton(); //S

2020-07-22 22:25:58 164

原创 牛客网【查找兄弟单词】Java

题目描述输入描述:先输入字典中单词的个数,再输入n个单词作为字典单词。输入一个单词,查找其在字典中兄弟单词的个数再输入数字n输出描述:根据输入,输出查找到的兄弟单词的个数示例输入3 abc bca cab abc 11输出2bca题目分析结果要进行判断,有还是没有兄弟单词,没有就不输出!结果是2行数据现在,我们来分析一下,首先,题目要求输入 3 abc bca cab abc 1 ,其中3表示后边会跟着输入 3 个单词,而这3个单词需要存进字典。也就是 abc bca

2020-07-22 16:41:14 310

原创 乒乓球筐 牛客网练习题 Java

题目描述nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?输入描述:输入有多组数据。每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母。字符串长度不大于10000。输出描述:每一组输入对应一行输出:如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Yes”;否则输出“No”。示例输入ABCD

2020-07-22 15:18:31 288

原创 synchronized和volatile解决线程不安全的问题

1.synchronizedsynchronized的底层是使用操作系统的mutex lock实现的。当线程释放锁时,JMM会把该线程对应的工作内存中的共享变量刷新到主内存中当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从主内存中读取共享变量synchronized用的锁是存在Java对象头里的。synchronized同步快对同一条线程来说是可重入的,不会出现自己把自己锁死的问题;同步块在已进入的线程执行完之前,会阻塞后面其他线程的进入Sync

2020-07-21 23:05:41 291

原创 Java篇—单词倒排

import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){String str = sc.nextLine();//将字符串转化为字符数组char[] temp = str.toCharArray();//定义StringB

2020-07-21 20:36:24 332

原创 线程不安全的原因

什么是原子性我们把一段代码想象成一个房间,每个线程就是要进入这个房间的人。如果没有任何机制保证,A进入房间之后,还没有出来;B 是不是也可以进入房间,打断 A 在房间里的隐私。这个就是不具备原子性的。那我们应该如何解决这个问题呢?是不是只要给房间加一把锁,A 进去就把门锁上,其他人是不是就进不来了。这样就保证了这段代码的原子性了。有时也把这个现象叫做同步互斥,表示操作是互相排斥的。一条 java 语句不一定是原子的,也不一定只是一条指令比如刚才我们看到的 n++,其实是由三步操作组成的:从

2020-07-18 22:57:01 189

原创 线程的状态

Java中的线程的生命周期大体可分为5种状态。①NEW:这种情况指的是,通过New关键字创建了Thread类(或其子类)的对象②RUNNABLE:这种情况指的是Thread类的对象调用了start()方法,这时的线程就等待时间片轮转到自己这,以便获得CPU;第二种情况是线程在处于RUNNING状态时并没有运行完自己的run方法,时间片用完之后回到RUNNABLE状态;还有种情况就是处于BLOCKED状态的线程结束了当前的BLOCKED状态之后重新回到RUNNABLE状态。③RUNNING:这时的线程指

2020-07-18 22:50:23 80

原创 Thread类和常见方法

Thread构造的常见方法方法 说明Thread() 创建线程对象Thread(Runnable target) 使用 Runnable 对象创建线程对象Thread(String name) 创建线程对象,并命名Thread(Runnable target, String name) 使用 Runnable 对象创建线程对象,并命名Thread t1 = new Thread();Thread t2 = new Th

2020-07-16 20:24:13 222

原创 线程的基本概念及创建方法

1 概念设想如下场景:一家公司要去银行办理业务,既要进行财务转账,又要进行福利发放,还得进行缴社保。如果只有张三一个会计就会忙不过来,耗费的时间特别长。为了让业务更快的办理好,张三又找来两位同事李四、王五一起来帮助他,三个人分别负责一个事情,分别申请一个号码进行排队,自此就有了三个执行流共同完成任务,但本质上他们都是为了办理一家公司的业务。此时,我们就把这种情况称为多线程,将一个大任务分解成不同小任务,交给不同执行流就分别排队执行。其中李四、王五都是张三叫来的,所以张三一般被称为主线程(Main

2020-07-16 19:53:37 140

原创 给定一个字符串,问是否能通过添加一个字母将其变为回文串

import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String str = sc.nextLine(); int i = 0;//左指针 int j = str.length()-1;//右指针 int flag = 0; while(i&l

2020-07-15 18:32:26 394

原创 进程的基本概念详细总结举例

3. 进程3.1 进程的初步认识对于操作系统来说,一个任务就是一个进程(Process)。课本概念:程序的一个执行实例,正在执行的程序等。内核观点:担当分配系统资源(CPU时间,内存)的实体。如何理解进程?如:张三去银行转账,就要使用银行的资源(接待,转账人员,银行电脑,必要时保安也可以跟着:) )为张三完成转账,而在银行内部,这一整套过程的执行,我们统称为办理业务。类比,一个程序刚开始就是一个在硬盘上的程序,加载运行时,是为了完成某些任务(如迅雷完成下载任务),而要完成任务,就需要操作系

2020-07-14 21:28:38 1949 1

原创 事务,分布式系统实现事务

1.事务概念事务是指逻辑上的一组操作,组成该操作的各个单元,要么全部执行成功,要么全部执行失败; 只有全部执行成功后,事务才会提交, 若有一个单元执行失败,那么所有数据都会通过回滚自动恢复.(**回滚机制:**当事务内部有一个操作执行失败后,那么将会撤销所有已完成的更新操作)2.事务的四大特性(1)原子性–即不可分割性,事务里的操作要么全执行,要么都不执行.(2)一致性(可串性)–事务执行前后,数据始终处于合法状态,例如转账操作:执行前后,双方的金额之和要保持一致.(3)持久性–事务一旦执行成功提

2020-07-14 21:06:06 159

原创 MySQL基础

MySQL索引1.概念索引是一种能帮助 MySQL 提高查询效率的数据结构。索引是一种特殊的文件,包含着数据表里所有记录的引用指针,好比是书的目录,可以提高查询效率.2.应用场景(满足的条件)(1)数据量大,而且经常 条件查询这些列;(2)表的插入操作,及这些列的修改操作的 频率较低;(3)索引会占用磁盘空间,即需要有充足的空间.满足这些条件时可以考虑创建索引,以提高查询效率.3.使用创建主键(primary key),唯一约束(unique) ,外键(foreign key) 时 会

2020-07-13 20:10:22 112

原创 中国牛市

public class Solution { /** * 计算你能获得的最大收益 * * @param prices Prices[i]即第i天的股价 * @return 整型 */ public int calculateMax(int[] prices) { int max=0; for(int i=1;i<prices.length;i++) { int le

2020-07-11 22:58:45 200

原创 小孩上楼梯

public int countWays(int n){int a = 1,b = 2,c = 4;if (n== 1){return a;}else if (n == 2){return b;}else if (n == 3){return c;}else {for (int i = 4 ;i <= n;i++){int temp = ((a+b)%1000000007+c)%1000000007;a = b;b = c;c = temp;}return c;}}

2020-07-08 16:05:09 231

原创 石头剪刀布JAVA 牛客网

import java.util.Scanner;public class Jock0708 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); int[] arr1 = new int[3];//记录第一个人胜平负的次数.

2020-07-08 15:55:09 193

原创 简单错误记录(前8条)

import java.util.*;public class Main{public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Map<String, Integer> map = new LinkedHashMap<>(); //保证按插入时的顺序存放元素 while (scanner.hasNext()) {

2020-07-06 17:33:30 183

原创 说反话(20)

public static void main(String[] args) throws ParseException, IOException{ Scanner sc = new Scanner(System.in); String s = sc.nextLine().trim(); String[] s1 = s.split(" +"); for(int i = s1.length-1;i>=0;--...

2020-07-06 17:31:50 223

原创 守行数

import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()){ int n =sc.nextInt(); int N_2 = n*n; int count =0;

2020-07-03 09:27:51 186

原创 IP与整数的转换 牛客网Java

import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String ip = scanner.nextLine(); String ip10 = scanner.n

2020-07-02 18:26:42 93

原创 计票统计

package Test3;import java.util.LinkedHashMap;import java.util.Map;import java.util.Scanner;public class pCandidateName { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext())

2020-06-30 18:43:18 444

原创 数字之和

package Test3;import java.util.Scanner;public class Num_sum0630 { private static int num; public static void main(String[] args) { Scanner sc= new Scanner(System.in); while (sc.hasNext()){ int n = sc.nextInt();

2020-06-30 18:29:47 135

原创 人民币转换

```javapackage Test3;import java.util.Scanner;public class Tests0630 { public static void main(String[] args) { final String[] hanzi = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" }; Scanner sc = new Scanner(System.in);.

2020-06-30 16:22:51 110

原创 绩点

package Test3;import java.util.Scanner;public class Test0630 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()){ int n = sc.nextInt(); int[] arr = new int[n]

2020-06-30 16:22:19 132

原创 找不同

class Solution { public char findTheDifference(String s, String t) { char res = 0; int s1 = s.length(); for(int i= 0;i<s1;i++){ res^=s.charAt(i)^t.charAt(i); } res^= t.charAt(s1); return re

2020-05-27 17:58:36 236

原创 双向链表和数组实现HashSet

class MyHashSet { class Node{ int val; Node prev,next; Node(int val){ this.val = val; } } private int length = 100; private Node[] data = new Node[length]; /** Initialize your data structure

2020-05-27 17:53:35 267

空空如也

空空如也

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

TA关注的人

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