精华内容
下载资源
问答
  • 一次使用left join on的顺序 ![图片说明](https://img-ask.csdn.net/upload/201910/21/1571646019_241000.png) 第二次使用left join on的顺序 ![图片说明]...
  • 可为什么一次的代码没能把第一次输入的数据写入文件中。 b=r'C:\Users\v_pejiepeng\Desktop\be.txt' with open(b,'w')as c: for a in range(2): c.write(a) d=open(r'C:\Users\v_pejiepeng\Desktop\be....
  • 在网上看一些文章的时候,发现好几次下面这样的话:如果经常需要同时对两...想知道以下问题:1、是不是在任何情况下数据库查询一次只会使用到一个索引?2、如果不是,那么什么情况下只会使用一个索引?3、那分别是什...

    在网上看一些文章的时候,发现好几次下面这样的话:

    如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,而使用复合索引因为索引本身就对应到两个字段上的,效率会有很大提高。

    但是,往往都没有说为什么?想知道以下问题:

    1、是不是在任何情况下数据库查询一次只会使用到一个索引?

    2、如果不是,那么什么情况下只会使用一个索引?

    3、那分别是什么造成上面的查询索引使用问题呢?

    与其说是“数据库查询只能用到一个索引”,倒不是说是 和全表扫描/只使用一个索引的速度比起来,去分析两个索引二叉树更加耗费时间,所以绝大多数情况下数据库都是是用一个索引。

    如这条语句:

    select count(1) from table1 where column1 = 1 and column2 = 'foo' and column3 = 'bar'

    我们来想象一下当数据库有N个索引并且查询中分别都要用上他们的情况:

    查询优化器(用大白话说就是生成执行计划的那个东西)需要进行N次主二叉树查找[这里主二叉树的意思是最外层的索引节点],此处的查找流程大概如下:

    查出第一条column1主二叉树等于1的值,然后去第二条column2主二叉树查出foo的值并且当前行的coumn1必须等于1,最后去column主二叉树查找bar的值并且column1必须等于1和column2必须等于foo。

    如果这样的流程被查询优化器执行一遍,就算不死也半条命了,查询优化器可等不及把以上计划都执行一遍,贪婪算法(最近邻居算法)可不允许这种情况的发生,所以当遇到以下语句的时候,数据库只要用到第一个筛选列的索引(column1),就会直接去进行表扫描了。

    select count(1) from table1 where column1 = 1 and column2 = 'foo' and column3 = 'bar'

    所以与其说是数据库只支持一条查询语句只使用一个索引,倒不如说N条独立索引同时在一条语句使用的消耗比只使用一个索引还要慢。

    所以如上条的情况,最佳推荐是使用index(column1,column2,column3) 这种联合索引,此联合索引可以把b+tree结构的优势发挥得淋漓尽致:

    一条主二叉树(column=1),查询到column=1节点后基于当前节点进行二级二叉树column2=foo的查询,在二级二叉树查询到column2=foo后,去三级二叉树column3=bar查找。

    展开全文
  • 一次使用CSDN

    2016-06-16 15:55:57
    之前有好很多次在CSDN上面搜索技术问题,但是这是我第一次真正的写自己的博客。 希望有什么问题经常可以分享博客上在,也把自己的一些经历写上来。 之前看过一些人写的技术博客,感觉真的很不错,希望自己还是...

    之前有好很多次在CSDN上面搜索技术问题,但是这是我第一次真正的写自己的博客。

    希望有什么问题经常可以分享到博客上在,也把自己的一些经历写上来。

    之前看过一些人写的技术博客,感觉真的很不错,希望自己还是多努力一些,并且在IT这条路上走的更远、更长久。

    展开全文
  • 一次使用Docker部署漏洞靶场环境(以upload-labs为例)ECS的经历前言知识背景什么是DockerDocker教程资源什么是upload-labs过程记录Docker安装(使用的ECS系统为CentOS)部署upload-labs最后 这篇主要是为了记录...

    这篇主要是为了记录使用docker部署环境的的过程,
    方便自己下次可以很快的回忆起来,嗯。。。。。。。
    

    前言

    和同学合租了一台阿里云的ECS, 当时是大家一起在这台主机上搭建配置了一个论坛,后来经历了一次网站搬家,php环境大家一直懒得调23333,网址就坏了,网址:www.fucguigui.com.
    想着ECS放着也是放着,正好学习web安全的时候需要各种靶场,不如直接把靶场环境临时搭建在服务器上,这样使用起来也还算比较方便,不过靶场环境搭建的公网环境还是比较危险的,所以不用的时候可能会关。

    知识背景

    什么是Docker

    Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。
    一句话解释就是把我们要运行的东西打包在一个容器里面想用的时候随时能把容器拿出来的东西。

    Docker教程资源

    十分钟学会用docker部署微服务:https://my.oschina.net/u/3796575/blog/1838385
    Docker教程:https://my.oschina.net/u/3796575/blog/1838385

    什么是upload-labs

    upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。项目作者c0ny1,开源地址:https://github.com/c0ny1/upload-labs

    过程记录

    Docker安装(使用的ECS系统为CentOS)

    1、使用 root 权限登录 Centos。确保 yum 包更新到最新。

    # yum -y update
    

    2、卸载旧版本(如果安装过旧版本的话)

    # yum remove docker docker-common docker-selinux docker-engine
    

    3、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

    # yum install -y yum-utils device-mapper-persistent-data lvm2
    

    4、设置yum源

    # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    

    5、安装docker

    # yum install docker-ce 
    

    6、启动docker

    # service docker start
    

    7、测试docker安装

    # docker version
    

    如果docker成功安装此时会回显版本信息

    Client:
     Version:         1.13.1
     API version:     1.26
     Package version: docker-1.13.1-91.git07f3374.el7.centos.x86_64
     Go version:      go1.10.3
     Git commit:      07f3374/1.13.1
     Built:           Wed Feb 13 17:10:12 2019
     OS/Arch:         linux/amd64
    
    Server:
     Version:         1.13.1
     API version:     1.26 (minimum version 1.12)
     Package version: docker-1.13.1-91.git07f3374.el7.centos.x86_64
     Go version:      go1.10.3
     Git commit:      07f3374/1.13.1
     Built:           Wed Feb 13 17:10:12 2019
     OS/Arch:         linux/amd64
     Experimental:    false
    
    

    部署upload-labs

    登录ECS的ssh
    1、先克隆项目到本地/opt并解压

    cd ~/opt
    wget https://github.com/c0ny1/upload-labs/archive/0.1.tar.gz
    tar zxvf 0.1.tar.gz
    

    解压完之后会有一个upload-labs-0.1文件夹

    2、建立docker image

    [root@iZwz99pngxebunnn1fiexjZ opt]# cd upload-labs-0.1/
    [root@iZwz99pngxebunnn1fiexjZ upload-labs-0.1]# cd docker/
    [root@iZwz99pngxebunnn1fiexjZ docker]# ls
    1  Dockerfile  docker-php.conf  fg  php.ini
    
    

    可以看到这个目录下有的Dockerfiledocker-php.conf文件,根据这两个文件创建docker镜像的时候可以根据具体情况修改一下。因为我是用的ecs本来的/var/www目录下已经放了之前的网站源码,创建的时候uploads-labs的源码是被我放在/opt/upload-labs-0.1下,所以这里要修改一下docker-php.conf
    内容如下

    # <FilesMatch \.php$>
    #       SetHandler application/x-httpd-php
    # </FilesMatch>
    
    AddHandler application/x-httpd-php .php
    
    DirectoryIndex disabled
    DirectoryIndex index.php index.html
    
    <Directory /opt/upload-labs-0.1>
            Options -Indexes
            AllowOverride All
    </Directory>
    
    

    然后创建镜像

    [root@iZwz99pngxebunnn1fiexjZ docker]# pwd
    /opt/upload-labs-0.1/docker
    [root@iZwz99pngxebunnn1fiexjZ docker]# docker build -t upload-labs
    
    

    查看创建的images

    [root@iZwz99pngxebunnn1fiexjZ docker]# docker images
    REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
    upload-labs                          latest              c47b1eb092c4        3 minutes ago         472 MB
    
    

    3、运行这个镜像

    # docker run -d -p 252:80 upload-labs
    

    -d 表示的后台运行,-p 表示端口映射关系,252是宿主机的端口,80是docker的虚拟端口
    查看运行的镜像:

    [root@iZwz99pngxebunnn1fiexjZ ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                 NAMES
    60fbacda3b4e        upload-labs         "apache2-foreground"   3 hours ago         Up 3 hours          0.0.0.0:252->80/tcp   festive_goodall
    
    

    4、解决一点小问题
    阿里云的ECS安全组策略默认是不开放其他公网端口的,要去开放一下ECS安全组的252端口才能正常访问www.fucguigui.com:252
    试本次搭建的upload-labs,报错docker里面没有upload目录,
    项目作者介绍到这是由于github不支持上传空目录造成的,自己搭建环境的时候先打开点击“清空上传文件”按钮,即可生成upload目录,之后环境就正常了。

    最后

    其实创建docker镜像还有个更方便的方法,就是从docker镜像站拉取,镜像站一般你要的靶场环境其实都已经能搜到了,比如:sqli-labs, metasploitable,dvwa…等等等等。
    用好下面这两个命令

    docker search [要用的环境]
    docker pull [要拉取的]
    

    最后,这篇文章里面放出了自己搭建的在线靶场地址,如果靶场关了想玩儿也可以联系我,我还是非常乐意和各大佬一起交流学习的,各位大佬如果玩儿的话,轻点,轻点啊!!!!

    展开全文
  • android.support.v4.view.ViewPager扩展包的类,还有...首先进入封面,刚进去的提示帮助界面,第一次安装使用时出现,以后不出现  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="matc

    android.support.v4.view.ViewPager扩展包的类,还有地图api什么的引入的包这些只要你项目引入该包,该类不用考虑用户的手机版本

    首先进入封面,刚进去的提示帮助界面,第一次安装使用时出现,以后不出现

    <RelativeLayout 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.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </android.support.v4.view.ViewPager>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="50dp"
            android:layout_height="10dp"
            android:gravity="center"
            android:orientation="horizontal" >
            <TextView
                android:id="@+id/position_point_01"
                android:layout_width="10dp"
                android:layout_height="10dp"
                android:background="#00ff00" />
            <TextView
                android:layout_width="10dp"
                android:layout_height="10dp" />


            <TextView
                android:id="@+id/position_point_02"
                android:layout_width="10dp"
                android:layout_height="10dp"
                android:background="#666666" />
            <TextView
                android:layout_width="10dp"
                android:layout_height="10dp" />
            <TextView
                android:id="@+id/position_point_03"
                android:layout_width="10dp"
                android:layout_height="10dp"
                android:background="#666666" />
            <TextView
                android:layout_width="10dp"
                android:layout_height="10dp" />
            <TextView
                android:id="@+id/position_point_04"
                android:layout_width="10dp"
                android:layout_height="10dp"
                android:background="#666666" />
        </LinearLayout>
    </RelativeLayout>

    帮助界面的图片viewpager容器

    package com.kane.interviewcollection;
    import java.util.ArrayList;
    import java.util.List;
    import com.kane.interviewcollection.adapter.MyPageAdapter;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.TextView;
    public class HelpActivity extends Activity {
    private ViewPager pager;
    private MyPageAdapter pageAdapter;
    private List<View> allViews = new ArrayList<View>();
    private TextView[] allPoints = new TextView[4];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_help);
    pager = (ViewPager) findViewById(R.id.pager);
    //设置viewpager保存的view,若不设置,会一直添加经历过的view,会有bug
    pager.setOffscreenPageLimit(3);

    allPoints[0] = (TextView) findViewById(R.id.position_point_01);
    allPoints[1] = (TextView) findViewById(R.id.position_point_02);
    allPoints[2] = (TextView) findViewById(R.id.position_point_03);
    allPoints[3] = (TextView) findViewById(R.id.position_point_04);
    // 初始化数据
    allViews.add(LayoutInflater.from(this).inflate(R.layout.page_01, null));
    allViews.add(LayoutInflater.from(this).inflate(R.layout.page_02, null));
    allViews.add(LayoutInflater.from(this).inflate(R.layout.page_03, null));
    // 单独为第四个界面加入监听,进入主界面
    View page4 = LayoutInflater.from(this).inflate(R.layout.page_04, null);
    page4.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent in = new Intent(HelpActivity.this, MainActivity.class);
    startActivity(in);
    finish();
    }
    });
    allViews.add(page4);
    pageAdapter = new MyPageAdapter(allViews);
    pager.setAdapter(pageAdapter);
    // 为pager加入监听
    pager.setOnPageChangeListener(new OnPageChangeListener() {
    @Override
    public void onPageSelected(int arg0) {
    // 改变颜色
    for (int i = 0; i < allPoints.length; i++) {
    allPoints[i].setBackgroundColor(Color.parseColor("#666666"));
    }
    allPoints[arg0].setBackgroundColor(Color.GREEN);
    }
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }
    @Override
    public void onPageScrollStateChanged(int arg0) {
    }
    });
    }
    }

    主界面

    package com.kane.interviewcollection;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;


    import com.kane.interviewcollection.adapter.MyPageAdapter;
    import com.kane.interviewcollection.adapter.QuestionAdapter;
    import com.kane.interviewcollection.util.DialogManager;
    import com.kane.interviewcollection.util.ExitApplication;
    import com.kane.interviewcollection.util.Globals;
    import com.kane.interviewcollection.util.QuesstionDAOUtils;


    import android.os.Bundle;
    import android.app.Activity;
    import android.app.AlertDialog.Builder;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.graphics.Color;


    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.KeyEvent;
    import android.view.LayoutInflater;


    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AbsListView;
    import android.widget.AdapterView;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.PopupWindow;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.AbsListView.OnScrollListener;
    import android.widget.AdapterView.OnItemClickListener;
    /**
     * 既能实现滑动切换,也能实现点击切换
     * @author lenovo
     *
     */
    public class Main2Activity extends Activity {
    private ViewPager pager;
    TextView titleText;
    private Button settingBtn;
    // 下面的三个按钮
    private Button[] bottomBtns = new Button[3];

    // 未选中的按钮图片
    private int[] allBottomImgs = { R.drawable.bottom_icon01_a,
    R.drawable.bottom_icon02_a, R.drawable.bottom_icon03_a };
    // 选中的按钮图片
    private int[] allBottomImgsSelected = { R.drawable.bottom_icon01_b,
    R.drawable.bottom_icon02_b, R.drawable.bottom_icon03_b };


    // 声明循环为了在内部类使用
    private int i;


    // 点击设置按钮的浮动窗口
    private PopupWindow win;
    private MyPageAdapter pageAdapter;
    private List<View> allViews = new ArrayList<View>();


    // 所有头部要显示的标题内容
    private String[] allTitleText = { "程序员面试宝典", "全部问题", "搜索问题" };




    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ExitApplication.getInstance().addActivity(this);//每个activity创建的时候添加到activity列表
    setContentView(R.layout.activity_main2);
    //进行头部和尾部的初始化
    init("程序员面试宝典", 0);

    //保存一个标志,表示程序打开过,下次进来不用帮助界面,这里的SharedPreferences类似web的application,取得是在cover中同一个
    SharedPreferences s=getSharedPreferences("question_flag",
    MODE_PRIVATE);
    if (!s.getBoolean("showed", false)) {
    Editor e=s.edit();
    e.putBoolean("showed", true);
    e.commit();
    }

    pager=(ViewPager)findViewById(R.id.pager);
    //设置viewpager保存的view,若不设置,会一直添加经历过的view,会有bug
    pager.setOffscreenPageLimit(3);
    //添加界面
    allViews.add(LayoutInflater.from(this).inflate(R.layout.page_main, null));

    View questionView=LayoutInflater.from(this).inflate(R.layout.page_question,null);
    //初始问题列表
    initQuestionList(questionView);
    allViews.add(questionView);
    View searchView=LayoutInflater.from(this).inflate(R.layout.page_search, null);
    initSearch(searchView);
    allViews.add(searchView);

    pageAdapter=new MyPageAdapter(allViews);
    pager.setAdapter(pageAdapter);


    //为pager设置一个监听,当页面滑动切换时,可以调整头部和尾部信息
    pager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int arg0) {
    // 调整头部的文字
    titleText.setText(allTitleText[arg0]);
    if (arg0==1&&!keyword.equals("")) {
    titleText.setText("搜索: " + keyword);
    }
    //调整底部按钮显示
    for (int i = 0; i < bottomBtns.length; i++) {
    if (i==arg0) {
    bottomBtns[i].setBackgroundResource(allBottomImgsSelected[i]);
    }
    else {
    bottomBtns[i].setBackgroundResource(allBottomImgs[i]);
    }
    }
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub

    }
    });

    }

    private ListView listView;
    private QuestionAdapter adapter;
    private List<Map<String, Object>> allValues=new ArrayList<Map<String,Object>>();
    //声明几个分页的变量
    private int pageNo=1;
    private int pageSize=20;
    private int count=0;
    private int allPages=0;
    private String keyword="";
    //为了调用滑动事件中的内部类的另一个方法的参数
    private int first;
    private int visCount;
    private int total;

    private TextView footerText;
    public void initQuestionList(View questionListView) {
    listView=(ListView)questionListView.findViewById(R.id.list);
    //接收关键字
    keyword=getIntent().getStringExtra("keyword");
    if (keyword==null) {
     init("全部问题",1);
     keyword="";
    }
    else{
    //如果有关键词传入
    init("搜索:"+keyword,1);
    }
    allValues=QuesstionDAOUtils.listDataPage(pageNo,pageSize,keyword);
    //查询记录数
    count=QuesstionDAOUtils.getAllCount(keyword);
    //计算总页数
    allPages=(count-1)/pageSize+1;

    //加入一个提示的底部信息,每次下拉到分页的最后一个item
    footerText=new TextView(this);
    footerText.setText("z正在查询,请稍后.............");
    footerText.setTextColor(Color.BLACK);
    footerText.setTextSize(14);
    listView.addFooterView(footerText);

    //把数据加入到adapter里
    adapter=new QuestionAdapter(this, allValues);
    listView.setAdapter(adapter);
    //加入监听,点击后才可以看到答案
    listView.setOnItemClickListener(new OnItemClickListener(){


    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
    //取得数据
    Map<String,Object> map=allValues.get(arg2);
    LinearLayout line =(LinearLayout)arg1;//arg1是当前行界面
    if(line.getChildCount()==1){//里面只有问题那一个textview
    //加入答案的textview
    TextView text = new TextView(Main2Activity.this);
    text.setText(map.get("answer").toString());
    text.setTextSize(14);
    text.setTextColor(Color.RED);


    line.addView(text);
    map.put("showFlag", true);
    }
    else{
    //删除答案提示
    line.removeViewAt(1);
    map.put("showFlag", false);
    }


    }

    });

    /**
     * 滑动列表事件
     */
    listView.setOnScrollListener(new OnScrollListener(){


    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
    int visibleItemCount, int totalItemCount) {
    first = firstVisibleItem;
    visCount = visibleItemCount;
    total = totalItemCount;

    }


    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    if(scrollState==OnScrollListener.SCROLL_STATE_IDLE&&
    first+visCount==total&&total!=0){
    if(pageNo<allPages){
    //可以查询下一条数据
    pageNo++;
    //将新查询的数据合并到原有的数据集合
    allValues.addAll(QuesstionDAOUtils.listDataPage(pageNo,
    pageSize,keyword));
    //通知界面修改
    adapter.notifyDataSetChanged();
    }
    else{
    // 已经查询了全部的数据,将footer删除
    if (listView.getFooterViewsCount() > 0) {
    listView.removeFooterView(footerText);
    }
    }
    }

    }});
    }

    private Button searchBtn;
    private EditText searchText;
    public void initSearch(View searchView) {
    init("搜索问题",2);
    searchBtn=(Button) searchView.findViewById(R.id.searchBtn);
    searchText=(EditText)searchView.findViewById(R.id.searchText);
    searchBtn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    keyword=searchText.getText().toString();
    //将列表数据重新查询
    pageNo=1;
    allValues.clear();
    allValues.addAll(QuesstionDAOUtils.listDataPage(pageNo, pageSize, keyword));
    //重新显示列表
    adapter.notifyDataSetChanged();
    //滑动回列表界面
    pager.setCurrentItem(1,true);//1表示问题界面,true表示有变化过程


    }
    });
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    new DialogManager().showExitHit(this);
    return false;//执行上面,而不是默认的关闭activity
    }
    return super.onKeyDown(keyCode, event);//其他键原有功能保存
    }

    public void init(String title, int selectedBtn) {
    // 分别取得公共界面的组件
    settingBtn = (Button) findViewById(R.id.settingBtn);
    titleText = (TextView) findViewById(R.id.title);
    bottomBtns[0] = (Button) findViewById(R.id.bottom01);
    bottomBtns[1] = (Button) findViewById(R.id.bottom02);
    bottomBtns[2] = (Button) findViewById(R.id.bottom03);
    // 每个界面的标题不一样
    titleText.setText(title);
    // 循环为底部的按钮加入监听,这里的i内部类要用,在外面声明了
    for (i = 0; i < bottomBtns.length; i++) {
    // 定义个临时变量,防止i一直自增,因为循环完一边后i已经是2了,第二次循环一开始内部类中就是3了
    final int temp = i;
    if (i == selectedBtn) {
    // 选中的
    bottomBtns[i].setBackgroundResource(allBottomImgsSelected[i]);
    } else {
    // 没有选中的
    bottomBtns[i].setBackgroundResource(allBottomImgs[i]);
    // 加入监听
    bottomBtns[i].setOnClickListener(new OnClickListener() {


    @Override
    public void onClick(View v) {
    if (temp==1) {
    keyword="";
    }
    // 底部按钮点击后,应该自动切换到对应的界面
    pager.setCurrentItem(temp, true);

    }
    });
    }
    }
    /**
     * 设置按钮的监听事件
     */
    settingBtn.setOnClickListener(new OnClickListener() {


    @Override
    public void onClick(View v) {
    // 没有浮动框要添加
    if (win == null) {
    // 先设置宽高,再设置界面
    win = new PopupWindow(Globals.SCREEN_WIDTH / 4,
    Globals.SCERRN_HEIGHT / 6);
    View view = LayoutInflater.from(Main2Activity.this).inflate(
    R.layout.float_window, null);
    win.setContentView(view);


    // 加入这些内部按钮的监听
    TextView versionText = (TextView) view
    .findViewById(R.id.show_version);
    TextView authText = (TextView) view
    .findViewById(R.id.about_author);
    TextView exitText = (TextView) view.findViewById(R.id.exit);
    versionText.setOnClickListener(new OnClickListener() {


    @Override
    public void onClick(View v) {
    Toast.makeText(Main2Activity.this, "当前版本是: 1.0",
    Toast.LENGTH_LONG).show();
    win.dismiss();// 关闭窗口


    }
    });
    authText.setOnClickListener(new OnClickListener() {


    @Override
    public void onClick(View v) {
    Builder builder = new Builder(Main2Activity.this);
    builder.setTitle("提示");
    builder.setMessage("本作品由needkane发布,欢迎使用");
    builder.setNegativeButton("关闭",
    new DialogInterface.OnClickListener() {


    @Override
    public void onClick(
    DialogInterface dialog,
    int which) {
    // TODO Auto-generated method stub


    }
    });


    builder.create().show();
    win.dismiss();// 浮动窗口消失
    }
    });
    exitText.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // 退出程序
    }
    });
    }
    if (win.isShowing()) {
    // 隐藏
    win.dismiss();
    } else {
    // 显示
    win.showAsDropDown(settingBtn);
    }
    }
    });
    }


    }

    展开全文
  • 一次使用华为云,主要是目前正在学习springboot方面的知识,教程上面需要运用服务器,正好看到了华为云,就购买使用一下。反正可能以后自己也需要做很多东西,搭建自己的网站什么的,直接进就买了一年左右。支持...
  • 登录验证使用到了Redis做Token缓存,于是使用了Jedis库来操作阿里云服务器上的Redis。项目开始,我便随便从网上找了别人封装好了的Jedis的工具类,想着无非就是往Redis中做一些增删查操作,网上关于Redis+Token的...
  • 使用write函数 第一次将数据直接写文件尾部很耗时。 我写一个文件传输的工具,要实现断点续传,想将已传输的位置写文件尾部,但第一次将已传输的位置写文件尾部时很耗时,得好几分钟,请问有木有更好的方法,...
  • 什么使用握手

    千次阅读 2017-12-07 00:14:11
    握手的目的是“为了防止已经失效的连接请求报文段突然又传服务端,因而产生错误”,这种情况是:client端发出了个连接请求报文,而是因为某些未知的原因在某个网络节点上发生延迟、滞留,导致延迟连接释放...
  • //第一次进来正常使用 //循环第二次进来就没有输入操作了 age = sc.nextInt(); }catch (Exception e){ e.printStackTrace(); continue; } break; } ``` ``` //一次错误的输入之后就...
  • 一次握手:客户端A发送位码为SYN=1,随机产生序号seq=123的数据包服务器B,服务器B由SYN=1知道,A  要求建立联机; 第二次握手:服务器B收到请求后要确认联机信息,向A发送ACK=1,SYN=1,ack=(客户端A的seq+1)...
  • 一次 JVM CPU 使用率飙高问题的排查过程

    万次阅读 多人点赞 2017-04-26 20:12:59
    首先,我们一起看看通过 VisualVM 监控的机器 CPU 使用率图: ![cpu-usage]...如上图所示,在 **下午3:45** 分之前,CPU 的使用率明显飙高,最高飙近 100%,为什么会出现这样的现象呢?
  • 一次就会的python正则表达式的使用指南

    千次阅读 多人点赞 2020-03-06 22:31:11
    本文将会让你一次就看会如何使用Python正则表达式。 1. 正则表达式的组成 在介绍如何使用Python的正则表达式时,我们需要先认识一下正则表达式的各种功能,以及其组成形式如何。 正则表达式可以从非结构化的文本中...
  • 一次使用siege 第一次压力测试

    千次阅读 2010-10-29 14:52:00
    CPU要压到什么样?QPS多少能让自己认为可以?很是迷惑。   <br />关于siege是什么东西,以及有哪些参数,大家可以看看这篇文章:使用Siege进行WEB压力测试 我这里只记录一下我使用的过程而已
  • 一次使用blog

    2005-11-01 16:33:00
    现在上了这么多年网,依然怀旧,blog出现了这么长的时间,确是第一次使用。Web2.0的发展不等人地。 本来以为毕业了,工作空闲的时间就多了,可以多做一些自己的事情,做一些自己当初喜欢做却因为没有时间做的事。可...
  • 每次分配内存都只会使用Eden区和块Survivor区,对象默认是放在Eden区,但是如果对象太大了,Eden区放不下,那么就会放入老年代中,当发生gc时,就会把存活对象放块Survivor上,如果这块survivor区不够,...
  • 本文转载自微信公众号:漫话编程某天下班后,我在家里进行电话面试,问面试者这样个问题:"你知道使用哪些办法可以反编译Java代码吗?"。但是面试者回答的并不好,所以我在...
  • 不止一次的想要认真学习一下node,但是由于公司的项目中用不,导致学了之后也很快就忘了,这也是现在一直拖着的重大原因。想着能用node做什么好玩的事情,既能学一下node已不容易忘。想来想去好像写个爬虫比较靠谱...
  • 安卓最新版的微信支持修改微信号了消息一出就登上热搜第一▼安卓用户更新最新版微信,可修改微信号,入口在“我”-“个人信息”-“微信号”,符合条件的用户支持一年修改一次微信号。iOS用户也即将可以使用该功能...
  • 而且不是说好用java写Android程序么,这么多乱七八糟的东西都是什么(xml,gradle之类的,相信第一次点开我们看的都是头皮发麻吧)。不要紧,一个软件很多地方我们通常都不会用到,或者是几乎就用不,对于初学者的...
  • 我开发的应用,用户成功授权后,我保存了他的accessToken,可是当下直接用获取的accessToken请求FriendTimeline数据时,为什么不成功呢?oauth fail。难道需要每次都重新登录吗?我使用的是Oauth2的SDK,获取...
  • git的第一次使用教程

    2017-03-20 15:44:14
    :Git是什么?  Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别?  SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先...
  • 一次使用PPC

    千次阅读 2005-02-18 11:43:00
    刚刚拿到一个HP2210,安装了eVC4.2,准备做一些了解哈哈,第步新建第个简单的什么都不做的对话框程序晕,编译通不过,报出如下错误:CVTRES : fatal error CVT1102: out of memory; 40 bytes required LINK : fatal ...
  • 记得刚学springMVC那会儿,使用@responseBody这个注解总是达不自己想要的效果,但是又找不到底是为什么,所以后面就尽量避免使用该注解。今天闲来无事就想再来试试该注解,虽然过程很让我抓狂,但是最终还是成功...
  • Hadoop集群第一次启动为什么要格式化NameNode原因如何格式化 原因 1.Hadoop生态中的文件系统HDFS类似一块磁盘,初次使用硬盘需要格式化,让存储空间明白该按什么方式组织存储数据。 2.格式化NameNode会产生新的集群...
  • 什么使用云服务器 之前在本地搭建过个简易的"网站",实现了注册登录的功能。虽然很low,但是感觉学了很多东西。 初步实现了在本地建站,自己通过127.0.0.1或者自己的ip来访问自己。 注意本地使用apache搭建...
  • 一次使用Android Studio时你应该知道的一切配置 浏览次数:25130次 博客园 2015年04月06日 字号: 大 中 小 分享:QQ空间新浪微博腾讯微博人人网豆瓣网开心网更多6 最近网上流行起了程序猿鼓励师的...
  • 一次使用Blog

    2005-03-26 12:18:00
    看到很多大虾的Blog,感觉跟个人网页差不多,只是功能少了不少,都是按照一定的格式来组织的,没多少个性的东西。看了这么久,也要跟上点潮流啦,哈哈,所以我也申请了这个东西。以后有什么喜怒哀乐就放这里吧。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,579
精华内容 5,031
关键字:

一次使用到什么