Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手

说明

  • 源代码
  • 2.x里有TCP的三次挥手与四次握手,先对它进行简单的回答(百度).预计在下一篇里,会继续说明TCP
  • 接上一篇: Android Studio — > [学习笔记]Button、TextView、EditText

2.5 RadioButton

  • 常用属性
  • 自定义样式
  • 监听事件

2.5.1 新建按钮,并跳转到相应的活动页面

1.在com.skypan.textview下新建一个RadioButtonActivity活动
2.在主样式,新增一个 RadioButton按钮

<Buttonandroid:id="@+id/btn_radiobutton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Radio Button"android:textAllCaps="false"/>

3.在主活动中,添加按钮的跳转事件

public class MainActivity extends AppCompatActivity {// 声明按钮private Button mBtnRadioButton;@overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mBtnRadioButton = (Button) findViewById(R.id.btn_radiobutton);mBtnRadioButton.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {// 跳转到 RadioButton 界面Intent intent = new Intent(MainActivity.this, RadioButtonActivity.class);startActivity(intent);}})}
}

2.5.2 封装View.OnClickListener

[说明] : 在主活动中,多次使用到这个方法,其中仅仅部分改变.因此将该方法提取出来.
1.提取出方法

private class OnClick implements View.OnClickListener{@Overridepublic void onClick(View v) {Intent intent = null;switch (v.getId()){case R.id.btn_textview:// 跳转到 TextView 演示界面intent = new Intent(MainActivity.this, TextViewActivity.class);break;case R.id.btn_button:intent = new Intent(MainActivity.this, ButtonActivity.class);break;case R.id.btn_edittext:intent = new Intent(MainActivity.this, EditTextActivity.class);break;case R.id.btn_radiobutton:intent = new Intent(MainActivity.this, RadioButtonActivity.class);break;}startActivity(intent);}
}

2.设置启动函数

private void setListeners(){Onclick onclick = new Onclick();mBtnTextView.setOnClickListener(onClick);mBtnButton.setOnClickListener(onClick);mBtnEditText.setOnClickListener(onClick);mBtnRadioButton.setOnClickListener(onClick);
}

2.5.3 单选按钮的监听事件:

  • 按钮组的布局如下:
<RadioGroupandroid:id="@+id/rg_1"...
/><RadioButtonandroid:id="@+id/rb_1"android:text=""/><RadioButtonandroid:id="@+id/rb_2"android:id=""/>
</RadioGroup>
  • 监听函数如下:
public class RadioButtonActivity extends AppCompatActivity {private RadioGroup mRg1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mRg1 = (RadioGroup) findViewById(R.id.rg_1);mRg1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {RadioButton radioButton = (RadioButton) group.findViewById(checkedId);Toast.makeText(RadioButtonActivity.this, radioButton.getText(),Toast.LENGTH.SHORT).show();}})}
}

[说明] :
1.一个活动对应的是一个类
2.所有活动都继承一个基类AppCompatActiviry
3.protected: 自己和子类都能使用.
4.private: 除了自己之外,其他类都无法使用

2.5.x 参数说明:

1.android:checked: 默认选中
2.android:state_checked="true": 点击时显示的样式
3.<solid android:color="#cc7a00">: 一个矩形的颜色填充块
4.<stroke android:width="1dp">: 1个单位宽度的矩形线
5.corners android:radius="15dp": 矩形的边角曲率15个单位

[报错]:
1.Variable 'intent' might not have been initialized: 变量intent没有初始化

2.6 复选框 CheckBox

  • 常用属性
  • 自定义样式
  • 监听事件

2.6.1 线性垂直布局 + 复选框基本语法

<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:layout_below="@id/cb_6"android:layout_marginTop="20dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20sp"android:text="你的兴趣:"android:textColor="#000"/><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/cb_7"android:text="编程"android:textSize="20sp"android:layout_marginTop="5sp" /><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/cb_8"android:text="编程"android:textSize="20sp"android:layout_marginTop="5sp"/></LinearLayout>

2.6.2 制作带图标的复选框

1.准备好2个图标 icon1icon2
2.将2个图标放入res/drawable-xxhdpi
3.准备选择器: bg_check.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:state_checked="false"android:drawable="@drawable/icon_checkbox_false" /><itemandroid:state_checked="true"android:drawable="@drawable/icon_checkbox_true" />
</selector>

[说明] :

  • (1)android:state_checked='false': 未选中
  • (2)android:drawble='@drawable/icon_checkbox_false': 使用icon_checkbox_false图标

4.在CheckBox中使用 Selector: bg_check.xml

<CheckBox...android:button="@drawable/bg_check"
>

2.6.3 给复选框添加事件

1.假设复选框的id为 cb_1cb_2
2.编写复选框的活动如下: CheckBoxActivity.java

public class CheckBoxActivity extends AppCompatActivity {// 声明控件private  CheckBox mCb1, mCb2;@overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// 获取控件的视图mCb1 = (CheckBox) findViewById(R.id.cb_1);mCb2 = (CheckBox) findViewById(R.id.cb_2);mCb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){@overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {Toast.makeText(CheckBoxActivity.this, isChecked? '1选中': '1取消', Toast.LENGTH_SHORT).show();}})mCb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){@overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {Toast.makeText(CheckBoxActivity.this, isChecked? '2选中': '2取消', Toast.LENGTH_SHORT).show();}})}
}

2.7 ImageView

  • Button的其他衍生控件: ToggleButton、Switch(略)
  • 常用属性
  • 加载网络图片

2.7.1 最基本的ImageView语法

  • activity_image_view.xml
<ImageViewandroid:layout_width="300dp"android:layout_height="200dp"android:background="#ff9900"android:src="@drawable/bg_icon_man"android:scaleType="fixXY"/>

[说明] :
1.android:scaleType="fixXY": 撑满控件,宽高比可能发生变化
2.android:scaleType="fitCenter": 保持宽高比缩放,直到能完全显示
3.android:scaleType="centerCrop": 保持宽高比缩放,直至完全覆盖控件,裁剪显示

2.7.2 使用ImageView加载一张网络图片

1.写好控件: activity_image_view.xml

<ImageViewandroid:id="@+id/iv_4"android:layout_width="200dp"android:layout_height="100dp"/>

2.配置glide: /app/build.gradle

repositories {mavenCentral()google()
}
dependencies {implementation 'com.github.bumptech.glide:glide:4.10.0'annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
}

[说明] :

  • (1)使用glide进行网络资源请求
  • (2)Android Studio编译器可以自动的按照 build.gradle 中的配置进行Jar包同步

3.获取控件iv_4,并使用glide往里面加资源

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.bumptech.glide.Glide;public class ImageViewActivity extends AppCompatActivity {private ImageView mIv4;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_image_view);mIv4 = (ImageView) findViewById(R.id.iv_4);Glide.with(this).load("https://www.baidu.com/img/bd_logo1.png").into(mIv4);}
}

[报错] :

  • 1)Request threw uncaught throwable java.lang.SecurityException: Permission denied (missing INTERNET permission?): 使用glide进行网络请求时,需要配置权限.在路径/app/src/main/AndroidMainfest.xml中添加网络权限如下:
<use-permission android:name="android.permission.INTERNET"  />

2.8 列表视图ListView(知道,被RecyclerView替代)

  • 常用属性
  • Adapter接口
  • Demo演示

2.8.1 创建一个ListViewActivity(手动导入依赖)

  • 1)在com.skypan.textview包下,新建一个包listview
  • 2)在listview下,新建一个Java类.注意: Name: ListViewActivitySuperclass: android.app.Activity
  • 3)创建视图: activity_listview.xml, 在路径 /app/src/main/res/layout
  • 4)完善ListViewActivity.java:
package com.skypan.textview.listview;
import android.app.Activity;
import andoird.os.Bundle;
import androidx.annotation.Nullable;
import com.skypan.textview.R;public class ListViewActivity extends Activity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_listview);}
}
  • 5)将AndroidManifex.xml声明ListViewActivity.java
<activity android:name=".listview.ListViewActivity" />

2.8.2 自定义颜色 + 使用

  • 1)在/app/src/main/res/values/colors.xml中写入自定义颜色,如下
<resources><color name="colorGray">#D5D5D5</color>
</resources>
  • 2)使用
<TextViewandroid:textColor="@color/colorGrayDark" />

2.8.3 自定义List View 按压样式

  • 1)新建一个选择器(Selector): /app/src/main/res/drawable -> new Drawable Resource file -> layout_list_item.xml
  • 2)list_item.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@color/colorAcecent" android:state_pressed="true" /><item android:drawable="@color/colorWhite" android:state_pressed="false" />
</selector>
  • 3)在List View中使用: activity_listview.xml
<ListViewandroid:id="@+id/lv_1"android:layout_width="match_parent"android:layout_height="wrap_content"android:listSelector="@drawable/list_item" />

2.8.4 List View的点击事件

[参数]:

  • 1)setOnItemClickListener: 点击事件
  • 2)setOnItemLongClickListener: 长按事件
import android.app.Activity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.ListViewpublic class ListViewActivity extends Activity {// 声明 ListView控件private ListView mLv1;@Overrideprotected void onCrete(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_listview);mLv1 = (ListView) findViewById(R.id.lv_1);mLv1.setAdapter(new MyListAdapter(ListViewActivity.this));mLv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(ListViewActivity.this, text:"点击了" + position, Toast.LENGTH_SHORT).show();}});}
}

[说明] :

  • 1)公有类ListViewActivity继承安卓的app下面的公有类Activity
  • 2)ListView来自Android.widget.ListView
  • 3)适配器类MyListAdapter代码如下:@/src/main/java/com.skypan.textview/listview/MyListAdapter.java
package com.skypan.textview.listview;import android.widget.BaseAdapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.TextView;
import android.view.View;
import android.view.ViewGroup;import com.bumptech.glide.Glide;
import com.skypan.textview.R;public class MyListAdapter extends BaseAdapter {private Context mContext;private LayoutInflater mLayoutInflater;public MyListAdapter(Context context) {this.mContext = context;mLayoutInflater = LayoutInflater.from(context);}@Overridepublic int getCount() { return 10; }@Overridepublic Object getItem(int position) { return null; }@Overridepublic long getItemId(int position) { return 0; }static class ViewHolders {public ImageView imageView;public TextView tvTitle, tvTime, tvContent;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if(convertView == null) {convertView = mLayoutInflater.inflate(R.layout.layout_list_item, null);holder = new ViewHolder();holder.imageView = (ImageView) convertView.findViewById(R.id.iv);holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);hodler.tvTime = (TextView) convertView.findViewById(R.id.tv_time);hodler.tvContent = (TextView) convertView.findViewById(R.id.tv_content);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}// 给控件赋值holder.tvTitle.setText('这是标题');holder.tvTime.setText('2088-08-08');holder.tvContent.setText('这是内容呐~!');Glide.with(mContext).load("https://www.baidu.com/img/bd_logo1.png").into(holder.imageView);return convertView;}
}

2.x TCP的三次握手与四次挥手

  • 原址
  • 1)请画出三次握手和四次挥手的示意图(略)
  • 2)为什么连接的时候是三次握手?
    参考

[try]:

  • (1)TCP作为一种可靠传输控制协议,其核心思想是: 既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两种方法.

  • (2)TCP可靠传输的精髓,TCP连接的一方A,由操作系统动态随机选取一个32位长的序列号(Initial Sequelize Number),假设A的初始序列号为1000,以该序列号为原点,对自己将要发送的每个字节的数据进行编号,1001,1002,1003…,并把自己的初始序号ISN告诉B,告诉B什么样编号的数据是合法的,什么编号的数据是非合法的,同时B还可以对A每一个编号的字节数据进行确认。如果A收到B的确认编号2001,则意味着字节编号1001~2000,共1000个字节已经安全到达

  • 3)什么是半连接队列?
    [try]: 在TCP三次握手中的第一次握手,客户端向服务器发送SYN包,客户端将该连接保存在半连接队列中

  • 4)ISN(Initial Sequence Number)是固定的吗?
    [try]: 不是固定的,随机ISN能避免非同一网络的攻击

  • 5)三次握手过程可以携带数据吗?
    [try]: 根据RFC793标准,TCP的前2次握手不允许携带数据,但是第三次握手允许携带数据

  • 6)如果第三次握手丢失了,客户端/服务端 会如何处理?
    参考

[try]:

  • (1)Server端: 此时Server端的状态为SYN_RECV,并且会根据TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送 SYN + ACK 包,以便Client重新发送ACK包.而Server重发SYN + ACK包的次数,可以通过设置/proc/sys/net/ipv4/tcp_synack_retries修改,默认值为5.如果重发次数达到指定的次数仍未收到client的ACK应答,那么一段时间后,Server自动关闭这个连接.
  • (2)Client端: Linux C中,client接收到 SYN + ACK包之后,它的TCP状态就为established,表示该连接已经建立.如果第三次握手中的ACK包丢失的情况下,Client向Server端发送数据,Server端将以RST包响应,方能感知Server的错误.
  • 7)SYN攻击是什么?
    [try]: TCP连接建立时,只发送 SYN包, 而不发送 ACK包.
  • 8)挥手为什么需要四次? (后面解读)
  • 9)四次挥手释放连接时,等待2MSL的意义? (后面解读)

2.x.x TCP全连接/半连接队列

  • 原址

  • 1)什么是半连接队列,全连接队列?
    [a] Linux内核协议栈为一个tcp连接管理使用两个队列,一个是半连接队列(用来保存SYN_SEN和SYN_RECV状态的请求),一个是全连接队列(acceptd队列)(用来保存处于established状态,但是应用层没有调用accept取走的请求.)

  • 2)TCP连接基本概念

    • 三次握手
      (1)第一次握手: 客户端发送syn包(syn=i)到服务器,并进入SYN_SEND状态,并等待服务器确认;
      (2)第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1), 同时也发送一个SYN包(syn=k), 即SYN + ACK包, 此时服务器进入 SYN_RECV 状态.
      (3)第三次握手: 客户端收到服务器的 SYN + ACK包,向服务器发送ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.
  • 3)半连接队列(sync queue) 和 全连接队列(accept queue)

    • (1)sync queue: 是服务器接收到客户端的第一次握手请求SYN后,将该连接加入到队列中,当收到客户端的ACK后,从列表中移出
    • (2)accept queue: 是服务器收到客户端ACK后,将连接加入到的队列,在连接进行accept处理后,从队列中移出.
  • 4)黑客攻击 - SYN洪水(SYN FLOOD)

    • SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的SYN请求,而不回复ACK,占用大量服务器的半连接队列资源,进而导致队列溢出,无法响应正常的连接请求,耗费CPU和内存资源.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷3171 网络吞吐量(网络流)

t开成n结果cur赋值的时候也只赋值到t令人智熄 【题目分析】 好吧我承认这个错误真的呵呵。。。。。。。。 题目有那~~~~~么长&#xff0c;然后画画图这道题就基本看出正解了&#xff0c;再一看数据范围&#xff0c;n<500简直良心&#xff0c;好了&#xff0c;网络流没得跑了…

DIV+CSS布局的优势和弊端

DIVCSS的优势1、符合W3C标准。这保证您的网站不会因为将来网络应用的升级而被淘汰。2、对浏览者和浏览器更具亲和力。由于CSS富含丰富的样式&#xff0c;使页面更加灵活性&#xff0c;它可以根据不同的浏览器&#xff0c;而达到显示效果的统一和不变形。这样就支持浏览器的向后…

Android Studio --- [学习笔记]TCP(第2弹)、GridView、ScrollView

说明 这篇主要接上一篇Android Studio — > [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手对上面回答的细解,并用JS伪代码,对TCP三次握手和四次挥手的简单实现.Android的基本了解到此篇结束,后续会根据具体情况深度学习. 2.y TCP的三次握手和四次挥…

MySQL中varchar最大长度是多少

一. varchar存储规则&#xff1a; 4.0版本以下&#xff0c;varchar(20)&#xff0c;指的是20字节&#xff0c;如果存放UTF8汉字时&#xff0c;只能存6个&#xff08;每个汉字3字节&#xff09; 5.0版本以上&#xff0c;varchar(20)&#xff0c;指的是20字符&#xff0c;无论存放…

bzoj 1232: [Usaco2008Nov]安慰奶牛cheer【最小生成树】

有趣 每条边在算答案的时候被算了二倍的边权值加上两个端点的权值&#xff0c;然后睡觉点额外加一次 所以可以用这个权做MST&#xff0c;然后加上点权最小的点 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N1…

JavaScript --- [学习笔记]观察者模式 理解对象 工厂模式 构造函数模式

说明 本系列(JS基础梳理)为后面TCP的模拟实现做准备本篇的主要内容: 观察者模式、工厂模式、构造函数模式 和 对对象的理解 1. 观察者模式 参考JavaScript设计模式 1.1 消息注册方法 “将订阅者注册的消息推入到消息队列中” [算法思路] : 在推入到消息队列时,如果此消息…

java_day19_MVC和配置文件

简单的MVC设计 MVC的全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码&#xff0c;将众多的业务逻辑聚集到一个部件…

Problem I: 打印金字塔

#include<stdio.h> int main() {int n,i,j,k;scanf("%d",&n);for(i1;i<n;i){for(j1;j<n-i;j)printf(" ");for(k1;k<2*i-1;k)printf("*");printf("\n");}return 0; } HINT 用双重循环做&#xff0c;外循环代表行数&…

webpack --- 发布环境的配置 代码压缩 代码分类

说明 源代码本篇主要对发布环境的配置说明前面2点是对webpack的一个复习.第3点开始,逐步配置部署代码 1. Webpack发布的策略 2.1 在实际开发中,一般会有两套方案: 开发期间的项目:包含了测试文件、测试数据、开发工具、测试工具等相关配置,有利于项目的开发和测试,但是这些文…

salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

在salesforce的classic中&#xff0c;我们使用{!expresion}在前台页面展示信息&#xff0c;在lightning中&#xff0c;上一篇我们也提及了&#xff0c;如果展示attribute的值&#xff0c;可以使用{!v.expresion}展示信息。 lightning在component中解析动态值的时候&#xff0c;…

sqlserver学习3---sql函数

一、SQL DML 和 DDL 可以把 SQL 分为两个部分&#xff1a;数据操作语言 (DML) 和 数据定义语言 (DDL)。 SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。 查询和更新指令构成了 SQL 的 DML 部分&#xff1a; SELECT - 从数据库…

JavaScript --- [学习笔记] 原型模式

说明 接JavaScript — > [学习笔记]观察者模式 & 理解对象 & 工厂模式 & 构造函数模式上一篇构造函数模式创建的实例,不同实例的同一个方法是不相等的,为了解决这个问题.出现了原型模式 1. 原型模式 具体做法是,不在构造函数中定义对象实例的信息,而是将这些…

网络协议各层概述

网络协议概述 OSI是一个开放性的通信系统互连参考模型&#xff0c;他是一个定义得非常好的协议规范。OSI模型有7层结构&#xff0c;每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层&#xff1b; 其中高层&…

A start job is running for Raise network interface(5min 13s )问题解决方法

命令&#xff1a;sudo vim /etc/systemd/system/network-online.target.wants/networking.service将里面的TimeoutStartSec5min 修改为TimeoutStartSec2sec 然后重启系统&#xff0c;就可以生效了&#xff0c;开机速度很快 转载于:https://www.cnblogs.com/sea-stream/p/98615…

javascript --- 实现对象的深拷贝

浅拷贝和深拷贝 浅拷贝: 只拷贝一层.当对象是复杂数据类型(Object、 Array)时,只拷贝引用深拷贝: 多层拷贝.复杂数据类型,会重新分配内存空间. 实现浅拷贝的2种方法 使用for ... in 实现 var obj {name: marron,age: 18,msg: {sex: "1" } } var o {}; for(let …

Qt与FFmpeg联合开发指南(二)——解码(2):封装和界面设计

与解码相关的主要代码在上一篇博客中已经做了介绍&#xff0c;本篇我们会先讨论一下如何控制解码速度再提供一个我个人的封装思路。最后回归到界面设计环节重点看一下如何保证播放器界面在缩放和拖动的过程中保证视频画面的宽高比例。 一、解码速度 播放器播放媒体文件的时候播…

Bzoj1051 受欢迎的牛

每一头牛的愿望就是变成一头最受欢迎的牛。现在有 N 头牛&#xff0c;给你 M 对整数 (A,B)&#xff0c;表示牛 A 认为牛 B 受欢迎。这种关系是具有传递性的&#xff0c;如果 A 认为 B 受欢迎&#xff0c;B 认为 C 受欢迎&#xff0c;那么牛 A 也认为牛 C 受欢迎。你的任务是求出…

node --- 模块加载机制

1. Node.js中模块加载机制 1.1 模块查找规则-当模块拥有路径但没有后缀时 require(./find.js); require(./find);require方法根据模块路径查找模块,如果是完整路径,直接进入模块如果模块后缀省略,先找同名JS文件再找同名JS文件夹 require(./find); // 以上会先找到命令行目录…

51Nod 蜥蜴和地下室(搜索)

哈利喜欢玩角色扮演的电脑游戏《蜥蜴和地下室》。此时&#xff0c;他正在扮演一个魔术师。在最后一关&#xff0c;他必须和一排的弓箭手战斗。他唯一能消灭他们的办法是一个火球咒语。如果哈利用他的火球咒语攻击第i个弓箭手&#xff08;他们从左到右标记&#xff09;&#xff…

多线程——实现Runnable接口实现一个多线程

实现Runnable接口实现一个多线程 Runnable接口源码&#xff1a; package java.lang; //Runnable接口源码只有一个run方法 public interface Runnable {public abstract void run(); } 实现Runnable的两个多线程类&#xff1a; public class RunnableThread1 implements Runnabl…