java
hdu_sds
这个作者很懒,什么都没留下…
展开
-
redis之缓存查询优化技术
redis本质上是key-value的nosql数据库,可以进行数据存储,并且可以按照缓存更新策略,一般是影响多少个key时做一次缓存操作或者一分钟几分钟来进行缓存更新等,这是由redis的缓存策略RDB(记录数据以压缩二进制方式存储在rdb文件当中)或者AOF(通过记录数据的执行过程,即指令到aof文件中来进行缓存)来确定的,一般redis作缓存的方式有:单机版redis sential哨兵模式 Cluster 集群模式sential哨兵模式 :假设有两台物理机作为redis,一个为master原创 2020-08-10 20:38:46 · 481 阅读 · 0 评论 -
CDN静态文件部署
------------------------------------静态资源部署cdn分发网络的引入-----------------------------1.在获取前端页面时,我们知道是先加载静态资源,后面通过ajax请求来获取商品详情页信息来进行渲染页面的过程,任何一步没做到位都会拖累整站的QPS,TPS的响应,未将静态资源加载到cdn的情形下,TPS700左右,且平均响应时间也在300多,cdn作为前端静态资源请求的中间层节点,它充当者用户客户端访问的服务端,同时也是后端服务端的客户端,它需原创 2020-08-09 23:00:09 · 2932 阅读 · 0 评论 -
LRU缓存淘汰策略实现
一般来说,对于经常被访问的数据,希望可以快速的返回给访问者,采用内存进行缓存就是很好的方式,直接访问内存中已缓存的数据可以被更快的被访问到,分布式中常用的缓存Ehcache,Redis等等;下面介绍几种缓存中常用的缓存淘汰策略: FIFO:First In First Out,先进先出:判断存储时间,排队伍尾部(长时间未用)的先被淘汰; LFU: Least Frequently Used,最近最少使用,被使用次数最少的缓存先被淘汰; LRU:Least Recently...原创 2020-08-07 18:13:08 · 273 阅读 · 0 评论 -
Java之反射机制及原理
- 反射是框架设计核心,反射的基本概念:将类的各个部分封装成对象,从而在程序运行时操作这些对象,便于程序解耦和扩展;- 在java中运用反射的原理需要下面三个部分: - 定义一个class对象在java文件中并通过javac命令编译成.class文件(字节码文件) - 通过ClassLoader进行字节码文件的加载,封装成Class类对象的各个功能方法,以便调用; -Class类对象是用来描述加载的字节码文件的信息,主要包括类的成员变量、类的构造方法、类...原创 2020-08-01 19:02:21 · 116 阅读 · 0 评论 -
多线程之交替输出
三个交替输出abc利用一个标记flag:当flag=1时打印a,当flag=2时打印b,当flag=3时打印c,并且在调用打印方法时打印完还需传递flag的下一个值,即a(1)->2,b(2)->3,c(3)->1,这里使用wait ,notify的有条件休眠来控制程序的进行,使用wait和notify的配套使用来进行交替打印:wait: 调用该方法会使当前线程进入阻塞状态并释放了当前的锁资源给其他线程去使用,是object类下的方法;notify:调用该方法可以唤醒单个休眠原创 2020-07-19 17:32:07 · 609 阅读 · 2 评论 -
多线程之生产者消费者模型Java实现
- 生产者消费者模型常见于消息队列中,由一个或多个线程进行消息的生成并放入到队列当中,根据先到先消费的策略,由消费者从队列中取出消息并进行消费,所以一般生产的消息从队尾加入,需要消费的消息从队头取出,队列的消息存满了就需要生产者进行等待,队列的消息为空时需要消费者进行等待:代码实现:在消费者等待生产时采用Object的wait()方法,进行有条件的等待while,一旦不满足就唤醒全部的生产者同样等待队列的元素在有位置的情形进行生产,队列满了就需要该线程进入休眠并有条件的...原创 2020-07-16 22:30:58 · 232 阅读 · 0 评论 -
Base_seckill _project_question
1.开发环境:后端基于idea2020版 Springboot2.0.5 jdk 1.8 Maven 3.6.3 Mybaits mysql5.5;前端是基于Hbuilder开发环境,采用bootstrap的metroic框架快速开发小页面1.用户验证码的获取:通过random产生一个五位数的随机数,并转化成String类型用户验证码与用户手机的绑定:使用httpsession的方式将手机号与验证码做一个绑定,通过向容器注入HttpServletRequest的对象即可拿到httpsessio原创 2020-06-29 22:37:59 · 98 阅读 · 0 评论 -
Base_seckill _project
1.电商秒杀项目简介 本项目是慕课网上的秒杀项目业务逻辑的基础版,后面还要加上性能优化,如项目中后期还针对高并发情况需要实现了系统缓存、降级和限流和支付通用功能等。本系统是使用SpringBoot开发的限时抢购秒杀系统,实现基本的登录、查看商品列表、秒杀、下单及其它异常的处理模板等功能。用户首先需要进行注册账号,通过随机数生成的校验码对手机账号进行校验,并将用户输入的密码进行加密,将密码和个人账号进行分表建库,注册完则需要进行登录,在登入页面未找到用户信息需重新注册,完成用户登录校验。...原创 2020-06-28 16:25:08 · 146 阅读 · 0 评论 -
树的三种遍历非递归操作
1.前序遍历前序遍历是:根节点-左节点-右节点;和深度优先遍历一致,这里可以参照之前写的 BFS(广度优先遍历)和DFS(深度优先遍历)其文章链接:https://blog.csdn.net/sdshdutx/article/details/1067218272.中序遍历中序遍历是:左子树-根节点-右子树(每一个子树都满足这种访问方式),如下所示:输出为5->2->6->1->4那么我们在经过某一个子根节点时前面节点不能释放, 因为需要遍历到其底部,才算完成左边子树的遍原创 2020-06-13 20:25:23 · 1660 阅读 · 0 评论 -
BFS(广度优先遍历)和DFS(深度优先遍历)
1.BFS:广度优先遍历广度优先遍历,指的是从图的一个未遍历的节点出发,先遍历这个节点的相邻节点,再依次遍历每个相邻节点的相邻节点。树的广度优先遍历动图如下,每个节点的值即为它们的遍历顺序。所以广度优先遍历也叫层序遍历:先遍历第一层(节点 1),再遍历第二层(节点 2,3,4),第三层(5,6,7,8),第四层(9,10)。广度优先遍历要用队列来实现,我们以下图二叉树为例来看看如何用队列来实现广度优先遍历。步骤:首先将根节点(1)压入队列,然后判断队列是否为空,(作为循环输出的功能) :{1原创 2020-06-12 19:05:13 · 897 阅读 · 0 评论 -
KMP算法之字符串匹配
暴力匹配通过起始匹配的字符开始继续匹配,若匹配成功,则长度等于str2的长度,否则回到匹配的第二个位置重新开始package Kmp;public class Baolipi { //暴力匹配算法进行字符串匹配 public static void main(String[] args) { String str1 ="明天你好吗 明天你好挖 明天你好明天你好哈哇哇哈"; String str2="明天你好哈"; //匹配的起始下标是16 System.out.print..原创 2020-05-29 22:44:56 · 161 阅读 · 0 评论 -
背包问题(0-1)-动态规划
0-1背包问题 >>背包问题是指一个给定容量的背包,有若干价值和重量的物品,选择物品放入背包使其价值最大,这里每个物品最多只能挑选一件物品,因此是0/1背包问题。源代码:根据上面的表格所得可知其价值计算公式,然后编写代码1.只计算出最大价值package DynamicPromise;public class Package01 { //可以寻求0/1问题的最值解 public static void main(String...原创 2020-05-29 17:50:34 · 214 阅读 · 0 评论 -
数据结构之二叉树原理和实现
二叉树的概念前序遍历:(1)先输出当前节点,初始的时候是root节点(2)如果当前左子树不为空,则递归继续前序遍历(3)如果当前右子树不为空,则递归继续前序遍历中序遍历:(1)如果当前左子树不为空,则递归继续中序遍历(2)输出当前节点(3)如果当前右子树不为空,则递归继续中序遍历-后序遍历:(1)如果当前左子树不为空,则递归继续后序遍历(2)如果当前右子树不为空,则递归继续中序遍历(3)输出当前节点...原创 2020-05-27 20:25:02 · 432 阅读 · 0 评论 -
八大基本排序算法
1.希尔排序是插入排序的一种改进,针对插入排序移动的数据元素过多,提出一种按间隔大小的增减来进行比较排序从而实现从小到大的排序。 插入排序:对头两个元素进行比较排序,将列表的第三个值插入到头两个值的恰当位置,如此第四个元素插入到前三个元素的恰当位置,依次下去进行排序。 1.1优点:希尔排序通过加大排序元素之间的间隔,并对这些间隔的元素进行插入排序,从而使得某元素可以进行大幅...原创 2019-10-15 17:40:04 · 167 阅读 · 0 评论 -
递归和回溯算法的使用
回溯算法其实就是把所有的结果进行枚举,通过设定条件函数来搜索目标解做搜索、回溯问题的套路是画图,代码其实就是根据画出的树形图写出来的剪枝函数:描述合法解的一般特征,避免搜索不合法解条件:每一步搜索的解必须符合条件,其所有可能的解可以由空间状态树进行描述记录:当每次达到结束条件时对结果进行保存,通常是全局变量并作为传递参数这里以力扣39:组合总和,liweiwei1419 的解答过程进行描...原创 2019-12-04 20:09:02 · 116 阅读 · 0 评论 -
数据结构之哈希表和应用
**哈希表**哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。一个实际需求:有一个公司,当有新员工来入职时,需要录入该员工的信息(id, 性别, 年龄, 地址…),当输入该员工的id时,可以找到其 所有信息,要求不使用数据库,尽量节省内存,速度越快越好==>>哈希表(散列)其实现的思路是数组+链表:通过初始化一个链表数组来存放每一个链原创 2020-05-20 21:14:02 · 498 阅读 · 0 评论 -
四大基本查找算法
查找算法主要有下面几种顺序查找/线性查找二分查找/折半查找插值查找斐波那契查找1.线性查找就是根据对应的元素在其遍历数组中比较,找到则返回,这里便不列出,贴b站老师的图,如下:2.二分查找首先将其元素进行排序,使得元素呈顺序出现,定义一个区间[left,right]取中值来进行查找,left = 0, right = length-1;如果该元素比其(目标值)小就向右 left = middle 进行缩小范围查找,如果中间的元素比其(目标值)大就向左 right =原创 2020-05-19 15:24:14 · 1306 阅读 · 0 评论 -
数据结构之栈及其应用
1.栈的构建栈的思想是先进后出,后进先出的模式,类似向容器加东西和向容器取东西1.1基于数组的栈构建,主要由栈顶指针来控制package stack;public class Stack {private long[] arr;private int top;//默认的构造方法public Stack() { arr = new long[20]; top = -1;}//...原创 2019-10-08 21:46:48 · 226 阅读 · 0 评论 -
数据结构之双向链表和约瑟夫问题(单向环形链表)
双向链表的定义:双向链表的实现1.代码如下:注意删除时考虑最后一个节点的空指针异常 package List; public class doublelinkedlistdemo { public static void main(String[] args) { //测试 HeroNode2 hero1 = new HeroNode2(1,"宋江","及时雨"); HeroNode2 hero2 = new HeroNode2(2,"卢俊义","玉麒麟原创 2020-05-16 17:02:59 · 156 阅读 · 0 评论 -
数据结构之链表构建及应用
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),相当于车厢与单向车链组成:1.定义单链package List;//链节点,有数据域和指针域构成public class Node { public long data; //数据域 public...原创 2019-10-09 20:13:15 · 397 阅读 · 0 评论 -
Springmvc商品列表加载
从springmvc入门处copy工程,然后右键项目,点击Properties,找到Web Project setting后在Content-root改名字;*目录结构:1.1创建Item的pojo,定义商品传入对象,使得其以列表形式展示package com.itheima.springmvc.pojo;import java.util.Date;//商品数据模型public class Item { // 商品id private int id; // 商品名称 priva原创 2020-05-11 17:10:13 · 189 阅读 · 0 评论 -
Springmvc入门采坑
*编译环境:Jdk:jdk1.8EclipseTomcat:apache-tomcat-7spring:4.2.4注意:web.xml会在第一行报错,这是你的jar包版本与编译环境不一致,报no-Mappering…url是没有找到Controller注解下的类,也就是没有注入到容器中,调bug可以在左下角copy trace来看报错日志,以及在浏览器访问时,注意url的写法是否正确1.开发步骤1.1首先将所有的编码方式调成UTF-8编码方式,否则找不到映射文件,还以为配置写错了。1.2.创原创 2020-05-11 16:00:54 · 196 阅读 · 0 评论 -
多线程基础入门简介
Java多线程入门 Java虚拟机允许应用程序并行地执行多个线程,多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。多线程:一个进程有多个线程(效率高,安全性低)单线程:一个进程有一个线程(安全性高,效率低)进程:当前正在运行的程序,指一个程序在内存中的执行区域线程:是进程中的一个执行单元,或者是执行路径原创 2020-05-09 22:31:48 · 95 阅读 · 0 评论 -
手写JDK锁及Synchronized源码分析
1.CAS底层原理分析CAS全称为Compare-And-Swap,CAS并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用Unsafe中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操作。再次强调,由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行...原创 2020-05-07 22:18:32 · 133 阅读 · 0 评论 -
Java database connectivity (jdbc)
JAVA对myqsl数据库操作的驱动JDBC学习1.首先构建了数据库dat1,建立了表product,表结构如下2.采用jdbc驱动操作来进行对数据库的链接与查询等表的结构如下:表的数据如下:下面给出代码(导入相应的包和对数据进行链接) package heimajd;import java.sql.Connection;import java.sql.Driver;impo...原创 2020-01-03 17:42:40 · 157 阅读 · 0 评论 -
34题:在排序数组中查找元素的第一个和最后一个位置
1.题意如下,转载力扣上面的34题,该数组本身是升序的;很多人用二分查找法,我这里简单实现注意:当元素没有时返回【-1,-1】,当自有一个元素时,该元素下标既是第一个也是最后一个class Solution { public int[] searchRange(int[] nums, int target) { int start1 = -1; int e...原创 2019-11-22 10:56:47 · 200 阅读 · 0 评论 -
利用集合模拟斗地主的过程
1.将正确的牌序和牌面存入双列集合中,同时将牌序存入单列集合中;主要过程为:牌库的建立,洗牌操作,发牌操作,看牌操作,** 发牌时的牌序是将每次发放的牌序存入TreeSet中,在存放时自动根据底层的二叉树算法来对存入数字进行排序;** 看牌时,将看牌操作写成通用方法调用,根据自己单列集合的牌序来作为牌库双列集合的Key获取双列集合对应的Value,从而实现看牌的牌面从小到大排列;//模...原创 2019-11-21 15:58:13 · 231 阅读 · 0 评论 -
四数之和(集合)
1.给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/4sum代码:impo...原创 2019-11-18 22:23:56 · 131 阅读 · 0 评论