- 博客(34)
- 收藏
- 关注
原创 线程池面试
一、线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了...
2020-04-06 10:45:44
278
转载 Sprinig Boot + Redis 如何实现接口幂等性
幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次可能出现的问题: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等 解决方案: 唯一索引 -- 防止新增脏数据 ...
2020-04-05 13:51:25
336
原创 cookie和session
由于http是无状态的,也就是不能做到会话保持,那么就需要引入cookie和session来做会话保持,存储用户信息。cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。IE浏览器把Cookie信息保存在类似于C://windows//cookies的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。co...
2020-04-02 09:22:39
240
原创 jar包和war包区别以及怎么部署
什么是war和jar?war包:是做好一个web应用后,通常是网站,打成包部署到容器中。jar包:通常是开发时要引用通用类,打成包便于存放管理。怎么打包?IDEA上面菜单栏 Build > Build Artifacts... >Build这时会在 ./out/artifacts/项目名称/ 目录下产生jar包区别是?war包代表了一个Web应用程序,...
2020-04-01 21:54:27
2351
原创 一文看懂Git和SVN
Git 和 SVN 孰优孰好,每个人有不同的体验。在易用性这方面,SVN对于新手来说会更有好一些。但是从另外一方面看,Git 命令多意味着功能多,若我们能掌握大部分 Git 的功能,体会到其中的奥妙,会发现再也回不去 SVN 的时代了。Git VS SVN区别:Git是分布式的,支持离线工作,在本地可以进行很多操作,而SVN是集中式的,必须联网才能正常工作;Git 分支是指针...
2020-04-01 10:03:13
232
原创 锁
什么是死锁?死锁是指两个或两个以上的线程在执行过程中,由于自身占有其他方所想要占有的资源,相互竞争而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态。简单一点,死锁是指多个线程间互相占有其他方所想要占有的资源而形成循环等待,造成僵持的情况。为什么会死锁?死锁发生的四个必要条件:1、互斥使用,即当资源被一个线程占有时,别的线程不能使用;2、不可抢...
2020-02-28 01:31:04
167
原创 数据库完美总结(二)
JDBC(Java DataBase Connectivity),Java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成。JDBC优势:Java语言访问数据库操作完全面向抽象接口编程 开发数据库应用不用限定在特定数据库厂商的API 程序的可移植性大大...
2020-02-22 21:18:17
191
原创 数据库完美总结(三)
索引:索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍分类目录之间关系。【索引保存的数据结构主要为B+树】索引的作用:索引所起的作用类似书籍目录,可用于快速定位、检索到数据。 索引对于提高数据库的性能有很大的帮助。若对于数据查询需求量比修改和删除需求量大的时候,可以考虑建立索引,但是索引也会占据额外的磁......
2020-02-22 20:18:21
479
原创 数据库完美总结(一)
数据库大体可以分为:基于标准的SQL的关系型数据库:Oracle、MySQL、SQL Server不基于SQL实现的非关系型数据库:键值对【memcached、redis】;文档型【mongodb】;数据库基本语法(大写均为关键字,不可缺少):1)登录本地数据库:MYSQL-U'username'-P 'password' ;2)显示当前的数据库:SHOW DA...
2020-02-22 19:04:30
401
原创 生产者消费者模型
生产者消费者模型 两个进程共享一个缓冲区,一个进程向缓冲区中写入数据(生产者),另一个进程从缓冲区中读取数据(消费者)。当缓冲区被写满时,生产者就必须进入挂起状态,直到消费者从缓冲区中取走数据时,生产者才能继续向缓冲区中放数据。同样当缓冲区没有数据时,消费者进程就必须进入挂起状态,直到生产者向缓冲区中放入数据时,消费者才能被唤醒继续从缓冲区中取走数据。先实现一个队列:...
2020-02-13 23:23:07
178
原创 详解 TCP 连接的 三次握手 与 四次挥手
客户端client:能向服务器发送信息,提出请求。服务器server:能接受客户端发来的请求,并能够发送数据给客户端以做出回应。套接字是通信的基石,是支持tcp/ip协议网络通信的基本单元,包含进行网络通信必须的5种信息:连接使用的协议,本地主机的ip地址,本地进程的协议端口,远地主机的ip地址,远地进程的协议端口。互联网一般是五层结构,由上到下:应用层:专门针对某些应用...
2020-02-13 01:24:33
361
原创 单例模式的实现
单例模式当只需要用到类的一个实例对象时,我们需要用单例模式来设计类;①饿汉模式1.封装构造方法;2.创建并封装私有对象;3.设计get方法获取该私有对象;class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); publi...
2020-02-12 23:54:32
121
原创 初识多线程
先来区分一下线程和进程!!!进程是资源分配的最小单位。线程是cup调度的最小单位,对于系统开销来说,线程比进程的开销小。一个程序可以有多个进程,一个进程可以有多个线程。进程间资源独立,一个进程的多个线程之间共享该进程的资源。线程不能独立运行必须依赖于进程和应用程序的调用。进程会由系统分配地址空间,而线程没有独立的地址空间,共享所属进程的地址空间。线程(...
2020-02-12 00:57:32
187
原创 Java中的异常处理
在《Think in java》中是这样定义异常的:异常情形是指阻止当前方法或者作用域继续执行的问题。异常包括错误,但是不仅仅是错误,比如使用0做除数时就会产生异常,打开一个没有的文件的时候也会产生异常。那么什么时候才会出现异常呢?只有在你当前的环境下程序无法正常运行下去,这时它所就会从当前环境中跳出,并抛出异常。其实异常就是你的程序无法正常执行了。异常主要分为两类:Che...
2020-02-11 23:43:44
122
原创 Java数据类型
数据类型Java数据类型分为:基本数据类型(简单类型)和引用数据类型,而基本数据类型包括数值型、字符型和布尔型,如int、long、char、boolean等;引用数据类型包括数组、类、接口。1、常量和变量变量:程序在运行期间可以改变值的;常量:在程序运行期间不可改变值的(1、字面常量;2、被final修饰的变量;)注:局部变量作用域和生命周期仅在自身所在的{}内;2、类...
2020-02-11 19:52:55
199
原创 排序(闲时手机学习使用)
1、插入排序:越有序,速度越快* 最坏情况下(无序) 时间复杂度:O(n^2)* 最好情况下(有序) 时间复杂度:O(n)* 稳定性: 稳定 private static void insertSort(int[] array) { for (int i = 1; i < array.length; i++) { in...
2019-11-27 21:40:21
180
原创 抽象类与接口
抽象(abstract)【没有实际操作的方法,我们可以设计成一个 抽象方法(abstract method); 包含抽象方法的类我们称为 抽象类(abstract class)】abstract class Shape { //抽象类 abstract public void draw(); //抽象方法}1.抽象类不能被实例化...
2019-10-30 16:43:30
156
原创 类和对象(2)
包(package):其实就是存放类的文件夹,一般命名为(例子:com.baidu.demo1),其目的是为了把不同的类区分开来,以免文件名冲突带来不必要的麻烦,导包一般使用import(例子:importjava.util.Date),或者使用某个方法时IDEA会自动导包。面向对象编程语言第二大特性:继承(被继承的类,我们称为 父类/基类/超类。而继承自其他类的新类,我们称为 子类/派...
2019-10-30 15:12:34
197
原创 面试常见链表题总结(如果失眠了就拿出来看看)
无头单链表 现场手撕代码+分析,供自己闲时手机复习使用!删除链表中等于给定值 val 的所有节点。 反转一个单链表。 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 输入一个链表,输出该链表中倒数第k个结点。 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 编写代码,以给定值...
2019-10-25 21:22:49
485
原创 链表基本操作(如果失眠了就拿出来看看)
单链表所有基本操作,供自己闲时手机复习使用!单向链表基本操作实现:class LinkedNode{ public int data=0; public LinkedNode next=null; public LinkedNode(int data){ this.data=data; }}public class Linke...
2019-10-25 21:18:42
249
原创 数组(如果失眠了就拿出来看看)
数组所有操作实现,供自己闲时手机复习使用!public class Demo { public static void main(String[] args) { int[] array1 = {19,45,38,29,2,100,190};// System.out.println(binarySearch2(array1, 0, array1...
2019-10-25 21:15:08
152
原创 类和对象(1)
OOP(Object-Oriented Programming)面向对象程序设计的编程语言的三大特性:封装、继承、多态第一大特性:封装性(让类的调用者不需要具体知道类的实现细节),其目的是为了降低使用成本类和对象的关系:1)类是对象的抽象描述,而对象是类的实例化;2)定义类的时候并没有为其分配实际的内存空间进行存储,而创建对象却占有实际的内存空间。使用class关键字创建...
2019-10-22 13:43:56
163
原创 简单理解方法重载和重写
方法:是一段可以被重复调用的代码块方法存在的意义:是能够模块化的组织代码(档代码规模比较复杂的时候) 做到代码被重复使用,复用性较高 让代码更好地理解并且更简单 让我们从方法的实现者转而成为了方法的调用者,这也是面向对象思想的基础方法书写的两个明确:返回值类型: 想要什么结果 参数: 实现结果的原材料方法使用注意:写方法的时候注意用驼峰式(即类似toPrint方式)...
2019-09-16 15:16:50
253
原创 给人生道路上迷茫的你写一封信
“曾梦想仗剑走天涯,看一看世界的繁华”也许每个青春期的你都是这么想的,但到你真的成年了,你会发现成年人的世界里没有“容易”二字!你想进一家公司,公司需要工作经验才能入职,但你不入职你哪里来的工作经验? 你想通过创业赚取人生中的第一桶金,但没有第一桶金你如何创业? 你想学习一门新的知识,提升能力,但你却发现自己还在思索如何解决温饱,哪里还有心思去搞学习? ...
2019-09-02 23:27:11
522
原创 文件操作相关的函数
一、打开与关闭文件fopen 用来打开一个文件FILE * fopen(const char * path,const char * mode); 打开文件成功返回一个文件指针,若打开文件失败则返回NULL。*path:字符串包含欲打开的文件路径及文件名(例如:D:Admin/A/B.txt),注意为避免与转义字符混淆,使用“/” r 打开只读文件,该文...
2019-08-30 23:59:14
228
原创 自定义类型:结构体、枚举、联合
一、结构体:一些不同类型的值的集合,这些值称为结构体的成员变量。1、结构体的创建//创建一个简单的结构体:struct stu{ //类型声明,结构体的标签 char name[20]; //成员1,姓名 int age; //成员2,年龄 char sex[3]; //成员...
2019-08-29 19:06:43
133
原创 数组指针、函数指针、函数指针数组、指向函数指针数组的指针、回调函数加深理解~
①数组指针:顾名思义一个指向数组的指针,32位操作系统下sizeof为 4.声明形式:type (*func)[ ] (参数列表)②函数指针:函数指针就是一个指向函数的指针。每个函数在编译时,会被分配一个入口地址,一般用函数名来表示,这个地址就是该函数的指针。声明形式:type (*func) (参数列表 )③指针函数:指针函数就是返回指针值的函数,本质是一个函数。所以指针函数...
2019-08-28 23:21:21
183
原创 模拟实现strcpy、strcat、strstr、strchr、strcmp、memcpy、memmove函数
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<assert.h>#include<windows.h>1.实现strcpychar*strcpy(char* dest, const char* src){ assert((d...
2019-08-27 20:37:25
182
原创 strlen三种不同的写法
strlen用来表示字符串的长度,区别于用关键字sizeof 计算字节大小strlen有三种写法1️⃣采用常规的count计数法int my_strlen(const char *str){ char *p = (char*)str; int count = 0; while(*p != '\0') { count++; ...
2019-08-23 23:11:11
461
1
原创 指针和数组,难倒了多少程序猿?
指针和数组是面试的时候遇到面试官问的频数最多的问题,但从事实上来说,他俩之间其实没多大关系,只不过数组有时候会隐式转成指针。先不要头疼,下面这道题如果清楚了,那么指针和数组基本就难不到你了!先来看一下这个经典的指针数组笔试题目,如下代码块:int main(){ char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char **c...
2019-08-19 23:11:16
237
原创 函数练习
创建一个整形的数组, 分别实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void init(int arr[], int len){ int i =...
2019-08-17 22:33:31
141
原创 C、Java、Python到底优劣在哪里?
CC是大部分转行编程或者是入门学习人员最开始接触的语言,虽说C语言在内存管理上存在严重的缺陷,尤其是‘\0’的设计被很多人吐槽是最大的败笔,但是毫无疑问,对那些要求最高的效率,良好的实时性,或者与操作系统内核紧密关联的程序来说,C仍然是很好的选择。现有的很多程序可以产生非常棒的C code,比如语法分析器、GUI Builder等,这时候C语言也是有吸引力的,因为你所需要编写的代码只是整个...
2019-08-15 22:57:39
2054
原创 杨辉三角
(杨辉三角)①最简单的方法(推荐)#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int main(){ int L = 0; printf("请输入你要打印的行数:"); scanf("%d", &L); printf("\n"); int arr[1...
2019-08-14 00:00:07
308
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人