自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tinyVampire的博客

不积跬步无以致千里,不积小流无以成江海。

  • 博客(162)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 服务器支持访问静态文件的几种方式:Spring、Tomcat、Vue

如何在搭建的服务器中添加一个静态文件,然后在浏览器中访问呢?Spring-Thymeleaf:前置条件,Spring-Thymeleaf项目已经搭建好了。在static目录下新建abc.txt文件,如下图:然后在浏览器中打开http://localhost:8201/abc.txt即可。项目地址:https://gitee.com/tinytongtong/spring-thymeleafTomcat:前提条件,Tomcat服务搭建好了。找到Tomcat的安装目录,将abc.txt文件赋

2021-09-24 13:17:37 17 2

原创 SpringBoot & Thymeleaf项目实战

文章目录web模板语言-thymeleaf项目启动,及各个页面入口项目地址第一步项目运行:访问接口-浏览器直接访问访问web页面访问静态页面:访问动态页面:1、访问index页面2、访问basic-usage页面3、访问request-methods页面项目架构应用入口类-EurekaServerApplicationweb页面对应WebControllerapi接口对应ApiControllerWeb静态页面Web动态页面web动态页面配置如何新建页面新建html文件在WebController增加对应的

2021-09-24 11:34:51 13

原创 mac下Tomcat的安装,启动和关闭脚本配置,端口号更改

1、安装:在Mac环境下配置tomcat安装后的默认路径是~/Library/Tomcat.2、进入到Tomcat/bin目录下,./startup.sh3、进入到Tomcat/bin目录下,./shutdown.sh4、权限问题:①$ ~/Library/Tomcat/bin $ ./startup.shzsh: permission denied: ./startup.sh解决:sudo chmod 777 startup.sh②$ ~/Library/Tomcat/

2021-09-24 11:05:44 31

原创 终端中查看某个app的logcat输出,支持关键字筛选,支持输出到文件

文章目录通过adb在终端中输出app的实时log连接设备查看设备的所有logcat输出获取某个app的pid:通过`adb shell dumpsys 包名`通过`adb shell dumpsys activity top | grep "ACTIVITY" -A 0`输出单个app的log:adb logcat -d --pid=xxx删选关键字:grep输出到对应的文件中: xxx命令 > target.txt在只安装了adb环境的情况下,如何查看某个app的日志,同时筛选关键字?如何配置a

2021-09-23 13:52:32 18

原创 mac下安装adb环境的三种方式

文章目录1、通过Android sdk,配置环境变量2、通过homebrew安装3、自行下载platform-tools包,配置环境变量验证是否安装成功常用命令adb全称是Android Debug Bridge,它是一个命令行工具,通过它可以与Android设备进行交互,可以进行常见的安装/卸载app、打开app、查看app的日志等操作。官网请移步Android Debug Bridge (adb)接下来介绍几种mac下安装adb的方式。1、通过Android sdk,配置环境变量Android

2021-09-23 13:48:53 25

原创 adb常用命令

文章目录查看adb版本号重启adb查看当前adb连接的设备安装文件到手机根据包名卸载存在多个设备时,直接install会出错,需要制定设备名称。覆盖安装按组列出权限和状态:查看adb版本号adb --version重启adbadb kill serveradb start server查看当前adb连接的设备adb devices 安装文件到手机adb install <file> 根据包名卸载adb uninstall <pkg-name> 存在多

2021-09-23 13:42:47 9

原创 thymeleaf发送post请求的两种方式

文章目录场景分析form表单方式发送post请求通过`方言(Dialect)、自定义tag处理器(AbstractProcessorDialect)`的方法来发送post请求项目地址参考:这里简述下thymeleaf发送post请求的两种方式。场景分析我们知道,html不支持通过链接发送post请求,默认只能通过表单方式发送。不过这里我们使用的是thymeleaf,它还提供了一种通过方言(Dialect)、自定义tag处理器(AbstractProcessorDialect)的方式,我们可以通过就可以

2021-09-18 23:34:37 52

原创 thymeleaf实现ajax请求的两种方式

文章目录使用fragment1、布局中定义fragment和id,定义ajax请求2、WebController中定义对应的ajax请求方法使用ModelAndView项目地址注意,对应的Controller类不能使用@RestController注解。使用fragment1、布局中定义fragment和id,定义ajax请求<body>...<div> <h3>get请求</h3> <p> <bu

2021-09-18 23:31:25 8

原创 新建Spring Thymeleaf项目

文章目录新建Spring Thymeleaf项目通过IDE新建项目添加maven依赖添加thymeleaf的html页面。创建静态页面-static创建动态页面-templates新建Controller配置端口号-默认8080执行代码在浏览器中访问项目地址参考新建Spring Thymeleaf项目如果你想快速的搭建一个前后端一体的项目用于学习http(最好有点Java基础),那么你可以通过IDE(非社区版)来创建Spring项目,并通过项目中自带的Tomcat搭建服务,再通过自带的Thymeleaf

2021-09-18 23:25:50 15

原创 mac下,依赖于Charles代理,wireshark抓取Android设备报文

这里提供一些可行的方式,作者推荐第二种。一、电脑是非wifi连接时,开热点让移动设备连接,然后在电脑端抓取报文。如果你的mac本身是通过wifi来连接上网的,那就不能用这个mac做wifi热点了,因为wifi端口已经被占用,在使用了。况且已经有了wifi,再用mac做热点意义也不大。1、在操作系统上打开wifi热点2、手机链接WiFi热点3、用Wireshark打开捕获–>选项面板,选择wifi热点对应的接口设备抓包Mac怎么设置wifi热点,Mac做wifi热点二、如果电脑本身是wif

2021-08-27 11:41:07 16

原创 Animation组合动画踩坑-实现循环播放动画,可控制次数

Animation组合动画踩坑-实现循环播放动画,可控制次数比如说期望如下:如果使用View动画,那么很自然的就想到了通过res/anim下的xml文件来实现,组合动画的话使用set标签即可。直接这样做真的能生效么?且让我们一步一步实践。先提前剧透下,官网的demo也是有问题的。赶时间只想看解决方式的同学,可以直接移步到最后一步的demo。1、使用res/anim下的xml文件,实现组合动画顺序执行的坑。动画的顺序执行是依靠的startOffset属性,它的值等于前面所有动画的duration

2021-07-15 21:34:19 77 1

原创 Android中对格式控制符的支持

1、String#format代码示例:Log.e("Tag", String.format("name:%s, hashCode:%h", "name", obj.hashCode()));更多细节请查看Formatter。2、Context#getString中支持格式控制符:代码示例:<string name="string_xxx">%1$s猫了个咪啊</string>String content = getContext().getString(R.str

2021-07-13 16:23:35 13 1

原创 ConstraintLayout中使用Guideline限制控件最大宽度

ConstraintLayout中使用Guideline限制控件最大宽度下面的 ll_container 最大宽度被限制了:最大宽度是屏幕宽度 - 88dp。ll_container本身宽度可变,有最大宽度限制。<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content"> &lt

2021-07-13 15:45:55 72

原创 代码设置ConstraintLayout的layout_constraintDimensionRatio

代码中设置layout_constraintDimensionRatio:ConstraintSet constraintSet = new ConstraintSet();constraintSet.clone(mRlContent);constraintSet.setDimensionRatio(R.id.iv,"h,9:16");constraintSet.applyTo(mRlContent);对应布局:<androidx.constraintlayout.widget.Cons

2021-07-13 15:25:45 130

原创 自定义ViewGroup的知识点总结-持续更新

自定义ViewGroup的知识点总结-持续更新1、child.getMeasuredWidth()中会包含child的padding值child的margin的值需要自行适配。2、在onMeasure方法中:需要先对child进行measure,然后才能获取到measuredWidth和measureHeight。常用的测量方法有两个:①ViewGroup#measureChild(View child, int parentWidthMeasureSpec, int parentHeightM

2021-07-13 15:16:38 8

原创 使用特殊字符拼接字符串“+“

使用特殊字符拼接字符串"+"期望:使用"+"拼接多个字符串当做key,在需要时将key根据"+"进行拆分,获取到原来的多个字符串。正确用法:private static final String SPLIT = "+";①使用StringBuilder#append来拼接多个字符串和SPLIT;②解析字符串:String[] splits = key.split(Pattern.quote(SPLIT));有坑的用法一:写入的和读取出来的不一致。private static fin

2021-07-13 12:59:29 88

原创 记一次忽略@SuppressLint(“NewApi“)提示引发的血案

记一次忽略@SuppressLint(“NewApi”)提示引发的血案本次开发中用到了Java中的优先级队列,需要根据给定的优先级对元素进行排序,于是我写出了下面这段代码:private Comparator<CustomObject> comparator = new Comparator<CustomObject>() { @Override public int compare(CustomObject o1, CustomObject o2) {

2021-07-13 12:52:23 32

原创 shell脚本中执行python脚本,处理字符串,同时复制到剪贴板

shell脚本中执行python脚本,处理字符串,同时复制到剪贴板需求:给字符串中的&之前添加转义字符1、使用python脚本处理字符串,需要在main方法中接受入参:convert.py#!/usr/bin/env python3# -*- coding: utf-8 -*-import sysdef convert_chars( chars ): return chars.replace('&','\&')if __name__=="__main__":

2021-07-13 12:49:30 24

原创 避免list的并发修改异常的几种方式

避免list的并发修改异常的几种方式1、使用list的snapshot,遍历它的副本使用如下:com.bumptech.glide.manager.ActivityFragmentLifecycle#onStart()for (LifecycleListener lifecycleListener : Util.getSnapshot(lifecycleListeners)) { lifecycleListener.onStart();}具体实现如下:com.bumptech.glide

2021-07-13 12:42:57 38

原创 Activity中,View#postDelay会导致内存泄漏,但是不会影响Activity的生命周期执行。

Activity中,View#postDelay会导致内存泄漏,但是不会影响Activity的生命周期执行。测试代码如下:@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e(TAG, "onCreate"); iv = findViewById(R.id.iv); iv.postDelayed(new Runnab

2021-07-13 12:38:37 58

原创 通过ComponentCallbacks2来接收onTrimMemory等回调,并mock对应的场景

我们在做app内存不足时,需要做一些内存释放的操作,以避免app卡顿,或者尽可能的延迟app存活时间,减少被系统回收的概率。如何监听ComponentCallbacks那么如何监听这些时机呢?系统的Application、Activity、Service和ContentProvider均实现了ComponentCallbacks2接口,我们可以很方便的获取这些时机。除了这些时机之外,我们还可以通过Context#registerComponentCallbacks来添加自己的监听器。一般而言我们添加C

2021-04-30 15:04:54 69 1

原创 彻底记住ImageView的background和src的区别

彻底记住ImageView的background和src的区别示例代码<ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/ic_launcher" android:src="@drawable/ic_launcher" />区别:①

2021-04-18 23:31:56 82

原创 Android复习路径以及复习资料整理

Android面试准备,基本上可以分为如下几部分:jvm,java基础,多线程,Android,三方库源码,设计模式,kotlin、flutter、jetpack组件实战、算法与数据结构、网络等。具体面经请看2020Android面经,历史一个半月,斩获3个大厂offer。具体的学习资料和基础的知识点如下:1、JVM《深入理解Java虚拟机》极客时间-深入拆解Java虚拟机基础知识:GCRoot类型垃圾回收方式运行时数据分区类加载过程,对象创建过程静态分派和动态分派2、Ja

2020-12-12 15:12:01 130

原创 2020Android面经,历时一个半月,斩获3个大厂offer

2020Android面经,历史一个半月,斩获3个大厂offer历史一个半月,斩获3个大厂offer(京东、新浪、滴滴),这里进行下简单的总结,希望能帮助到大家。总体来说,面试一般都是基于你的简历来进行的,一般先考察你的基础,然后考察你知识体系的完备程度,接着会考察你的极限,最后还会考察一些软技能,比如你的学习能力、协作能力、沟通能力、分析解决未知问题的能力、抗压能力等。个人心得凡事预则立,不预则废。准备周期面试之前,最好先系统的复习一下基础知识,然后再复盘下自己的项目经历,把亮点都发掘出来。复

2020-12-12 12:45:29 2948 14

原创 android中module间资源文件的覆盖规律

android中module间资源文件的覆盖规律主项目是否会覆盖它依赖的module中的资源文件。类型app是否会覆盖modulecolor中定义的值是string中定义的值是dimen中定义的值是layout文件是drawable中的图片是drawable的shape文件是styles中的style是测试代码地址AndroidStudy中的mylibrary...

2020-12-10 11:53:19 651

原创 kotlin新版本插件本地安装

kotlin新版本插件本地安装插件下载地址:https://plugins.jetbrains.com/plugin/6954-kotlin/versions插件文件夹地址:/Applications/Android Studio.app/Contents/plugins如下图所示:解压下载下载好的文件,替换对应的Kotlin目录即可,然后重启Android Studio即可。安装完成的效果如图:...

2020-12-10 11:49:54 135

原创 Android Studio4.1无法创建自定义模板的坑

我们自定义代码模板时,模板文件的路径一般是在/Applications/Android Studio.app/Contents/plugins/android/lib/templates这个目录下的,但是在4.1版本中是没有这个目录的。具体如下图:4.1的:我们再看下前一个稳定版本4.0.1的:截至目前还没有找到可行的方案,只能选择回退Android Studio版本到4.0.1了。Android Studio稳定版本链接:https://developer.android.com/studi

2020-11-26 16:23:46 1593 10

原创 剑指offer第二版Java代码,参考对应的LeetCode题目

剑指offer第二版Java代码,参考对应的LeetCode题目历时一个多月,终于把剑指offer第二版刷完了,这里把项目贡献出来。项目地址:tinyvampirepudge/LeetCodeTest,具体代码请看targetoffer目录。具体来说有如下几个特点:1、完整的完成剑指offer上所有的题目,从第3题到第68题。2、尽可能的将题目与LeetCode上的题目对应起来。3、每个题目均附有完整的测试用例。4、针对剑指offer上的题目变形和附加题,也一一做了解答。5、对某些

2020-10-21 17:25:24 234 3

原创 记一次java命令执行IDE中java类的入口函数的坑

熟悉java的同学都知道,我们可以直接通过java命令执行Java类的入口函数,执行时还可以携带参数,参数是以字符串数组的形式传递给main入口函数的。不过现在已经很少使用这种方式执行java代码了,都是通过IDE来执行。比如下面这个测试类,package com.tinytongtong.androidstudy.java.cachepool;public class JavaMainTest { public static void main(String[] args) {

2020-08-08 14:04:12 506

原创 Java中基本类型和包装类的各类比较(==),以及包装类的对象缓存池

Java中的基本类型及其包装类的比较(==)一直是一个比较头疼的问题,不仅有自动装箱和拆箱操作,部分的包装类还有对象缓存池,这就导致了这部分知识容易混淆。对于==操作符来说,如果比较的数据是基本类型,则比较它们的值,如果比较的是对象,则会比较对象的内存地址。另外,如果一个是基本类型、一个是包装类型,在比较前会先把包装类型拆箱成基本类型,然后进行比较。以int为例,这里我们把参与比较的类型分为三种:int、直接new出来的Integer对象和自动装箱出来的Integer对象。这里先不考虑Integer的

2020-08-06 23:36:42 601 2

原创 Android10上”org.apache.commons.codec.binary.Hex ClassNotFoundException“解决及原因探究

在一次版本迭代后,突然在部分机型上爆出了一些崩溃,查看崩溃原因,原因内容是java.lang.NoClassDefFoundError:Failed resolution of: Lcom/apache/commons/desc/binary/Hex,具体如下图:比较蛋疼的是在这次版本迭代后才出现这个问题,而且是高版本手机有问题,10.0的测试机有问题,6.0的测试却没问题。问题定位及解决基于上述不同机型的表现,用代码验证下,org.apache.commons.codec.binary.Hex这个

2020-08-06 11:26:17 1035

原创 一文带你理解Java中自动装箱和拆箱

Java中自动装箱和拆箱装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用。这里的primitive type就是Java里面的基本类型,所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。通常,这些类称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Voi

2020-08-04 23:20:07 1106

原创 Android压缩图片文件大小到限定值以下

开发中会有用户头像上传的需求,为了节省流量,一般上传接口都会现在图片大小,比如1M。但是随着手机像素越来越高,这个限制很容易达到,所以需要客户端在上传图片进行压缩操作。先说一下思路:主要是等比缩小图片文件,辅之使用Bitmap#compress进行压缩。①第一步根据文件路径创建File对象,然后判断File对象的大小,如果大于1M,就开始压缩操作;②接着通过BitmapFactory.Options获取图片文件的宽高,先把图片宽高减半;然后根据缩小后的宽高创建新的Bitmap对象,这里通过Canvas

2020-07-23 11:46:20 1894

原创 Bad method handle type 7异常解决

在利用androidx版本写demo时,在添加了一些依赖后,遇到了java.lang.ClassNotFoundExceptionbug,这就很奇怪了,我就添加rxjava3的依赖,就给我报这个错误。添加的依赖如下:implementation 'io.reactivex.rxjava3:rxjava:3.0.0'具体报错如下:第一反应是先看Error部分的提示,这里提示找不到dex文件中找不到自定义的Application类,所以优先排查mutildex相关问题。查了半天毫无头绪,我的配置也没

2020-06-13 22:13:49 1109 2

原创 Activity添加进入和退出动画的两种方式,解决黑色区域问题

Activity添加进入和退出动画的两种方式,解决黑色区域问题给Activity添加进入和退出动画的操作,大家一定不会陌生。常见的有两种方式,一种是通过style文件给Activity设置Theme,另一种是直接代码中调用Activity#overridePendingTransition方法。使用代码和使用style文件是一样的效果,下面举例进行说明,比如说我们的Activity进入动画需要从下往上滑动,退出需要从上往下滑动。通过style文件给Activity设置Theme来实现styles.x

2020-06-10 00:37:36 1354

原创 StartActivity主体流程-api26

主体流程基于api26App端:Activity#startActivity(Intent intent)Activity#startActivity(Intent intent, @Nullable Bundle options)Activity#startActivityForResult(Intent intent, int requestCode)Activity#startActivityForResult(Intent intent, int requestCod, Bundle o

2020-06-08 18:20:17 460

原创 性能优化:Bitmap内存大小优化的几种常见方式

性能优化:Bitmap内存大小优化的几种常见方式Android中的bitmap是比较占用内存的,bitmap的大小直接影响到了应用占用内存的大小。bitmap占用内存大小的计算方式为:bitmap内存大小 = bitmap宽度(px) * bitmap长度(px) * 一个像素点占用的字节数BitmapFactory给我们提供了多个decode方法,我们可以从不同的数据源中加载bitmap,如下图所示:一个像素点占用的字节数对应的参数是Bitmap.Config,它是一个枚举类,具体取值如下:

2020-06-07 16:12:16 1239

原创 Android获取Bitmap网络图片类型

常见的获取图片格式的方式Android中常见的图片格式有png、jpeg(jpg)、gif、webp,不同格式的图片,那么如何获取图片类型呢?常见的有两种方式,一种是在Bitmap加载过程中,通过BitmapFactory.Options#outMimeType来获取图片对应的格式,另一种是通过文件头信息来判断。效果图:具体实现因为我们这里针对的是网络图片,所以第一步是将图片下载到本地。通过[BitmapFactory.Options#outMimeType]获取图片格式接着我们可以通

2020-06-05 18:53:43 1504

原创 微信图片分享支持url,缩略图支持url

微信图片分享支持url,缩略图支持url在集成微信分享的过程中,如果缩略图是url形式,或者大图分享的图片是个url,就需要我们先把图片下载下来,然后依据微信的要求对图片做一些压缩操作,最后将图片的数据设置给要分享的对象即可。我们一般需要支持的分享类型主要有文字类型(WXTextObject)、图片类型(WXImageObject)和网页类型(WXWebpageObject),具体请看分享与收藏功能-Android开发手册。缩略图支持url拿我们常见的网页分享举例,msg.thumbData对应的就

2020-05-30 10:58:39 2589 1

原创 View默认的LayoutParams是何时生成的,默认值是什么。layout_width和layout_height属性在哪里生效

View默认的LayoutParams是何时生成的,默认值是什么View#mLayoutParams属性:/** * The layout parameters associated with this view and used by the parent * {@link android.view.ViewGroup} to determine how this view should be * laid out. * {@hide} */protected ViewGroup.Layo

2020-05-27 19:45:16 2002 2

LinkLineDemo.zip

具体效果请看: https://blog.csdn.net/qq_26287435/article/details/105082424

2020-03-24

空空如也

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

TA关注的人 TA的粉丝

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