自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于角色的权限控制 数据库设计

共5张表:1)用户2)角色3)权限   4)用户 -> 角色 映射 (多对多)5)角色 -> 权限 映射 (多对多)简化版可以省略步骤4, 即一个用户只能属于一个角色用户每次登陆时, 查询用户所属角色是否有某路径的权限, 通过拦截器拦截 ...

2018-12-04 22:07:17 595

原创 拦截器权限校验

1.自定义拦截器, 实现HandlerInterceptor接口判断用户是否登录; 判断用户是否有权限访问某url (基于角色的权限控制)/** * 登陆拦截,判断用户是否有权限 */@Component@Slf4jpublic class AuthorityInterceptor implements HandlerInterceptor { @Autowired...

2018-12-04 22:01:18 1102

原创 图片上传 (保存在指定路径)

图片上传 (保存在指定路径)效果如下:准备工作:1) 前端 html<div class="avatar_inner_content"> <div> 头像照片 <div id="upload_avatar_btn"> <input class="avatar_upload...

2018-12-04 21:49:00 10340 1

原创 随机生成图片验证码

springboot + jq 随机生成图片验证码 效果如下 1.前端 html<img id="random_pic" onclick="getVerify(this);" src="">2.前端 js $(function(){ //首次获取验证码 $("#random_pic").attr("src","/util/g

2018-12-04 20:57:39 1595 1

原创 String类的常用方法总结

常用方法equalsIgnoreCase();//无视大小写比较toLowerCase(); //变小写toUpperCase(); //变大写trim(); //去掉字符串两端的空格concat(); //连接字符串,和+一样(任何基本类型+""都是字符串类型)replaceAll("原子串","新子串") //把原内容全部替换成新内容以下方法必须

2017-11-21 20:39:08 2633

原创 String和StringBuffer的比较

相同点:它们都可以存储和操作字符串不同点:1.String类提供了数值不可改变的字符串,修改的只是它的一个副本   StringBuffer类可以对本身的对象进行修改String s1 = new String("123");String s2 = s1;s1 = s1.concat("456");System.out.println(s1);System.ou

2017-11-21 12:53:14 1373

原创 静态代码块、非静态代码块、构造方法的执行顺序

父类:FatherStaticDemopublic class FatherStaticDemo { { System.out.println("father普通代码块"); } static { System.out.println("father静态代码块"); } public FatherStaticDemo() { System.out.println("父

2017-11-11 18:49:17 978

原创 java面向对象的3大特征——封装,继承,多态

面向对象三大特征之一 ——封装封装的概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问封装的两大原则:    1)把尽可能多的东西藏起来,对外提供便捷的接口    2)把所有的属性藏起来封装的步骤:    1)修改属性的可见性:把属性设为private    2)创建公有的getter/setter方

2017-11-10 20:32:57 402

原创 抽象类和接口的异同

抽象类:有抽象方法的类必须定义成抽象类,抽象类可以没有抽象方法抽象类和接口的相同点:1.代表系统的抽象层,都不能实例化,都能包含抽象方法(用于描述系统提供的服务,不必提供具体实现)2.都可以指向子类(实现类)对象不同点:1.构造方法:抽象类可以有构造方法,接口中不能有构造方法2.变量:    1)普通变量:抽象类可以有普通成员变量,接口中的成员没有普通成

2017-11-10 19:57:47 2165

原创 类图的组成与关系

类图:+表示public,-表示private;#表示protected如果属性或方法具有下划线,则说明它是静态的描述信息使用两个尖括号 <<内容 >>类名为正体字是普通类,斜体字说明类为抽象类类图的组成:    类名,属性,方法类图的关系:    继承关系:空箭头+实线子类继承父类实现关系:空箭头+虚线实

2017-11-09 20:55:09 3642

原创 菱形继承

1:分析菱形继承的问题。 菱形继承:菱形继承存在的问题:A里面的数据B和C都有,存在二义性和数据冗余解决方法:虚函数关键字:virtual格式: class B: virtual public A {};class C: virtual public A {};2:剖析虚继承是怎么解决二义性和数据冗余的。在虚继承中,A中相同的部分

2017-07-22 18:02:58 383

原创 构造 和 拷贝构造 的优化处理

1.总结C++对传参和传返回值时构造的优化处理。 在同一个表达式中,函数参数和返回值都是传值的方式,会有构造函数和拷贝构造的合并优化问题2.完成下面的题目。  class AA {}; AA f (AA a) { return a ; } Test1中调用了2次AA的拷贝构造函数,1次AA的赋值运算符函数的重载。void Test1

2017-07-22 17:42:34 360

原创 单链表类:class Slist

//单链表//内容:默认4个,增删6个,打印,查找#pragma once#include#includeusing namespace std;typedef int DataType; //节点类,struct类默认公有struct SListNode{ //构造函数和成员变量都是公有的 SListNode* _next; DataType _data; //

2017-07-22 17:21:18 695

原创 双向链表类:class List

//双向链表//内容:默认4个,增删6个,打印,逆置,查找#pragma once#include#includeusing namespace std;typedef int DataType;struct ListNode{ ListNode* _next; ListNode* _prev; DataType _data; ListNode(DataType x

2017-07-22 17:17:28 1088

原创 顺序表类:class SeqList

//顺序表,不是字符串没'\0'//默认4个,增删6个,查找,打印,容量检测#pragma once#include #include using namespace std;typedef int DataType;class SeqList{public:SeqList():_arr(NULL),_capacity(0),_size(0){}~SeqList(){Rel

2017-07-22 17:11:26 1491

原创 String类深拷贝的现代写法和传统写法

1.传统写法:老老实实开辟空间并复制内容2.现代写法:借助中间变量,交换指针#includeusing namespace std;//String类传统写法namespace tradition{ class String { public: //构造 String(char* str = "") :_str(new char[strlen(str)

2017-07-13 15:25:16 565

原创 String类的增删查改(深拷贝,现代写法)

#include#includeusing namespace std;//String类,深拷贝的增删查改class String{public: String(char* str = "") { _size = strlen(str); _capacity = _size; //不含'\0' _str = new char[_capacity + 1]; s

2017-07-13 15:20:10 451

原创 String类引用计数的写时拷贝

写时拷贝:当一个对象被拷贝构造多次,在不改变内容的情况下,多个对象共用同一个空间。如果某个对象要改变内容,就要另外开辟一块相同的空间,然后改变这个对象的_str指针,再进行写操作#include#includeusing namespace std;//String类的浅拷贝增删查改(引用计数的写时拷贝)class String{public: String(c

2017-07-13 15:15:44 509

原创 C++动态内存管理

1:总结并剖析malloc/free和new/delete之间关系和差异。 1)他们都是动态内存管理的入口2)malloc要计算空间大小,返回值要强转  new自动计算字节大小,返回值是相应类型的指针3)malloc只开辟空间  new开辟空间+调用构造函数初始化  delete调用析构函数清理+释放空间4)malloc是库函数  new是操作符5)mall

2017-07-13 14:57:10 312

原创 类和对象基础知识

1.类和对象的基础知识定义:类就可以看做是对相似事物的抽象访问限定符:public,private,protect封装性:    1)良好的封装能够减少耦合。    2)类内部的结构可以自由修改。    3)可以对成员进行更精确的控制。    4)隐藏实现细节对象大小计算:只计算非静态成员变量(公有私有都算), 不算函数,和static变量,有内存对齐,空间换时间

2017-07-02 01:46:34 387

原创 C++入门基础知识

1.命名空间使用命名空间可以防止重名命名空间可以嵌套使用AA::a调用命名空间里面的变量使用using namespace AA;可以把命名空间的内容展开到全局域,直接调用2.C++基本输入输出流cout,cin,endl都是对象,在std域里cout是标准输出流对象,cin是标准输入流对象cout和cin可以不写变量的类型3.C++支持重载

2017-07-01 23:41:21 310

原创 日期类 class_Date

#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;class Date{friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d);public:

2017-07-01 21:41:54 752

原创 复数类:class Complex

#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;class Complex{public: //构造函数 Complex(double real = 0.0, double image = 0.0) :_real(real) ,_image(image) { ; } //拷贝构造

2017-07-01 19:48:37 1773

原创 求两个有序链表的交集和差集

typedef struct ListNode{ DataType data; ListNode* next;}ListNode;//交集(注意:list1和list2如果各有2个4,交集也会出现两次)ListNode* Intersection(ListNode* plist1, ListNode* plist2) { //判断不为空 if(plist1 == NU

2017-06-15 10:04:06 4122

原创 复杂链表的复制

复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。//ps: 复杂链表的结构 struct ComplexNode { int data ; // 数据 struct ComplexNode *next; // 指向下一个节点的指针

2017-06-15 09:00:06 430

原创 C语言实现单链表基础操作--增删查改

typedef int DataType;typedef struct ListNode{ DataType data; ListNode* next;}ListNode;注:1.以下函数都是针对无环单链表2.若可能修改到原链表头结点,都要传二级指针函数如下:ListNode* BuyNode(DataType x); //开辟新节点

2017-06-12 21:47:45 1005

原创 C语言实现单链表面试题--进阶(带环问题)

1.判断单链表是否带环?若带环,求环的长度?求环的入口点?2.判断两个链表是否相交,若相交,求交点。(假设链表不带环) 3.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】函数如下:int GetCycleLen(ListNode* plist); //求环长度(若无环则返回0)ListNode* IsCycle(ListNode

2017-06-12 13:18:11 778

原创 C语言实现顺序表

typedef int DataType;#define MAX 100typedef struct Seqlist{ DataType data[MAX]; int sz;}Seqlist;//以下都是传址,结构体传址效率高void InitSeqlist(Seqlist* plist); //初始化void PushBack(Seqlist* plist, DataT

2017-06-09 16:50:28 419

原创 C语言实现单链表面试题--基础篇

typedef int DataType;typedef struct ListNode{ DataType data; ListNode* next;}ListNode;ListNode* BuyNode(DataType x); //开辟新节点void PushBack(ListNode** list, DataType data); //尾插void PopB

2017-06-09 07:45:38 629

原创 三子棋游戏C语言模拟实现

game.h#ifndef __ADD_H__#define __ADD_H__#include#include#include#includevoid game();void com_move(char a[3][3]);void play_move(char a[3][3]);void init(char a[3][3]);void print(char

2017-04-29 15:48:06 840

原创 扫雷游戏C语言模拟实现

头文件game.h#ifndef __ADD_H__#define __ADD_H__#include#include#include#include//9*9棋盘,周围多一圈方便判断周围雷的个数#define ROWS_SET 9#define COLS_SET 9#define ROWS (ROWS_SET+2)#define COLS (COLS_SET

2017-04-27 17:31:13 842

原创 二分查找

#includeint binary_search(int arr[],int key,int left,int right){ while(left<=right) //循环 { int mid=left-(left-right)/2; //防止相加溢出 if (key>arr[mid]) {

2017-04-04 11:24:00 318

空空如也

空空如也

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

TA关注的人

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