自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 源码阅读:简单实现ArrayList中的主要方法

ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小两个字段:数组容器与元素的个数size /** * 字段:数组作为容器,与尺寸 */ Object[] elementData; int size;//区分数组中的属性length(容器的容量)构造方法:(指定元素数组初始化容

2017-02-18 22:42:38 280

原创 完全理解递归与分治:3种方法求数组最大值为例子

递归,分治是一种常见迭代方法。在二叉树遍历,线性表中遍历十分常见。递归、分治最核心的思想是 递推。 从外层–》内层,压栈,使得计算规模不断减小。 从内层–》外层,出栈,需要把计算结果传递给外层,做计算。编写代码请问下自己下面几个问题: 1、传入的参数是什么,是作为缓冲来接收吗, 2.、返回的结果是什么,这个结果需要带入到外层递推公式中。 3、外层函数主要包括: 递

2016-11-17 22:44:56 1457

原创 IntelliJ IDEA & Eclipse等web项目的乱码终极解决方法

关于IDE乱码基本上从MyClipse到如今的intellij IDEA都经常遇到。也踩了许多坑。网上各种答案也都尝试,但是都没有一个完全的解决放啊按。最近又遇到到了,于是做以下总结:关于乱码,是编码格式没有统一:在web项目中,主要编码格式改变的地方有:1,虚拟机加载文件编码,2,IDE的保存文件编码3,html文件,xml文件等外部保存的编码,4,web服务器入tomcat的编码现在知

2016-11-08 17:02:39 10021

原创 点赞实现[多对多的redis实现]

点赞实现:思路:每个question对应一个set();调用jedis.sadd(key,value); 由于question–赞userId是多对多的数据表结构,所以set结构扩展:每个文章有不同的标签,也可以用这种数据结构实现:业务层:@Serveice//用户userId,对某个评论或者回答进行了点赞public long like(int userId,int entityType,in

2016-10-18 16:50:58 3377

原创 异步实现消息队列

为什么要使用队列,什么情况下才会使用队列? 那些实时性要求不高,且比较耗时的任务,是队列的最佳应用场景。比如说我在某网站注册一个账号,当我的信息入库注册成功后,网站需要发送一封激活邮件,让我激活账号,而这个发邮件的操作并不是需要实时响应的,没有必要卡在那个注册界面,等待邮件发送成功,再说发送邮件本来就是一个耗时的操作(需要调用第三方smtp服务器),此时,选择消息队列去处理。 就

2016-10-18 16:28:29 816

原创 生产者消费者模式

该模式中含有的类及其相互关系:1、生产物品的类,该应该有自己的标示属性:class SteamBread { int id;//馒头编号 SteamBread(int id) { this.id = id; } public String toString() { return "steamBread:" + id; }}2、放东西的容

2016-10-18 09:07:20 256

原创 java设计模式:适配器模式

基本思想:类A 想要使用 类B中的一些方法。那么就可以用多个继承或者实现。关键步骤:[I]Target target=new Adapter();class Adapter extends Adaptee implements Target;这里Adapter具备了Adaptee和Target两种类的属性由于java是单根继承,所以只能用实现获取两个父类(接口)中的方法。模式中的角色:  1 目

2016-10-17 16:02:17 216

原创 常见SQL语句总结

由于常见的数据库创建,删除数据库;数据表的创建等操作都是可以在workbench中GUI实现,所以这里主要讲数据表的以下操作:1、数据表的查询 SELECT:SELECT column_name,column_nameFROM table_name[WHERE Clause][LIMIT N][OFFSET M ]常见的运用场景:比如:SELECT id,from_id,to_id,con

2016-10-11 16:13:15 267

原创 拦截器实现未登录跳转

下面用实际登陆跳转举例1、写自己的拦截器implements HandlerInterceptor,实现跳转去执行拦截内容并传,执行拦截之后的URI@Componentpublic class LoginRequiredInterceptor implements HandlerInterceptor {@AutowiredHostHolder hostHolder;//目前页面是需要登陆,如

2016-10-09 21:22:58 6706 1

原创 HandlerInterceptor拦截器

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAn

2016-10-09 09:29:44 427

原创 用HandlerInterceptor实现登陆状态确定

主要目的是:确定是用户是否登陆,通过每次请求检测ticket时候存在来实现。基本原理:注册拦截器+实现拦截器+设置线程副本变量一、注册拦截器:extends WebMvcConfigurerAdapter@Componentpublic class WendaWebConfiguration extends WebMvcConfigurerAdapter {@AutowiredPassport

2016-10-09 09:17:34 3227

原创 注册模块

注册模块基本原理:从/reglogin页面中提交username和password,此页面的form表单action–》/reg进入controller中方法,requestMapping(“/reg”),注册,addUser,和response.set(cookie),并model.addAtri(“msg”,msg). 最后跳转到/(主页)。这里设计3个urI,提交前:/reglogin,提交

2016-10-08 16:32:49 734

原创 StringUtil类的常见方法

org.apache.commons.lang.StringUtils中方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,例如,如果输入为null则返回也是null等,具体可以查看源代码)。 除了构造器,String

2016-10-05 10:31:06 454

原创 velcocity中toolbox中的日期格式化工具

经常会遇到时间在velocity中显示,默认并不是一个规范的时间: Thu Oct 13 20:35:55 CST 2016现在需要格式化成: ‘yyyy-MM-dd HH:mm:ss’需要做以下步骤:1在resource的目录中设置: toolbox.xml:代码如下:<toolbox><tool> <key>date</key> <scope>application</s

2016-10-04 21:32:11 345

原创 显示单元的封装类:ViewOfObject

ViewOfObject常见的运用是在:在网页的显示层中一个显示单元,可能由多个类的属性组成,这里采用ViewOfObject(map<String,Object>):把这些类用Object的map容器封装成一起。这里的Object,可以接受多中类型。这里运用到了父类声明可以接受子类的对象–即多态以下为示例代码:1、对象的定义:public class ViewOfObject { Hash

2016-10-04 21:04:45 261

原创 MVC中三层规范写法示例

经常会在web项目中用到MVC模式的写法C:控制层Controller,负责对请求的url分发到不同的网址,处理请求的入口。 M:规范数据数据成Bean,并负责调用数据库 V:只负责从数据库获取数据,并显示。此三层的设计充分得将数据显示与数据操作很好的分离开了,是一种极佳的面向对象的设计思路。下面把常见的MVC模式的规范写法总结如下:model:public class Question {

2016-10-04 20:54:50 3217

原创 MyBatis中动态SQL语句的书写

官网的动态SQL语句参考 动态SQL语句的书写 这里面的Dao.xml比如和java包中的对应的Dao路径一致:主要的步骤是: 1、在SQLWorkbench中创建SQL语句,并复制到SpringBoot的项目resource目录中DROP TABLE IF EXISTS question;CREATE TABLE `wenda2`.`question` ( `id` INT NOT N

2016-10-04 17:09:43 1942

原创 Junit中的Assert常见方法

在静态类junit.framework.Assert或者静态类org.junit.Assert中存在以下几个方法1.assertEquals(a,b)方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的equals()方法类似;2.assertFalse()和assertTrue()方法,用来查看变量是是否为false或true,如果assertFalse()查看的变量的值是false则测

2016-10-04 15:53:05 914

原创 【2】SpringBoot的MyBatis配置

SpringBoot的MyBatis配置基本上和JBDC原理一致。 传送门:JDBC的基本原理 下面演示一个例子。1、在pom.xml中加载驱动包:mysql-connector-java和Mybatis包:mybatis-spring-boot-starte此项的目的在于在pom中注册包: <dependency> <groupId>org.mybatis

2016-10-04 15:43:44 313

原创 JDBC连接数据的基本原理

JDBC连接数据的基本原理首先我们来看一下JDBC连接数据的基本原理:(分为7个步骤)1,加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机)2,提供JDBC连接的URL: •连接URL定义了连接数据库时的协议、子协议、数据源标识。 •书写形式:协议:子协议:数据源标识 协议:在JDBC中总是以j

2016-10-04 15:20:26 518

原创 (BFS)广度优先搜索例子:迷宫,寻找连块数

//广度优先搜索主要分成以下几块0、节点node结构体;1、matrix[][],原始矩阵2、增量数组X[],Y[] 实现该坐标的左右上下的更新坐标3、判断时候下一个元素需要入队列的函数4、记录元素坐标时候已经访问的inq[][];//广度优先 BFS//寻找代码块的个数struct Node_B{ int x, y;};Node_B node;int n, m;const int

2016-09-17 15:20:30 484

原创 二路-归并排序归纳

【递归二路划分 + 分割后的2个数组归并】//归并排序:递归二路划分+归并思想==二路,归并排序//函数的参数列表是:a,l,r;这是每次需要循环递归的初始条件 :数组(操作对象),两个端点//不需要初始化端点,端点由函数传入 //1、二分+ 2.两个左右两边的倒叙递归;由里向外void Two_divide_Merge_Sort(int a[],int left ,int righ

2016-09-08 11:43:08 375

原创 算法入门:双指针法

一、双指针法【例子1】 :求一个有序数组中和=8的下标。=====================================设置两个不同的指针 ,或者头,或者尾。在一个递增的序列中,。根据结果分类,说明指针的下一步应该怎么移动。结果分类: a[i]+b[j]==8则i++,j–都相互靠近; a[i]+b[j] < 8 ,需要移动指针i ,i++; a[i]+b[j] > 8

2016-09-08 10:22:26 7086

原创 二分查找模板总结(递归与循环遍历两个版本)

二分查找:思路: 在有序*数组***a[]中查找K 1,不断分割 。2 用中间值去比较。====================尝试比较下面两种,得到递归函数的写法=========【递归版本】 int BinSerch2(int a[], int k ,int left ,int right){ int mid = (left + right) / 2;//1.不断分割 if (

2016-09-06 23:40:51 1032

原创 选择排序初步理解

//选择排序初步理解0,循环n趟。下面1,2是循环体: 1,从没有排序中找出最小值 。 minIndex = i;//待交换的索引:也就是从List[i+1]--List[n-1]处找到最小值索引,并赋值给minIndex 2, 将当前待交换的数(nIndex=i)与min交换void selcetSort(){ int a[6] = { 3,

2016-09-06 10:40:06 238

原创 递归调用理解【含有示例代码】

1 每一级的函数调用都有自己的局部变量.2 递归函数中,位于递归调用语句后的语句的执行顺序和各个被调用函数的顺序相反.    即位于递归函数入口前的语句,由外往里执行;    位于递归函数入口后面的语句,由里往外执行。3 虽然每一级递归有自己的变量,但是函数代码并不会得到复制.4 递归函数中必须包含可以终止递归调用的语句.“` int region(int a[], int cur

2016-09-05 21:57:39 413

原创 PATB1039: 到底买不买

PATB1039: 到底买不买 【经典】【思路】:在集合1中 找出其个数 字符都小的集合M,首先hash s1 记录次数 然后对照 s2如果有,就hash–;if(hash<0)则说明缺少了【参考答案】//这是一道十分典型的 在集合1中 找出其个数 字符都小的集合M//首先hash s1 记录次数 然后对照 s2如果有,就hash--;if(hash<0)则说明缺少了void B1039(){

2016-09-05 20:28:30 249

原创 PATB1047: 输出PATest

PATB1047: 输出PATest【思路】:设置字典为PATEST,同时设置HAsh来记录dict的次数 ,两者是一一对应的;两个数组的遍历 两个for循环即可, for (int i = 0; i < s.size(); i++) { for (int j = 0; j < 6; j++) { if (dict[j] == s

2016-09-05 20:28:02 242

原创 PATB1029: 字符统计

PATB1029: 字符统计【思路】:HASH经常用来求两个集合的交 集 补集等 。去重小能手1首先对目标集合中的元素进行HASH,这里面试大小写不区分,且只需要输出小写,所以统一转换成小写isalpha(s[i])判断是字母吗2然后对元集合进行过滤性输出 求最大值 老方法 还是设置一个maxID ,这里需要注意的是。索引需要换成char类型的输出printf("%c %d", maxId +'a

2016-09-05 20:27:27 317

原创 PATB1033: 旧键盘打字

PATB1029: 旧键盘打字【思路】:HASH经常用来求两个集合的交 集 补集等 。去重小能手1首先对目标集合中的元素进行HASH,这里+ 则 所有的大写字母over ,一个字母则小写一起go die 数字无影响的2然后对元集合进行过滤性输出【知识点】fill(a,a+5,true)isupper()判断字符是大写字母吗【参考答案】//B1033旧键盘打字void B1033(){ st

2016-09-05 20:26:54 457

原创 PATB1029: 旧键盘

PATB1029: 旧键盘【方法二】【思路】:HASH经常用来求两个集合的交 集 补集等 。去重小能手首先对目标集合中的元素进行HASH,这里需要统一大小写‘: b[i] = towupper(b[i]);【知识点】然后在原来的集合中找 没有被HASH化的元素 输出 并HASH此字符,以实现去重,输出的时候需要判断,没有被HASH化才可以被打印 if (hash_T[a[i]]

2016-09-05 20:26:17 321

原创 PAT分类解析专辑说明

这个专辑主要是程序设计刚刚入门时候的做题心得与积累 目前已经完成的是入门模拟 和字符串操作 在PATB中两部分总共占有20道题,(目前总55题),基本分数为 15 ,20分 是简单题目。 后面又是将对每个题目的打上标签 ,以便于针对性练习

2016-09-04 20:25:48 247

原创 PAT B 简单思维模板

2016-09-04 20:17:28 217

原创 PATB1024:科学记数法

PATB1024:科学记数法【思路】: 输出的字符串由几部分组成 通过 i str[i] 来索引输出字符串 每部分 需要满足什么条件 才输出 常用的是 str[i] pos pos-3 表示长度 exp为字符–》转换成数字【知识点】 每部分 需要满足什么条件 才输出 for (int i = 1; i < pos; i++)//也是分成3 部分 思考每部分

2016-09-04 20:04:55 329

原创 PATB1014:福尔摩斯的约会

PATB1014:福尔摩斯的约会【思路】: 输入 四个字符串 ,分别求其第一个满足条件的字符。用Hash输出【知识点】 求第一个满足条件的字符用 for break及时退出循环 一个字符串中分两次不同的的遍历 来判断的不同的条件 用 i 来连接 **for (i = 0; i < size1; i++)** { if (S1[i] == S2

2016-09-04 20:04:13 387

原创 PATB1048:数字加密

PATB1048:数字加密【思路】: 输入 循环 判断,只需要对每个元进行一次操作即可【知识点】 杂类用hash表示char has_z[3] = { 'J', 'Q', 'K' };【知识点】 对于c的字符数组可以用reverse来进行字符数组的反转,本题由于是字符到bit的操作,所以字符反转是常规思路reverse(a, a + strlen(a));reverse(b, b +

2016-09-04 20:03:47 306

原创 PATB1031:查验身份证

PATB1031:查验身份证【思路】: 输入 遍历每个字符 分类 不符合的用flag标记 通过标记输出结果 1、含有X的 2、不含有X 但是验证不通过的 都是用标记flag 3、通过标记输出结果【知识点】 如果中途break j < N ,通过循环变量判断来实现分类> ` for (j = 0; j < 17; j++)//遍历一个字符串完成

2016-09-04 20:03:10 405

原创 PATB1002:写出这个数

PATB1002:写出这个数【思路】: bit[index] 用hash有条件的输出 。思路和上题目基本类似【参考答案】#include <cstdio> #include <cstring> //位--》数字--》位:str[i]-'0',除基取余,bit[num++]保存,然后输出,i=[num-1,0:1],if(i>0) 打印“ ” else打印“\n”char strNum[110];

2016-09-04 20:02:28 697

原创 PATB1021:个位数统计

PATB1021:数 的bit[]统计【思路】: bit[index] 用hash有条件的输出【参考答案】#include <cstdio> #include <cmath> #include <cstring> //count[str[i]]++,索引也是变量,统计1个位数void tongjisuzhu(){ char str[1010]; gets(str); int len

2016-09-04 20:02:06 262

原创 PATB1006:换个格式输出整数

PATB1006:数字转换成bit[ ]的数组【思路】: bit[count++],获取数的每个位 数—数组,count 4 3 2 这样的数组打印需要逆序输出【知识点】 bit[count++],获取数的每个位 数—数组,countwhile (n>0) { bit[count++] = n % 10; n /= 10; }

2016-09-04 20:01:07 218

空空如也

空空如也

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

TA关注的人

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