自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android开发之NDK入门

本文主要讲述了如何使用AndroidStudio快速进行NDK的入门。

2024-01-18 17:18:19 1008

原创 Android桌面长按图标快捷方式——Shortcuts

Android创建桌面图标ShortCuts

2023-04-18 16:56:36 1779

原创 Didn‘t find class “androidx.core.app.CoreComponentFactory“核心库中类加载失败

Didn't find class "androidx.core.app.CoreComponentFactory"

2023-03-28 14:11:16 4829

原创 ViewPager的切换动画

ViewPager切换动画

2023-03-23 17:55:46 701

原创 AndroidGradle基础——渠道化配置

Android开发之Gradle简单的渠道化配置

2023-02-14 16:27:33 640

原创 Android 开发之Gradle基础

Android Gradle的基础以及解决依赖冲突、依赖传递

2023-02-09 17:58:13 1098

原创 RecyclerView中的ItemDecoration的使用

RecyclerView的自定义ItemDecoration实现分组

2023-02-08 10:32:57 437

原创 Android 桌面小组件

Android简单开发的桌面小组件

2022-10-26 19:49:50 4839

原创 使用两个栈来实现队列的push和pop操作(Java)

题目分析栈:基本数据结构,满足先进后出特性。队列:就像排队一样,先进先出。思路:根据栈的特性和队列的特性,利用一个栈来保存数据,一个栈来辅助数据的push操作。代码实现package stackQueueAlgorithm;import java.util.Stack;public class TwoStackToQueue { Stack<Integer> stack1 = new Stack<>(); Stack<Integer> s

2020-09-10 16:15:01 574

原创 根据先序遍历序列和中序遍历序列重构二叉树Java实现

问题描述分别给你先序遍历的数组和中序遍历的数组,要求你构建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。问题分析二叉树的遍历顺序:先序:根左右中序:左根右后序:左右根由先序遍历序列可以知道对应的根节点,而根节点在中序遍历序列中的位置就将左子树和右子树分割开来了。然后依次对左子树与右子树进行递归构建二叉树。代码实现/** * public clas

2020-09-10 15:48:23 410

原创 Java线程同步器之CyclicBarrier以及原理简单分析

功能它可以让一组线程全部达到一个状态之后全部同时执行。回环屏障回环:所有等待的线程执行完毕,重置CyclicBarrier状态后它可以被重用。屏障:线程调用await方法后会被阻塞,这个阻塞点称为屏障点,所有子线程都调用了await方法之后,子线程就会冲破屏障点,继续运行。案例package concurrentProgramming;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.Executor

2020-09-10 13:50:52 136

原创 Java并发包中线程同步器之CountDownLatch的简单使用及原理简介

使用背景在开发过程中经常会在主线程中去开多个线程并行执行任务,并且主线程需要等所有子线程执行完毕汇总的场景。CountDownLatch在CountDownLatch出现之前一般都采用join()方法来实现,但不够灵活。下面来一个使用案例:package concurrentProgramming;import java.util.concurrent.CountDownLatch;public class CountDownLatchTest1 { //创建一个CountDown

2020-09-10 10:07:31 125

原创 Java分治算法经典案例之汉诺塔

分治算法思想当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。分治法解题步骤(1)分解,将要解决的问题划分成若干规模较小的同类问题;(2)求解,当子问题划分得足够小时,用较简单

2020-08-12 16:54:13 392

原创 Java设计模式之工厂模式(简单工厂、工厂模式)

简单工厂模式以小汽车为例实现简单工厂模式定义小汽车的接口,由于工厂模式仅关系对象的创建,所以无需定义具体方法。package com.xzy.simpleFactory;public interface ICar { //定义小汽车接口}package com.xzy.simpleFactory;public class UpCar implements ICar { //高档汽车的实现}package com.xzy.simpleFactory;public

2020-08-12 15:25:51 121

原创 mybatis之动态sql——if、where、foreach、choose、set

目的简化sql语句的拼串操作。if语句 <select id="findAllEmp" resultType="com.xzy.bean.EmpInfo"> select * from emp where /*test="" 编写判断条件, id!=null :取出Javabean属性当中的id值,判断是否为空 */ <if test="id!=null"> id

2020-08-05 22:13:47 158

原创 给定一个数组和滑动窗口的大小,找出每一个滑动窗口里数值的最大值

通过比较每一个窗口的元素import java.util.*;public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size){ ArrayList<Integer> result = new ArrayList<Integer>(); //边界检查 if(num.length<=0 || size &l

2020-07-30 22:17:29 356

原创 使用Idea和maven搭建Mybatis框架以及基础测试

创建maven工程目录结构导入相关的jar导入mybatis和mysql驱动相关的jar<dependencies> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>my

2020-07-30 14:42:32 236

原创 SpringMVC获取请求参数、请求头、cookie的信息

默认方式获取请求参数直接给方法入参上写上一个名字和请求参数名相同的变量。这个变量就来接收参数的值。@Controllerpublic class ParamController { @RequestMapping("/handle01") public String handle01(String username){ System.out.println("获取到的请求参数是:"+username); return "success"; }

2020-07-29 19:21:33 662

原创 SpringMVC实现创建一个支持REST风格的请求处理并解决405

maven的依赖 <!--导入Spring的核心jar包--> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-

2020-07-29 00:02:27 179

原创 Spring整合SpringMVC的步骤——helloWord测试以及运行流程

创建maven工程导入相关jar包 <!--导入Spring的核心jar包--> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId

2020-07-28 22:32:40 134

原创 Spring声明式事务:环境搭建、配置文件的编写以及测试修改两张表(Idea)

环境搭建数据源:c3p0数据库:Mysql8数据表:任意两张表即可,sql是修改操作的创建Maven项目导入相关依赖 <!--导入Spring的核心jar包--> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework&

2020-07-26 22:43:11 152

原创 SpringAOP使用:为一些方法添加日志,实现方法动态切入,注解以及配置文件实现

写配置将所有的组件加入到ioc容器中告诉spring那个是切面类切面类的某个方法何时运行开启基于注解的AOP模式

2020-07-26 12:39:03 299

原创 Spring引入外部属性配置文件,整合c3p0数据库连接池

创建maven工程,导入jar包 <!--导入Spring的核心jar包--> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId&g

2020-07-25 19:58:59 231

原创 SpringIOC容器与如何注入组件以及给各种各样的复杂类型赋值

什么是Spring配置文件Spring 配置文件是 XML 文件。该文件主要包含类信息。它描述了这些类是如何配置以及相互引入的。但是,XML 配置文件冗长且更加干净。如果没有正确规划和编写,那么在大项目中管理变得非常困难。什么是springIOC容器Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指令。该元数据可以通过

2020-07-25 19:17:20 138

原创 排序算法之插入排序(Java)

算法原理插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。基本思想插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确

2020-07-25 12:53:16 160

原创 排序算法之快速排序(Java)

算法原理快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。排序流程快速排序算法通过多次比较和交换来实现排序,其排序流程如下:(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。(2)将大于或等于分界值的数据集中到数组

2020-07-24 20:39:08 87

原创 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

分析因为数组已经有序,我们可以发现,靠近两边的符合条件的值肯定是乘积小的。import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list = new ArrayList<>(); //检查边界

2020-07-24 20:19:03 332

原创 逆置一个英语句子

题目例子: “.you love I”输出:“I love you.”思路将字符串按照空格分隔成数组。将数组顺序入栈。将栈中数据顺序出栈并添加到字符串中,用空格分隔。去掉多余空格。import java.util.*;public class Solution { public String ReverseSentence(String str) { //边界检查 if(str == null || str.trim().length()==0)

2020-07-24 14:47:28 280

原创 单链表实现约瑟夫环

题目背景这是一个残酷的故事:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这

2020-07-24 14:15:50 136

原创 用数组模拟栈结构

栈的特点(Stack)是一种线性存储结构,它具有如下特点:栈中的数据元素遵守”后进先出”(First In Last Out)的原则,简称FILO结构。限定只能在栈顶进行插入和删除操作。数组实现package stack;/** * 使用数组模拟栈 * top :表示栈顶,初始化默认为-1 * 入栈:top++ ,stack[top] = data * 出栈:val = stack[top --] ,return val */public class ArrayStack {

2020-07-24 10:52:08 111

原创 不用库函数将字符串转换为一个整数

题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入+21474836471a33输出21474836470来源:牛客网public class Solution { public int StrToInt(String str) { if(str == null || str

2020-07-23 19:22:54 280

原创 找出数组中那个第一次重复的数字

题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。(来源: 牛客网.)先排序,在找重复的手写排序,较为麻烦public class Solution { public boolean duplicate(int numbers[],int length,int [] du

2020-07-23 18:17:18 922 2

原创 Java四种多线程实现方式以及守护线程

线程生命周期当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5 种状态。尤其是当线程启动以后,它不可能一直"霸占"着 CPU 独自运行,所以 CPU 需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。继承Thread类Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法

2020-07-22 20:20:43 417

原创 HashMap,底层你懂了吗?

环境本次源码根据JDK1.8分析HashMap声明public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {HashMap<K,V>继承了AbstractMap<K,V>,并且实现了Map<K,V>, Cloneable, Serializable接口,表明HashMap可以复制,也可

2020-07-22 13:39:16 93

原创 Java中对象的复制:深复制和浅复制

简介将一个对象的引用复制给另外一个对象,一共有三种方式。第一种方式是直接赋值,第二种方式是浅拷贝,第三种是深拷贝。以上三种方式的目的就是进行对象的拷贝。直接赋值直接赋值。在 Java 中,A a1 = a2,我们需要理解的是这实际上复制的是引用,也就是说 a1 和 a2 指向的是同一个对象。因此,当 a1 变化的时候,a2 里面的成员变量也会跟着变化。上代码: @Test public void test1() { Person p1 = new Person("我

2020-07-22 11:46:12 142

原创 选择排序(Java)

算法思路首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。稳定性选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例

2020-07-22 10:54:32 103

原创 Java冒泡排序以及一种优化方式

冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。(来源:百度百科)原理冒泡排序算法的原理如下:比较相邻的元素。如果

2020-07-21 14:00:51 119

原创 Java反射初体验

要说Java反射,首先说一下动态语言,了解了动态语言的特性方便我们更好的理解反射。动态语言动态语言是指在运行期间内可以改变其结构的语言,例如新的函数可以被引进,已有的函数可以在结构上发生变化。像典型的C#、JavaScript、Python等。优点:方便阅读,清晰明了。缺点:不方便调试。Java并不是动态语言,但有了反射机制,Java可以称之为半动态语言。反射在 Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个

2020-07-21 13:05:56 90

原创 Redis简介及其基本数据类型

Redis简介Redis是一个开源的key-value存储系统,和Memcached类似,它支持更多的value类型,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希)。他们都支持pop()、push()以及add()或remove(),并且这些操作都是原子的。另外,Redis支持各种各样的排序。为了保证效率,Redis也是将数据缓存在内存中,并且提供了持久化机制RDB和AOF,并且也实现了主从复制。Redis默认16个数据库,下标从0开始(默认使用)。R

2020-07-20 23:53:17 97

原创 Servlet抽取BaseServlet

servlet抽取在JavaWeb编程的时候,通过servlet进行请求处理的时候,都会继承HttpServlet类重写doGet()或者doPost()方法处理相应的请求,那么就会出现很多的相同部分,如编码集的设置等,那么如何进行这些代码的抽取呢?Java给我们提供了一个很好的方法,那就是反射。你只需要将要调用的方法指定给BaseServlet,实际处理请求的类继承基础类,进行相应的请求处理。BaseServlet将会通过反射的方式调用该方法。BaseServlet的抽取public abstra

2020-07-20 21:52:56 248 1

空空如也

空空如也

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

TA关注的人

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