当前位置: 首页 > news >正文

安卓期末大作业——仿番茄小说APP

已录演示视频,想看的可以联系我

上海建桥学院

信息技术学院

《移动应用开发实践》

实践报告

APP名称: 番茄免费小说

专 业:

班 级:

学生姓名:

学 号:

指导教师:

要求:

格式:宋体,小四号字;首行缩进;行距:1.5倍。

  1. 每人独立完成Android App的设计与开发
  2. App必须包含SOLite数据库操作

一、所调查的App简介。(限200字以内)

番茄小说是抖音 旗下的免费网文阅读APP,致力于为读者提供畅快不花钱的极致阅读体验,于2019年11月正式上线。

番茄小说拥有海量正版小说,涵盖言情、玄幻、悬疑、都市等全部主流网文类型,以及大量热剧原著和经典出版物,支持用户看书听书。

  1. 你要参照的App的界面截图及界面对应的流程图和功能图,并给出具体的文字说明。

功能图

参照的App的界面截图

三、技术剖析(调查的App界面可以运用哪些课程所学内容实现,请对照一一说明)

3.1 首页

首页从上往下整体可以用垂直的线性布局实现,顶部的搜索框可以用RelativeLayout相对布局实现,接下来的4x4的排行榜可以HorizontalScrollView和RecyclerView瀑布流实现。

底部导航栏可以用成熟的BottomNavigationView技术方案实现,底部导航图片可以采用ventor矢量图标。

3.2 榜单

可以用左右组合RecyclerView列表实现,根据左侧分类动态显示右侧的书籍。

3.3 书架

可以采用3列布局的列表实现,单击事件可以查看书籍详情,长按事件可以删除书籍

3.4 我的

可以采用ConstraintLayout布局实现。退出登录可以通过button按钮单击事件实现

四、App实现

1.界面完成的截图

2.界面布局代码

  1. 首页
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.home.HomeFragment"
    android:orientation="vertical">
    <RelativeLayout
    android:id="@+id/re1"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:background="#E6E8EA">
    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="42dp"
    android:layout_centerInParent="true"
    android:layout_marginLeft="50dp"
    android:background="@drawable/back3">
    <ImageView
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_centerVertical="true"
    android:layout_marginLeft="5dp"
    android:background="@drawable/ic_baseline_search_24" />
    <EditText
    android:id="@+id/edinput"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_marginLeft="43dp"
    android:layout_marginRight="55dp"
    android:background="#FCFDFD"
    android:hint="请输入搜索内容" />
    <TextView
    android:id="@+id/tv_refresh1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="10dp"
    android:text="搜索"
    android:textColor="#A60F43"
    android:textSize="17dp" />
    </RelativeLayout>
    </RelativeLayout>
    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
    android:id="@+id/tv_rank"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="排行榜"
    android:textSize="32dp"
    android:textStyle="bold"
    />
    <TextView
    android:id="@+id/all_rank"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="完整榜单>"
    android:textSize="24dp"
    android:layout_alignParentRight="true"
    />
    </RelativeLayout>
    <HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.recyclerview.widget.RecyclerView
    android:id="@+id/homeRecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorContent"
    android:overScrollMode="never"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
    </HorizontalScrollView>
    </LinearLayout>
  2. 榜单

<?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_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"

android:weightSum="10"

tools:context=".ui.snack.SnackFragment">

<LinearLayout

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="2"

android:orientation="vertical">

<androidx.recyclerview.widget.RecyclerView

android:id="@+id/snackLeftRecyclerView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#4DEEEEEE"

android:overScrollMode="never" />

</LinearLayout>

<LinearLayout

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="8"

android:orientation="vertical"

android:overScrollMode="never">

<androidx.recyclerview.widget.RecyclerView

android:id="@+id/snackRightRecyclerView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/colorBgWhite"

android:overScrollMode="never" />

</LinearLayout>

</LinearLayout>

  1. 书架
    <?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_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ui.place.PlaceFragment">
    <androidx.recyclerview.widget.RecyclerView
    android:id="@+id/placeRecyclerView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:background="@color/colorContent"
    android:overScrollMode="never" />
    </LinearLayout>
  2. 我的

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/colorContent"

tools:context=".ui.my.MyFragment">

<ScrollView

android:layout_width="0dp"

android:layout_height="0dp"

android:overScrollMode="never"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent">

<androidx.constraintlayout.widget.ConstraintLayout

android:layout_width="match_parent"

android:layout_height="wrap_content">

<androidx.constraintlayout.widget.ConstraintLayout

android:id="@+id/constraintLayout"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:background="@drawable/detail_info"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"

tools:ignore="MissingConstraints">

<de.hdodenhof.circleimageview.CircleImageView

android:id="@+id/myUserHead"

android:layout_width="80dp"

android:layout_height="80dp"

android:layout_marginStart="16dp"

android:layout_marginTop="24dp"

android:layout_marginBottom="24dp"

android:src="@mipmap/hejubian"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent" />

<TextView

android:id="@+id/myUserNickName"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginStart="17dp"

android:layout_marginTop="24dp"

android:text="未登录"

android:textSize="22sp"

app:layout_constraintStart_toEndOf="@+id/myUserHead"

app:layout_constraintTop_toTopOf="parent" />

<TextView

android:id="@+id/myUserName"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginStart="17dp"

android:layout_marginTop="8dp"

android:text=""

android:textSize="18sp"

app:layout_constraintStart_toEndOf="@+id/myUserHead"

app:layout_constraintTop_toBottomOf="@+id/myUserNickName" />

</androidx.constraintlayout.widget.ConstraintLayout>

<LinearLayout

android:id="@+id/linearLayout"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_marginTop="16dp"

android:background="@drawable/radius_content"

android:orientation="horizontal"

android:padding="10sp"

android:weightSum="4"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/constraintLayout">

<LinearLayout

android:id="@+id/myOrderView"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

android:orientation="vertical">

<ImageView

android:layout_width="match_parent"

android:layout_height="55dp"

android:padding="8dp"

android:src="@drawable/ic_baseline_assignment_24dp" />

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:text="我的订单" />

</LinearLayout>

<LinearLayout

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

android:orientation="vertical">

<ImageView

android:layout_width="match_parent"

android:layout_height="55dp"

android:padding="8dp"

android:src="@drawable/ic_sharp_monetization_on_24dp" />

<TextView

android:id="@+id/textView4"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:text="待付款" />

</LinearLayout>

<LinearLayout

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

android:orientation="vertical">

<ImageView

android:layout_width="match_parent"

android:layout_height="55dp"

android:padding="8dp"

android:src="@drawable/ic_baseline_question_answer_24dp" />

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:text="待评价" />

</LinearLayout>

<LinearLayout

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

android:orientation="vertical">

<ImageView

android:layout_width="match_parent"

android:layout_height="55dp"

android:padding="8dp"

android:src="@drawable/ic_baseline_report_24dp" />

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:text="退款" />

</LinearLayout>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayout2"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_marginStart="1dp"

android:layout_marginTop="16dp"

android:background="@drawable/radius_content"

android:orientation="vertical"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/linearLayout">

<TextView

android:layout_width="match_parent"

android:layout_height="45dp"

android:gravity="center_vertical"

android:paddingStart="16dp"

android:text="支付设置"

android:textSize="18sp"

tools:ignore="RtlSymmetry" />

<View

android:layout_width="match_parent"

android:layout_height="1dp"

android:background="#EEEEEE" />

<TextView

android:id="@+id/myModifyText"

android:layout_width="match_parent"

android:layout_height="45dp"

android:gravity="center_vertical"

android:paddingStart="16dp"

android:text="修改地址"

android:textSize="18sp"

tools:ignore="RtlSymmetry" />

<LinearLayout

android:id="@+id/myModifyView"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#1A409EFF"

android:orientation="vertical"

android:visibility="gone">

<EditText

android:id="@+id/editTextTextPersonName2"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="32sp"

android:layout_marginTop="22sp"

android:layout_marginRight="32sp"

android:layout_marginBottom="12sp"

android:ems="10"

android:hint="请输入新的手机号码"

android:inputType="textPersonName" />

<EditText

android:id="@+id/editTextTextPersonName3"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="32sp"

android:layout_marginTop="12sp"

android:layout_marginRight="32sp"

android:layout_marginBottom="12sp"

android:ems="10"

android:hint="请输入新的收货地址"

android:inputType="textPersonName" />

<Button

android:id="@+id/myModifyBtn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="end"

android:layout_marginEnd="32sp"

android:layout_marginBottom="12sp"

android:text="确定" />

</LinearLayout>

<View

android:layout_width="match_parent"

android:layout_height="1dp"

android:background="#EEEEEE" />

</LinearLayout>

<LinearLayout

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_marginTop="16dp"

android:layout_marginBottom="16dp"

android:background="@drawable/radius_content"

android:orientation="vertical"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/linearLayout2">

<TextView

android:id="@+id/logoutBtn"

android:layout_width="match_parent"

android:layout_height="45dp"

android:gravity="center"

android:paddingStart="16dp"

android:text="退出账号"

android:textSize="16sp"

tools:ignore="RtlSymmetry" />

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

</ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

3.App功能实现关键代码

(1)首页

private void initHomeAdapter() {

// 实例化电子书列表适配器对象

HomeAdapter adapter = new HomeAdapter(DataServer.getHomeList());

// 设置动画效果

adapter.setAnimationEnable(true);

// adapter.setAnimationFirstOnly(false);

// adapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInBottom);

adapter.setAdapterAnimation(new MyAnimation3());

// 设置头部

adapter.setHeaderView(getHeadView(), 1);

// 设置尾部

adapter.setFooterView(getFooterView(), 1);

// 点击事件监听器

adapter.setOnItemClickListener((adapter1, view, position) -> {

Snack snack = (Snack) adapter1.getItem(position);

DetailActivity.actionStart(getContext(), snack);

});

// 设置适配器

homeRecyclerView.setAdapter(adapter);

}

  1. 榜单

/**

* 初始化左边适配器

*/

@SuppressLint("ResourceAsColor")

private void initLeftAdapter() {

// 实例化左边适配器对象

SnackLeftAdapter leftAdapter = new SnackLeftAdapter(DataServer.getSnackOrderList());

// 设置动画效果

leftAdapter.setAnimationEnable(true);

leftAdapter.setAnimationFirstOnly(false);

leftAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInLeft);

// 触发点击按钮

leftAdapter.setOnItemClickListener((adapter, view, position) -> {

if (position != leftSelectPosition) {

String item = (String) adapter.getItem(position);

// 原本选中的item变成未选中颜色

Objects.requireNonNull(adapter.getViewByPosition(leftSelectPosition, R.id.snackLeftType)).setBackgroundResource(R.color.colorContent);

// 当前item变成选中颜色

Objects.requireNonNull(adapter.getViewByPosition(position, R.id.snackLeftType)).setBackgroundResource(R.color.colorBgWhite);

leftSelectPosition = position;

// 刷新右边列表

// rightAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInBottom);

rightAdapter.setAnimationEnable(false);

switch (position) {

case 1:

rightAdapter.setNewInstance(DataServer.getGuangxiList());

break;

case 2:

rightAdapter.setNewInstance(DataServer.getGuangzhouList());

break;

case 3:

// rightAdapter.setNewInstance(DataServer.getBeijingList());

break;

case 4:

// rightAdapter.setNewInstance(DataServer.getChongqingList());

break;

default:

rightAdapter.setNewInstance(DataServer.getFujianList());

break;

}

}

});

// 设置左边列表适配器

leftRecyclerview.setAdapter(leftAdapter);

}

/**

* 初始化右边适配器

*/

public void initRightAdapter() {

// 实例化右边适配器对象

rightAdapter = new SnackRightAdapter(DataServer.getFujianList());

// 设置动画效果

rightAdapter.setAnimationEnable(true);

// rightAdapter.setAnimationFirstOnly(false);

rightAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInRight);

// 设置尾部

rightAdapter.addFooterView(getFooterView());

// 点击item事件

rightAdapter.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {

Snack snack = (Snack) adapter.getItem(position);

DetailActivity.actionStart(getContext(), snack);

}

});

// 左边列表加入书架点击事件

rightAdapter.addChildClickViewIds(R.id.snackRightAddBtn);

rightAdapter.setOnItemChildClickListener((adapter, view, position) -> {

Snack snack = (Snack) adapter.getItem(position);

if (view.getId() == R.id.snackRightAddBtn) {

if (!MyApplication.getCartSnacks().contains(snack)) {

// 添加到书架

snack.setCount(1);

MyApplication.getCartSnacks().add(snack);

Tips.show("已添加" + snack.getName() + "到书架");

} else {

Tips.show("已在书架中,不能重复添加");

}

}

});

// 设置右边列表适配器

rightRecyclerView.setAdapter(rightAdapter);

}

  1. SQLite数据库表设计(格式如下,一个数据表对应一个表格)
字段含义类型
name书籍名称string
price书籍热度double
Image书籍图片Int
detail书籍详情string
列名数据类型长度允许空说明
usernamevarchar20N用户名
passwordvarchar30Y密码
addressvarchar100N收货地址
idint10N编号
headimageint100Y头像

5.调查的App界面中你觉得哪些设计不合理,你是如何改进的(选做)

首页列表在不同设备显示的比例不同,可能导致美观度不够,可以进一步根据不同设备进行适配

  1. 测试用例
  2. 搜索

输入:“黑科技1”

搜索结果:

(2)加入书架

输入:点击加入书架

结果文字:提示成功加入书架

  1. 总结(不少于500字,本次调查目的、过程、开发经历等)

1)通过半个学期的学习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。

2)通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如:要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。

3)对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过Bundle对数据在界面之间进行传输。

android是一种很错的手机系统,使用起来简单,而且可以根据自己的需求选择适合自己的版本,非常的方便。我要多多学习关于android的知识,在未来,将android系统研发的更加人性化,使用起来更加的舒适。

相关文章:

ADB学习笔记

简介&#xff1a; ADB的全称为Android Debug Bridge&#xff08;调试桥&#xff09;&#xff0c; 它是一个客户端-服务器端程序&#xff0c;其中客户端是你用来操作的电脑, 服务器端是android设备。作用显而易见&#xff0c;能方便我们在PC上对手机进行调试的一些工作。 原理…...

http load介绍

前几天工作中要对项目的接口做简单压测&#xff0c;就使用了http load做了简单测试&#xff0c;下面介绍一下这款工具的使用说明。简介&#xff1a;http_load是基于linux平台的性能测试工具&#xff0c;它体积非常小&#xff0c;仅100KB。它以并行复用的方式运行&#xff0c;可…...

Linux shell脚本之回顾及实用笔记

一、前言 我们从事运维的小伙伴,除了自动化运维外,在没有自动化条件下,借助shell脚本/Python脚本来提升运维效率,无疑是一个必选项,当前也可以自建自动化运维平台,我们这里还是以Linux shell脚本为主,来汇总一些常用的运维脚本,对于有基础的同学,也随本文一起回顾下相…...

TestNG使用总结

TestNG简介&#xff1a; TestNG是一个测试框架&#xff0c;其灵感来自JUnit和NUnit&#xff0c;但同时引入了一些新的功能&#xff0c;使其功能更强大&#xff0c;使用更方便。 TestNG相较于Junit的优点&#xff1a; 可指定执行顺序&#xff0c; dependsOnMethods 属性来应对…...

面向对象编程的弊端

英文原文&#xff1a;What’s Wrong with OOP and FP 我不理解为什么人们会对面向对象编程和函数式编程做无休无止的争论。就好象这类问题已经超越了人类智力极限&#xff0c;所以你可以几个世纪的这样讨论下去。经过这些年对编程语言的研究&#xff0c;我已经清楚的看到了问题…...

5.Servlet

一、Servlet快速入门 1.创建web项目&#xff0c;导入Servlet依赖坐标&#xff08;scope范围为provided因为上传后tomcat也有这个&#xff0c;可能会冲突&#xff09;pom.xml <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-a…...

(续)SSM整合之springmvc笔记(@RequestMapping注解)(P124-130)还没完

RequestMapping注解 一.准备工作 1 新建spring_mvc_demo com.atguigu 2. 导入依赖 <packaging>war</packaging><dependencies><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>sprin…...

c++入门必学算法 质数筛

文章目录一、什么是质数筛二、暴力枚举1、暴力枚举基本思想&#xff1a;2、模板代码3、运行结果三、埃氏筛1、埃氏筛基本思想&#xff1a;2、模板代码3、运行结果四、欧拉筛1、对比埃氏筛2、欧拉筛的基本思想3、模板代码3、运行结果五、总结一、什么是质数筛 质数筛也叫素数筛…...

flex 计算指定日期是本年度第几周

/** * 计算指定日期是本年度第几周 *传日年月日&#xff0c;返回number */ private function weekOfYear(yyyy:Number,mm:Number,dd:Number):Number{ var myDate:Date new Date(yyyy, mm - 1, dd); var startDate:Date new Date(yyyy,0,1); v…...

SpringCloud Zuul(四)之工作原理

一、筛选器概述 Zuul的中心是一系列过滤器&#xff0c;这些过滤器能够在HTTP请求和响应的路由期间执行一系列操作。 以下是Zuul过滤器的主要特征&#xff1a; 类型&#xff1a;通常定义路由流程中应用过滤器的阶段&#xff08;尽管它可以是任何自定义字符串&#xff09;执行…...

软件工程毕业设计课题(80)微信小程序毕业设计PHP电影视频播放小程序系统设计与实现

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信电影播放小程序系统&#xff0c;前台用户使用小程序&#xff0c;小程序使用微信开发者工具开发&#xff1b;后台管理使用基PPMySql的B/S架构&#xff0c;开发工具使用phpstorm&#xff1b;通过后台添…...

解决elementui 的省市区级联选择器数据不回显问题

上周写了一个省市区三级联动的地址选择组件&#xff0c;今天测试发现了一个大问题&#xff0c;那就是我可以正常提交地址是没错&#xff0c;可是当我后端返回了数据&#xff0c;我要点击编辑的时候&#xff0c;它并不会自动就给我绑定上去。 vue实现省市区三级联动地址选择组件…...

[CSS]圆角边框与阴影

前言 系列文章目录&#xff1a; [目录]HTML CSS JS 根据视频和PPT整理视频及对应资料&#xff1a;HTML CSS 老师笔记&#xff1a; https://gitee.com/xiaoqiang001/html_css_material.git视频&#xff1a;黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3…...

Neo4j 开发者大会 NODES 2022 活动日程已发布 - 11.16 ~ 11.17

各位 Graphistas&#xff1a; Neo4j 开发者大会 NODES 2022 将在 2022 年 11 月 16&#xff5e;17 日召开&#xff0c;不要错过这连续 24 小时跨越 3 个主要时区的大型在线活动&#xff0c;欢迎加入我们一起庆祝来自全球图技术社区的隆重分享。 现在访问官方网站注册活动: ht…...

Google Swift 与 DC 传输

网络拥塞&#xff0c;默认指转发节点出现了严重的排队现象&#xff0c;甚至队列溢出而丢包。、 但接收端也是一个统计复用系统(通用 OS 均为统计复用系统&#xff0c;比如 Linux)&#xff0c;但凡统计复用系统就是潜在拥塞点&#xff0c;即可套用排队论模型。 人们很少将最后…...

webservice学习记录笔记(一)

一、先理解什么是服务 现在的应用程序变得越来越复杂&#xff0c;甚至只靠单一的应用程序无法完成全部的工作。更别说只使用一种语言了。 写应用程序查询数据库时&#xff0c;并没有考虑过为什么可以将查询结果返回给上层的应用程序&#xff0c;甚至认为&#xff0c;这就是数…...

spring Cloud微服务 security+oauth2认证授权中心自定义令牌增强,并实现登录和退出

文章目录认证授权中心自定义令牌增强自定义认证端点返回结果登录逻辑调整&#xff0c;增强令牌返回参数测试验证用户微服务构建配置类构建相关实体类登录退出登录在之前的博客我写了 SpringCloud整合spring security oauth2Redis实现认证授权&#xff0c;本文对返回的token实现…...

接口测试那些事儿

什么是接口&#xff1f; 首先&#xff0c;在讲接口测试之前&#xff0c;我们先要搞清楚接口类型的概念。 接口&#xff1a;可能是系统与系统&#xff08;包括服务与服务&#xff09;之间的调用&#xff0c;像A系统&#xff08;服务&#xff09;给B系统&#xff08;服务&#x…...

CodeForces - 1084C The Fair Nut and String 思维

The Fair Nut found a string s. The string consists of lowercase Latin letters. The Nut is a curious guy, so he wants to find the number of strictly increasing sequences p1,p2,…,pk , such that: For each i (1≤i≤k), spi a.For each i(1≤i<k), there is…...

【晶振专题】案例:为什么对着STM32低速32.768K晶振哈口气就不起振了?

本案例发现在一个工装产品上,首批一共做了10几台样机。发现有的样机在开机的时候读取不到RTC,有的样机却可以。读不到RTC是概率性出现的,发生在第一次上电的情况。开始他怀疑是环境问题,会不会和温度有关,于是同事在家做了大量的实验,发现对晶振吹口气就能让晶振不起振,…...

Gym - 101986B Parallel Lines dfs暴力

链接&#xff1a;点击查看 题意&#xff1a;偶数个点&#xff0c;两点可连成一条线&#xff0c;求平行线最大对数 题解&#xff1a;当时想的时候傻逼了&#xff0c;想成了每次选两个点就是16*15/2 * 14*13/2 ..... 其实不需要这样&#xff0c;因为每个点必须要匹配一个的&…...

Keychron Q1:客制化机械键盘|体验

在Cherry轴垄断的后几年&#xff0c;国产机械轴一举反超&#xff0c;在性价比、手感、耐用性上实现了全面碾压。至少现在的键圈和智能手机一样&#xff0c;支持国货不仅是情怀&#xff0c;更是为产品力在买单。 至于“如何卷”键盘的玩法可比智能手机多得去了&#xff0c;可能…...

POJ - 2406 Power Strings next数组应用循环节

题目链接&#xff1a;点击查看 Language:Default Power Strings Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 61784 Accepted: 25534Description Given two strings a and b we define a*b to be their concatenation. For example, if a "abc" and…...

CodeForces - 545D Queue 贪心 排序

题目链接&#xff1a;点击查看 Little girl Susie went shopping with her mom and she wondered how to improve service quality. There are n people in the queue. For each person we know time ti needed to serve him. A person will be disappointed if the time he …...

Jmeter访问HTTPS请求

公司最近在搞全站HTTPS改造&#xff0c;进一步提高网站的安全性&#xff0c;防止运营商劫持。那么&#xff0c;改造完成后&#xff0c;所有前后端的URL将全部为https。 So &#xff0c;研究下怎么用Jmeter访问https请求呢。 其实很简单&#xff0c; 第一步在jmeter中创建HTT…...

Codeforces Round #833 (Div. 2) C. Zero-Sum Prefixes

Codeforces Round #833 (Div. 2) C. Zero-Sum Prefixes Let’s consider the prefix sum array s[a1,a1a2,…,a1a2…an]s[a_1,a_1a_2,\ldots,a_1a_2\ldotsa_n]s[a1​,a1​a2​,…,a1​a2​…an​]. For every index iii such that ai0a_i0ai​0, if we change the value of a…...

python导入安装包

主要分两种方式&#xff1a;在线安装和离线安装 在线安装 因为我公司开发是在云桌面&#xff0c;里面是没有外网的。之前是只能离线安装&#xff0c;后面搭了一个内部镜像环境。 1.添加配置文件进行换源 2.检查requirements.txt配置 3.直接使用pycahrm工具install 换源 …...

HDU - 6188 Duizi and Shunzi 贪心

Nike likes playing cards and makes a problem of it. Now give you n integers, ai(1≤i≤n) We define two identical numbers (eg: 2,2) a Duizi, and three consecutive positive integers (eg: 2,3,4) a Shunzi. Now you want to use these integers to form Shunzi and …...

[附源码]java毕业设计大学生家教服务推荐系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…...

简单介绍API分类接口

API其实就是一类服务的封装。我们可以使用不同的编程语言编写API&#xff0c;开发习惯和编程语言的不同导致API风格也存在差异。常见的API有以下几种形式&#xff1a; 1、HTTP类型接口 基于HTTP协议提供的API&#xff0c;这类API常常以“网址”形式提供的&#xff0c;像现在主…...

JSON相关知识点

JSON是工作中经常会遇到的一种数据结构&#xff0c;下面来讲讲与他相关的一些知识点。 JSON简介&#xff1a; JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法,类似 XML。 JSON 比 XML 更小、更快&#xff0c;更易解析。 JSONObj…...

每天五分钟机器学习:超平面分离定理和凸优化

凸集和凸函数 在点集拓扑学与欧几里得空间中,凸集是一个点集,其中每两点之间的直线上的点都落在该点集中。如下所示: 函数任意两点(x,f(x))和(y,f(y))连线上的值大于(x,y)区间内任意一点m的值f(m),那么这个函数就是一个凸函数: 超平面分离定理 空间中存在两类样本,…...

关于HSV了解这些就够了,python-opencv获取图片精确hsv的值

有时候想要获得一幅图片里面 某个物体的精确的hsv的值&#xff0c;需要怎么做呢&#xff1f; import cv2 import numpy as np from matplotlib import pyplot as pltimagecv2.imread(hsv.png) HSVcv2.cvtColor(image,cv2.COLOR_BGR2HSV) def getpos(event,x,y,flags,param):if…...

目标检测(6)—— YOLO系列V2

一、YOLOV2改进的概述 做的改进如下图&#xff1a; Batch Normalization 批量归一化层 不加BN层&#xff0c;网络可能学偏&#xff0c;加上归一化进行限制。 从今天来看&#xff0c;conv后加BN是标配。 更大的分辨率 V1训练的时候使用224224&#xff0c;测试用448448。 V2训…...

数据中心典型测试场景浅析

数据中心概述 数据中心泛指拥有众多服务器的大型机房&#xff0c;通过利用通信运营商已有的互联网通信线路、带宽资源&#xff0c;建立标准化的数据中心机房环境&#xff0c;具有运行速度快、存储量大、安全性高等特点。数据中心东西向流量的占比更大&#xff0c;传统的园区网…...

第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题4题

文章目录H. Hard CalculationI. Mr. Main and WindmillsL. Simone and graph coloringJ.Parallel Sort补题链接&#xff1a;https://ac.nowcoder.com/acm/contest/12548 H. Hard Calculation 链接&#xff1a;https://ac.nowcoder.com/acm/contest/12548/H 来源&#xff1a;牛…...

2022学年第一学期郑州大学ACM招新赛选拔赛

A SW的与众不同数组 — 签到 一共n个数&#xff0c; 用set无重复值的性质统计一下有几个不同的数&#xff0c;记为 res n - res 如果是偶数 每次删除两个刚好可以&#xff0c;如果是奇数需要再删除一个不重复的数完成对应操作 #include <iostream> #include <set>…...

牛客网 Applese 走方格

题目链接&#xff1a;点击查看 题解&#xff1a;我们容易发现到当n,m都为奇数时&#xff0c;是回不到原点的&#xff0c;因为你无论哪个方向走一去一回就是两步&#xff0c;所以n和m必然有一个偶数&#xff0c;那至于我们怎么走呢&#xff0c;看下图&#xff0c;注意的是n1,m2…...

mysql重置Root密码

方法一: 在my.ini的[mysqld]字段加入&#xff1a; skip-grant-tables 重启mysql服务&#xff0c;这时的mysql不需要密码即可登录数据库 然后进入mysql mysql>use mysql; mysql>更新 user set passwordpassword(新密码) WHERE Userroot; mysql>flush privileges; 运…...

胡扯推荐算法(协同)及其dome实现

文章目录前言推荐系统定义基本分类相似度计算欧式距离皮尔逊系数余弦相似度协同过滤案例数据定义相似度计算推荐svd奇异值分解优化完整代码总结前言 打瞌睡遇到送枕头的感觉真爽嘿嘿 BoyC啊 废话不多说&#xff0c;开始吧。 推荐系统定义 推荐系统(Recommendation System,…...

【蓝桥杯专项】动态规划_背包问题合集(Java)

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【蓝桥杯专项】 ✈️✈️本篇内容:动态规划_背包问题合集&#xff01; &#x1f680;&#x1f680;码云仓库gitee&#xff1a;Java数据结构代码存放! ⛵⛵作者简介…...

[LeetCode]-队列优先队列/堆

前言 记录 LeetCode 刷题时遇到的 队列 以及 优先队列相关题目 队列 225.用队列实现栈 用两个队列实现栈。建立两个队列&#xff0c;队列1和队列2。数据输入时输入到其中一个队列&#xff0c;要取出数据时&#xff0c;将这个有数据的队列的元素一个一个出队并进入另一个队列…...

C · 初阶 | 循环语句

啊我摔倒了..有没有人扶我起来学习.... &#x1f471;个人主页&#xff1a;《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ &#x1f492;个人社区&#xff1a;《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…...

idea常用技巧收集

idea相比eclipse的优点我在这里就不赘述了&#xff0c;更多参考&#xff1a;idea官网,本文重点讲下自己在idea使用过程中常用的一些技巧&#xff0c;以后随时更新…… 主要分成三大块&#xff1a; 1. 系统设置 2. 快捷键 3. 其他设置 系统设置 主题风格设置&#xff1a;默…...

深入理解spark高阶算子combineByKey

今天来详细说说spark中的一个比较底层的算子combineByKey。 熟悉spark的朋友应该知道&#xff0c;spark里面有很多类型的算子&#xff0c;有些比较基础&#xff0c;什么map&#xff0c;filter&#xff0c;可能看一眼就会了&#xff0c;有些稍微复杂点&#xff0c;但是也不难懂…...

架构设计 例子和实践 系统设计说明书

架构设计 例子和实践 系统设计说明书(架构、概要、详细)目录结构演进架构中的领域驱动设计Web架构设计经验分享软件架构设计从MVC框架看MVC架构的设计领域驱动设计(Domain Driven Design)参考架构详解关于垂直切分Vertical Sharding的粒度企业应用集成与开源ESB产品ServiceMix和…...

想要玩转实现负载均衡,你知道这些吗?

转载自 想要玩转实现负载均衡&#xff0c;你知道这些吗&#xff1f; 一、前言 互联网早期&#xff0c;业务流量比较小并且业务逻辑比较简单&#xff0c;单台服务器便可以满足基本的需求&#xff1b;但随着互联网的发展&#xff0c;业务流量越来越大并且业务逻辑也越来越复杂&…...

算法 - 里程表故障

题目描述 You are given a car odometer which displays the miles traveled as an integer. The odometer has a defect, however: it proceeds from the digit 2 to the digit 4 and from the digit 7 to the digit 9, always skipping over the digit 3 and 8. This defect…...

初识spring RestTemplate

《spring实战》读书笔记之初识spring RestTemplate。首先需要先了解下什么是REST。 REST&#xff1a;官方解释&#xff0c;表述性状态转移。 感觉还是不知所云&#xff0c;参考下怎样用通俗的语言解释REST&#xff0c;以及RESTful&#xff1f; 即URL定位资源&#xff0c;用H…...

程序员着装的改变

是什么力量&#xff0c;让任何地方的程序员都享有「免于体面的自由」&#xff1f; 在今天的社会里&#xff0c;工程师往往代表着知识水平和社会地位。每当普通人听到这个头衔&#xff0c;总会报之以敬仰的目光&#xff1a; 但有一种工程师&#xff0c;虽然也是如假包换的高级技…...