自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 羊城杯 Crypto RRRRRRRSA (连分数,低解密指数攻击原理)

题面import hashlibimport sympyfrom Crypto.Util.number import *flag = 'GWHT{************}'flag1 = flag[:19].encode()flag2 = flag[19:].encode()assert(len(flag) == 38)P1 = getPrime(1038)P2 = sympy.nextprime(P1)assert(P2 - P1 < 1000)Q1 = getPri

2020-09-13 11:44:20 3008 1

原创 android中的基线计算

需要注意的点:1,top,bottom的值是相对基线而言的,按照y轴的走向,top为负,bottom为正。2,center既是View的center,也是内容的center。计算方法centerY() :得到centerfontMetrics.top: 得到topfontMetrics.bottom: 得到bottom(top-bottom)/2 : 得到View的一半高度。center-(top-bottom)/2 : 得到top的绝对坐标(y轴)。center-(top-bottom.

2021-04-08 22:48:36 998 1

原创 java传入匿名类的覆盖问题

问题:重写接口方法不生效。原因:new 一个匿名类对象重写方法后,又new 一个同一接口匿名类对象,后一个匿名类对象引用会覆盖掉前一个。解决:新增一个接口,然后通过重载的方式提供对外接口。 private OnMediaPlayerHelperListener onMediaPlayerHelperListener; private OnSeekBarListener onSeekBarListener; //由于两个地方都要重写setOnMediaPlayerHelperLis

2021-03-30 22:22:22 853

原创 android MediaPlayer 完成播放后无法再次播放

问题: MediaPlayer播放完成后无法再次播放。原因: 没有重新加载资源。解决: 重新加载资源。

2021-03-29 22:25:56 1751

原创 滑动标签页

滑动标签页TabLayoutViewPager自定义适配器。为Viewpager绑定适配器。通过TabLayout和ViewPager和Fragment配合使用。TabLayout放标签用的。 <com.google.android.material.tabs.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_he

2021-03-26 22:32:29 123

原创 Fragment(碎片)

Fragment碎片是什么碎片的使用方式碎片的简单用法新建一个左侧碎片布局和一个右侧碎片布局。接着新建两个类,继承fragment,并且重写onCreateView方法吗,分别引入左右布局。在Activity_Main.xml中引入这两个View动态添加碎片先用FrameLayout替换fragmentAnotherRightFragment在MainActivity中动态添加。在碎片中模拟返回栈碎片和活动之间的通信Activity得到FragmentFragment中获得ActivityFragment中

2021-03-26 18:11:02 94

原创 可折叠式标题栏

可折叠式标题栏CollapsingToolbarLayoutNestedScrollViewMainActivity→FruitActivityFruitActivity进行数据处理。充分利用状态栏空间。为ImageView的父布局和其本身添加fitsSystemWindows属性。为FruitActivity自定义一个主题。引入这个主题CollapsingToolbarLayout顾名思义,这是一个作用在Toolbar上的布局,但是要注意的是CollapsingToolbarLayout不能单独存在,

2021-03-26 11:37:27 103

原创 下拉刷新

下拉刷新SwipeRefreshLayout添加事件逻辑SwipeRefreshLayout将控件放在SwipeRefreshLayout里面就可以实现下拉刷新了。 <androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:layout_width="match_parent" android:layout_height="wrap_content"

2021-03-25 22:22:26 64

原创 卡片式布局

卡片式布局CardView在RecyclerView填充CardView子布局设置为CardView在activity_main.xml中添加RecyclerView在MainActivity中自定义适配器(FruitAdapter)为ReclyclerView设置适配器和布局。AppBarLayoutCardViewCardView其实也是一个FrameLayout,但是它额外提供了圆角和阴影等效果,所以看起来会有立体的感觉。在RecyclerView填充CardView子布局设置为CardVie

2021-03-25 21:47:42 177

原创 悬浮按钮和可交互提示

悬浮按钮和可交互提示悬浮按钮(FloatingActionButton)事件处理SnackbarCoordinatorLayout悬浮按钮(FloatingActionButton)按照Material Design的理念,应用程序的界面不仅仅只是一个平面了,而应该是要具备立体效果的。一个最具代表性的立面设计就是悬浮按钮。 <com.google.android.material.floatingactionbutton.FloatingActionButton

2021-03-25 17:17:03 78

原创 滑动菜单

滑动菜单DrawerLayout(抽屉布局)添加滑动菜单的导航按钮DrawerLayout(抽屉布局)<?xml version="1.0" encoding="utf-8"?><androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-aut

2021-03-24 22:22:01 110

原创 Toolbar

ToolbarToolbar替换ActionbarActionbar的位置替换Actionbar在xml中添加Toolbar控件。在Activity中将toolbar添加进去ToolbarZToolbar替换ActionbarActionbar被限定使用在活动的顶部,没有办法实现更多的效果,于是用Toolbar替换掉ActionbarActionbar的位置修改成替换Actionbar在xml中添加Toolbar控件。在Material Design出现以后,为了兼容以前的版本,这里要新开

2021-03-24 21:38:27 66

原创 常见控件的使用方法

常见控件的使用方法TextViewButtonEditTextImageViewProgressBarAlertDialogProgressDialogTextView在界面上显示一段文本信息。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_par

2021-03-24 19:53:46 360

原创 创建自定义控件

自定义控件引入布局创建title.xml隐藏ActionBar创建自定义控件自定义控件TitleLayout在Xml中用这个控件引入布局这里准备在标题栏处引入一个布局文件。创建title.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pa

2021-03-24 12:44:20 86

原创 4种基本布局

4种基本布局线性布局(LinearLayout)排列方向(orientation)水平(horizontal)垂直(vertical)对齐方式(layout_gravity)水平方向topcenter_verticalbottom垂直方向leftcenter_horizontalright权重(layout_weight)相对布局(RelativeLayout)控件相对于父布局进行定位layout_alignParentLeftlayout_alignParentToplayout_alignParent.

2021-03-23 22:20:24 332 1

原创 RecyclerView

RecyclerViewRecyclerView的基本用法添加recyclerView创建适配器为recyclerView绑定适配器和设置布局。RecyclerView实现横向滚动修改子项布局修改RecyclerView的放置顺序RecyclerView相比ListView的优点RecyclerView实现瀑布流布局修改xml文件修改Activity将文字数据扩长将布局改成瀑布流布局RecyclerView的点击事件RecyclerView的基本用法添加recyclerView现在activity_m

2021-03-23 19:24:42 98

原创 ListView

ListViewListView的简单用法ListView的简单用法在activtity布局文件中定义一个Listview<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_w

2021-03-23 12:27:30 91

原创 并查集

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#define N 50010using namespace std;int pre[N];int findroot(int x){ ...

2021-03-20 09:37:31 54

原创 摩尔投票法

问题从一个数组中找出出现次数超过一半的数。(这数一定存在)策略: 不同的两数相消,最后剩下的一定是这个数。(最坏情况,其他各数联合与其相消,但是由于数量不够,剩下的还是这个数)。leetcode相关题目算法1,初始化: vote=0; ans=anyone2,从i遍历数组,遇到vote=0则ans=nums[i],vote++,否则如果ans==nums[i] vote++,不等则 vote–3,返回ans即为答案。class Solution { public int majori

2021-03-19 21:04:44 60

原创 MySQL索引

索引结构Mysql按页来存储数据。每个节点的第一个数据是其索引。通过建立索引可以快速查询。通过页目录能加快查询。如要查询大于索引大于4的节点则只需在页目录中找到4就行。这种结构只在叶节点上挂数据。是B+树的结构,而不是B-树结构。为什么用B+树而不用B-树呢?因为B-树每个节点都要挂数据。这会导致页目录表示的范围不够。可以将叶子节点中挂的数据的不同分为普通索引和聚集索引。普通索引是指叶子节点并不是挂表中的这一行数据,而是挂行号。聚集索引是指叶子结点中挂的是这个表中的这一行数据。由于聚集

2021-03-19 17:28:49 76

原创 android 无法访问http

在主配置文件中添加:注:http不安全

2021-03-17 18:07:05 114

原创 Java 反射

什么是反射反射机制允许程序在运行时通过反射的API取得类的内部信息,并且可以访问任何属性和方法.在类加载完毕后,java堆中的方法区会有一个Class对象.这个对象包含了这个类的结构信息,我们可以通过一定的方法来得到这个对象.这种方法就是反射.获取Class对象package com;public class Test { public static void main(String[] args) throws ClassNotFoundException { Class

2021-03-16 20:29:15 68

原创 leetcode 5703. 最大平均通过率(贪心+优先队列)

题目链接:最大平均通过率(贪心+优先队列)题解:思路 贪心: 每次添加都要让最大平均通过率的增加量最大.数据结构: 大根堆算法: 建一个以 x+1/y+1 -x/y大小作为优先级的大根堆. 然后往堆中添加 int[]类型数据. 每次从堆中取出元素.然后将这个元素的 x,y 都加一 放回 同时 额外学生数-- 直到额外学生分配完成.时间复杂度: nlogn代码:class Solution { public double maxAverageRatio(int[][] classes,

2021-03-14 14:41:10 160

原创 剑指 Offer 31. 栈的压入、弹出序列

题目链接: 栈的压入、弹出序列题解:1,双指针,i,j分别指向这两个序列2,模拟弹出序列的弹出.3,j指向的元素只有是栈顶元素才能弹出,否则需继续压入元素i++.4,当满足第三点时,弹出元素 j++ 模拟下一个元素的弹出.5,模拟完成后未出现异常返回trueclass Solution { Stack<Integer> stack=new Stack<>(); public boolean validateStackSequences(int[] pus

2021-03-13 12:07:18 53

原创 剑指 Offer 29. 顺时针打印矩阵

题目链接:顺时针打印矩阵这个题目不难,麻烦在如何处理边界情况.题解:1,可以将矩阵一圈一圈地打印出来.2,需添加边界参数 left right top bottom限定矩阵.3,遍历每一圈时分两种情况 递增遍历和递减遍历.4,递增遍历需要满足left<=right&&top<=bottom5,递减遍历只能是 left<right&&top<bottom6,一圈遍历完后left++ right-- top++ bottom– pu

2021-03-13 11:14:51 64

原创 剑指 Offer 26 树的子结构

题目链接: 树的子结构题解:1,如果子结构在左子树 返回true2,如果子结构在右子树 返回true3,如果左右子树都不存在子结构,判断包含当前节点是否存在子结构.4,包含当前节点存在子结构的条件为对B进行遍历,B中的不为空元素都在对应的A中.代码注意点:dfs 递归出口判断: b为空 则一定为true(原来的树不为空)a 为空 一定为 false 因为之前已经判断 b是否为空.class Solution { public boolean isSubStructure(TreeN

2021-03-12 16:35:29 54

原创 leetcode 815. 公交路线

题目链接: leetcode 815. 公交路线题解:1,每条公交路线可以抽象看成一辆公交车.2,任意两辆公交车如果他们有公共车站,那么他们是可达的.3,通过给的start车站可以确认有几辆公交车可以作为起点.4,终止条件是到达包含终点的公交车.5,用...

2021-03-12 13:21:34 122

原创 剑指 Offer 13. 机器人的运动范围(BFS添加元素时标记)

这道题用BFS模板就行,但是要注意在添加元素时进行标记,而不是取出时标记,因为取出时标记可能会重复添加元素进队列.class Solution { int next[][]={{1,0},{0,1},{-1,0},{0,-1}}; boolean visited[][]; class node{ int x; int y; node(int x,int y){ this.x=x; thi

2021-03-11 20:18:31 67

原创 android Handler

为什么使用Handler?先看一段代码package com.example.test;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends AppCompatActivity { @Override

2021-03-07 21:21:49 98 1

原创 消费者-生产者模拟

class producer extends Thread{ productContainer container; producer(productContainer container){ this.container=container; } @Override public void run() { for (int i = 0; i < 100; i++) { container.ad.

2021-03-07 13:36:32 41

原创 java Lamda表达式

1,函数式接口任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口.2,匿名内部类class test4{ Runnable runnable=new Runnable(){ @Override public void run() { } }; }由于只有一个抽象方法,属于函数式接口,可以抽出主要逻辑进行简化.class test4{ Runnable runnable=()-

2021-03-06 20:30:20 47

原创 ArrayList线程安全问题

ArrayList 是线程不安全的,通过一段代码来体现.class Test3 implements Runnable{ ArrayList<String> arrayList; Test3(ArrayList<String> arrayList){ this.arrayList=arrayList; } @Override public void run() { try {

2021-03-05 21:18:10 173

原创 ArrayList的三种构造方法.

无参构造 public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }elementData是存储数组列表元素的数组缓冲区,当第一次添加元素时,该数组的大小会膨胀到默认的容量.这个空数组是创建空ArrayList时共享的空数组.每次通过这种无参构造的elementData都会指向这个空数组实例.(EMPTY_ELEMNTDATA 是static变量)带初始容量构造/**

2021-03-04 22:40:11 346

原创 ArrayList和LinkedList的区别之一 :RandomAccess接口

打开ArrayList和LinkedList的源码后会发现ArrayList实现了一个RandomAccess接口而LinkedList没有public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializablepublic class LinkedList<E> exten

2021-03-04 21:27:07 122 1

原创 leetcode 字符串轮转

字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1:输入:s1 = “waterbottle”, s2 = “erbottlewat”输出:True示例2:输入:s1 = “aa”, s2 = “aba”输出:False提示:字符串长度在[0, 100000]范围内。说明:你能只调用一次检查子串的方法吗?来源:力扣(LeetCode)链接:https://leetcode-cn.co

2021-03-04 18:59:49 80

原创 android学习记录(十二)

播放多媒体文件播放音频main→assets 放置音频文件package com.example.playaudiotestimport android.media.MediaPlayerimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport kotlinx.android.synthetic.main.activity_main.*class MainActivity : AppCompat

2021-03-04 18:58:58 105

原创 android学习记录(十一)

通知的基本用法package com.example.notificationtestimport android.app.NotificationChannelimport android.app.NotificationManagerimport android.content.Contextimport android.graphics.BitmapFactoryimport android.os.Buildimport androidx.appcompat.app.AppCompat

2021-03-04 18:58:37 87

原创 android学习记录(十)

升级数据库改变传入的数据库版本号就可以触发数据库升级.val dbHelper=MyDatabaseHelper(this,"BookStore.db",5)此时会调用onUpgrade方法.重写onUpgrade方法override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { db.execSQL("drop table if exists Book") db.exe

2021-03-04 18:58:17 87

原创 android学习记录(九)

从文件中读取数据. private fun load(): String{ val content=StringBuffer() try { val input=openFileInput("data") val reader=BufferedReader(InputStreamReader(input)) reader.use { reader.forEachLi

2021-03-04 18:58:02 50

原创 android学习记录(八)

实现广播强制下线功能继承关系LoginActivitypackage com.example.broadcastbestpractice0import android.content.Intentimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Buttonimport android.widget.Toastimport kotlinx.andro

2021-03-04 18:57:35 67

空空如也

空空如也

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

TA关注的人

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