日期: 2021 年 4 月 7 日

生成项目目录结构(based on windows system)

描述:

作为程序员,在工作中,我们经常会有需求,需要罗列出项目的结构图;如果手工来整理的话,太过浪费时间,其实我们可以借助tree命令来快速生成目录结构。

本文主要介绍一下,基于windows系统,如何快速生成目录结构的方法。

 

步骤:

1、开始 -> 运行 -> cmd -> 进入DOS命令行界面;

2、进入需要生成目录结构的项目主目录;

%title插图%num

3、输入命令行 tree /f > list.txt (其中list.txt是*终生成目录结构的文件名,可以自定义);

%title插图%num

4、在项目目录下,便会生成一个list.txt文件,如下图:

%title插图%num

 

本文只是基于windows系统来进行介绍,在Mac或者Linux下也可以使用tree列出项目结构,后续再介绍。

SQLite数据库的使用介绍

前言:

SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite*个Alpha版本诞生于2000年5月。

SQLite数据库,它广泛用于包括浏览器、IOS,Android以及一些便携需求的小型web应用系统。

接下来,我会通过一个登录功能来介绍一下SQLite数据库在实际Android项目中的使用。

 

SQLite数据库的常用操作:

包含建表、删除表、增、删、改、查,SQL语法如下:

建表:

create table if not exists 表名(字段1 类型(长度),字段2 类型(长度),...)

删除表:

drop table if exists 表名

增:

insert into 表名 (字段1,字段2,字段3 ...) values (值1,值2,值3 ...);

insert into 目标数据表 select * from 源数据表;

删:

delete from 表名 where 条件表达式

改:

update 表名 set 字段1=值1,字段2=值2... where 条件表达式

查:

select * from 表名 where 条件表达式

 

实例:

1、首先先创建一个DBHelper类(DBOpenHelper.java)

在这里会执行建库、建表的操作

%title插图%num View Code

 

2、进入登录界面

在点击登录按钮时,会去数据库里面进行查询,判断账号是否存在(Query查询范例)

 1 /**
 2  * login event
 3  * @param v
 4  */
 5 public void OnMyLoginClick(View v){
 6     //判断账号/密码是否有输入的处理...
 7 
 8     //调用DBOpenHelper (qianbao.db是创建的数据库的名称)
 9     DBOpenHelper helper = new DBOpenHelper(this,"qianbao.db",null,1);
10     SQLiteDatabase db = helper.getWritableDatabase();
11     //根据画面上输入的账号/密码去数据库中进行查询(user_tb是表名)
12     Cursor c = db.query("user_tb",null,"userID=? and pwd=?",new String[]{参数1的值,参数2的值},null,null,null);
13     //如果有查询到数据
14     if(c!=null && c.getCount() >= 1){
15         //可以把查询出来的值打印出来在后台显示/查看
16         /*String[] cols = c.getColumnNames();
17         while(c.moveToNext()){
18             for(String ColumnName:cols){
19                 Log.i("info",ColumnName+":"+c.getString(c.getColumnIndex(ColumnName)));
20             }
21         }*/
22         c.close();
23         db.close();
24 
25         this.finish();
26     }
27     //如果没有查询到数据
28     else{
29         Toast.makeText(this, "手机号或密码输入错误!", Toast.LENGTH_SHORT).show();
30     }
31 }

 

3、如果账号不存在,则需要去注册一个新账号(Insert新增范例)

 1 import com.hyl.dao.DBOpenHelper;
 2 
 3 import android.content.ContentValues;
 4 import android.database.Cursor;
 5 import android.database.sqlite.SQLiteDatabase;
 6 
 7 /**
 8  * register event
 9  * @param v
10  */
11 public void OnMyRegistClick(View v){
12     //对用户输入的值的格式进行判断的处理...
13 
14     //调用DBOpenHelper
15     DBOpenHelper helper = new DBOpenHelper(this,"qianbao.db",null,1);
16     SQLiteDatabase db = helper.getWritableDatabase();
17     //根据画面上输入的账号去数据库中进行查询
18     Cursor c = db.query("user_tb",null,"userID=?",new String[]{参数1的值},null,null,null);
19     //如果有查询到数据,则说明账号已存在
20     if(c!=null && c.getCount() >= 1){
21         Toast.makeText(this, "该用户已存在", Toast.LENGTH_SHORT).show();
22         c.close();
23     }
24     //如果没有查询到数据,则往数据库中insert一笔数据
25     else{
26         //insert data
27         ContentValues values= new ContentValues();
28         values.put("userID","画面上输入的值");
29         values.put("pwd","画面上输入的值");
30         long rowid = db.insert("user_tb",null,values);
31 
32         Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show();//提示信息
33         this.finish();
34     }
35     db.close();
36 }

 

4、如果用户忘记密码,则需要进行密码重置(Update修改范例)

 1 /**
 2  * confirm event
 3  */
 4 private void confirmInfo() {
 5     //对界面上用户输入的值进行判断的处理...
 6 
 7     //调用DBOpenHelper
 8     DBOpenHelper helper = new DBOpenHelper(this,"qianbao.db",null,1);
 9     SQLiteDatabase db = helper.getWritableDatabase();
10     //根据画面上输入的账号/密码去数据库中进行查询
11     Cursor c = db.query("user_tb",null,"userID=?",new String[]{editPhone.getText().toString()},null,null,null);
12     //如果有查询到数据,说明账号存在,可以进行密码重置操作
13     if(c!=null && c.getCount() >= 1){
14         ContentValues cv = new ContentValues();
15         cv.put("pwd", editPhone.getText().toString());//editPhone界面上的控件
16         String[] args = {String.valueOf(editPhone.getText().toString())};
17         long rowid = db.update("user_tb", cv, "userID=?",args);
18         c.close();
19         db.close();
20         Toast.makeText(this, "密码重置成功!", Toast.LENGTH_SHORT).show();
21         this.finish();
22     }
23     //如果没有查询到数据,提示用户到注册界面进行注册
24     else{
25         new AlertDialog.Builder(this)
26                 .setTitle("提示")
27                 .setMessage("该用户不存在,请到注册界面进行注册!")
28                 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
29                     public void onClick(DialogInterface dialog, int whichButton) {
30                         setResult(RESULT_OK);
31                         Intent intent=new Intent(当前重置密码界面.this,注册界面.class);
32                         当前重置密码界面.this.startActivity(intent);
33                     }
34                 })
35                 .setNegativeButton("取消", new DialogInterface.OnClickListener() {
36                     public void onClick(DialogInterface dialog, int whichButton) {
37                         return;
38                     }
39                 })
40                 .show();
41     }
42 }

 

以上是一个登录功能完整的处理流程,包含了建库、增/改/查数据等操作,希望能让大家对SQLite数据库在实际项目中的使用有一个大概了解,不足之处,欢迎指正。

Android中 ListView是*常用的控件之一

前言:

ListView这个列表控件在Android中是*常用的控件之一,几乎在所有的应用程序中都会使用到它。

目前正在做的一个记账本APP中就用到了它,主要是用它来呈现收支明细,是一个图文列表的呈现方式,下面就讲讲具体是如何实现的。

 

效果图:

该功能是在另一篇博文【Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 –简易版】的基础上进行添加的

%title插图%num

 

实现的思路:

1、该功能是用fragment来做布局的,首先创建一个fragment.xml布局文件,在里面添加一个ListView控件;

2、由于List里面既要呈现图片,也要呈现文字,所以再创建一个fragment_item.xml布局文件,在里面添加ImageView、TextView,用来显示图片和文字;

3、使用SimpleAdapter来绑定数据;

 

具体实现逻辑:

1、创建fragment_one.xml

1 <ListView
2     android:id="@+id/lv_expense"
3     android:layout_width="match_parent"
4     android:layout_height="wrap_content">
5 
6 </ListView>

 

2、创建fragment_one_item.xml

 

 1 <ImageView
 2     android:id="@+id/image_expense"
 3     android:layout_width="wrap_content"
 4     android:layout_height="wrap_content"
 5     android:paddingTop="10dp"
 6     android:paddingRight="10dp"
 7     android:paddingBottom="10dp"
 8     android:adjustViewBounds="true"
 9     android:maxWidth="72dp"
10     android:maxHeight="72dp"/>
11 <TextView
12     android:id="@+id/tv_expense_category"
13     android:layout_width="wrap_content"
14     android:layout_height="wrap_content"
15     android:layout_weight="1"
16     android:padding="10dp"/>
17 <TextView
18     android:id="@+id/tv_expense_money"
19     android:layout_width="wrap_content"
20     android:layout_height="wrap_content"
21     android:text="10.0000"/>

 

3、主逻辑OneFragment.java

 1 List<Map<String, Object>> listitem = new ArrayList<Map<String, Object>>(); //存储数据的数组列表
 2 //写死的数据,用于测试
 3 int[] image_expense = new int[]{R.mipmap.detail_income, R.mipmap.detail_payout }; //存储图片
 4 String[] expense_category = new String[] {"发工资", "买衣服"};
 5 String[] expense_money = new String[] {"30000.00", "1500.00"};
 6 for (int i = 0; i < image_expense.length; i++)
 7 {
 8     Map<String, Object> map = new HashMap<String, Object>();
 9     map.put("image_expense", image_expense[i]);
10     map.put("expense_category", expense_category[i]);
11     map.put("expense_money", expense_money[i]);
12     listitem.add(map);
13 }
14 
15 //创建适配器
16 // *个参数是上下文对象
17 // 第二个是listitem
18 // 第三个是指定每个列表项的布局文件
19 // 第四个是指定Map对象中定义的两个键(这里通过字符串数组来指定)
20 // 第五个是用于指定在布局文件中定义的id(也是用数组来指定)
21 SimpleAdapter adapter = new SimpleAdapter(getActivity()
22         , listitem
23         , R.layout.fragment_one_item
24         , new String[]{"expense_category", "expense_money", "image_expense"}
25         , new int[]{R.id.tv_expense_category, R.id.tv_expense_money, R.id.image_expense});
26         
27 ListView listView = (ListView) v.findViewById(R.id.lv_expense);
28 listView.setAdapter(adapter);

 

以上就是整个功能实现的逻辑,本文代码中,List中呈现的数据是写死的,从数据库中获取源数据的方式可以参考我的源代码,且使用的数据库是SQLite。

源代码:https://github.com/AnneHan/ListViewDemo

SQLite数据库的使用:Android Studio 通过一个登录功能介绍SQLite数据库的使用

快速搭建Spring Boot项目

Spring Boot简介:

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者(官网介绍)。

 

Spring Boot特点:

       1. 创建独立的Spring应用程序
       2. 嵌入的Tomcat,无需部署WAR文件
       3. 简化Maven配置
       4. 自动配置Spring
       5. 提供生产就绪型功能,如指标,健康检查和外部配置
       6. *对没有代码生成并且对XML也没有配置要求
快速入门:
       1、访问http://start.spring.io/
       2、填写相关的项目信息、jdk版本等(可参考下图)
    %title插图%num       3、点击Generate Project,就会生成一个maven项目的压缩包,下载项目压缩包

4、解压后,使用eclipse,Import -> Existing Maven Projects -> Next ->选择解压后的文件夹-> Finsh

 

项目结构介绍:

如下图所示,Spring Boot的基础结构共三个文件:

%title插图%num

src/main/java  –程序开发以及主程序入口

src/main/resources –配置文件

src/test/java  –测试程序

 

 

Spring Boot推荐的项目结构:

根目录:com.example.myproject

       1)domain:实体类(com.example.domain)

       2)Dao:数据访问层(com.example.repository)

       3)Service:数据服务接口层(com.example.service)

            ServiceImpl:数据服务实现层(com.example.service.impl)

       4)Controller:前端控制器(com.example.controller)

       5)utils:工具类(com.example.utils)

       6)constant:常量接口类(com.example.constant)

       7)config:配置信息类(com.example.config)

       8)dto:数据传输对象(Data Transfer Object,用于封装多个实体类(domain)之间的关系,不破坏原有的实体类结构)(com.example.dto)

       9)vo:视图包装对象(View Object,用于封装客户端请求的数据,防止部分数据泄露,保证数据安全,不破坏原有的实体类结构)(com.example.vo)

 

 

引入Web模块:

在pom.xml添加支持Web的模块

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-web</artifactId>
4 </dependency>

 

运行项目:

1、创建controller

 1 package com.example.annewebsite_server.controller;
 2 
 3 import org.springframework.web.bind.annotation.GetMapping;
 4 import org.springframework.web.bind.annotation.RestController;
 5 
 6 @RestController
 7 public class HelloController {
 8     @GetMapping("/hello")
 9     public String say(){
10         return "Hello Spring Boot!";
11     }
12 }

%title插图%num

 

2、启动项目入口

%title插图%num

 

 

3、项目启动成功

%title插图%num

 

4、在浏览器中进行访问(http://localhost:8080/hello)

%title插图%num

以上是一个Spring Boot项目的搭建过程,希望能够给正在学习Spring Boot的同仁带来一些些帮助,不足之处,欢迎指正。

Vue项目中引用vue-resource步骤

直接上步骤:

1、通过命令,进入到当前项目所在目录

%title插图%num

 

2、输入以下命令npm install vue-resource –save

%title插图%num

 

3、安装完毕后,在main.js中导入,如下:

1 import VueResource from 'vue-resource'
2 
3 Vue.use(VueResource)

 

这样就可以了

安装 Java 开发工具包JDK(Windows版本)

安装 Java 开发工具包JDK(Windows版本)

前言:

进行java开发,首先要安装jdk,安装完成之后,还需要进行环境变量配置,以下就介绍一下具体步骤

 

具体步骤:

1、进入官网(https://www.oracle.com/technetwork/java/javase/downloads/index.html)下载JDK,对应下载你需要的版本

2、把下载下来的exe进行安装

安装完成后,会在安装路径下生成两个文件夹,分别是jdk、jre

%title插图%num

 

3、环境变量配置:

a)右击我的电脑  -> 属性  -> 高级系统设置  -> 环境变量,进入环境变量设置界面

b)在系统变量里新建JAVA_HOME变量

JAVA_HOME:jdk的安装路径(Eg:D:\Program Files\Java\jdk1.8.0_65)

c)新建classpath变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

(备注:java加载类路径,只有类在classpath中java命令才能识别,在路径前加了个”.”表示当前路径)

d)在path变量(已存在不用新建)添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(注意变量值之间用“;”隔开)

(备注:系统在任何路径下都可以识别java,javac命令)

 

4、在cmd中输入命令javac,如果能正常打印用法说明配置成功

安装Maven 3,需要安装jdk1.7及以上版本

Maven的下载与安装(Windows版本)

安装Maven 3,需要安装jdk1.7及以上版本

 

具体步骤如下:

1、进入官网:http://maven.apache.org/download.cgi,如下图红框部分

其中:

apache-maven-3.5.4-bin.zip是压缩包,解压到安装路径即可

apache-maven-3.5.4-src.zip是maven源码

%title插图%num

 

2、将下载的压缩包解压至安装目录下

%title插图%num

 

3、配置环境变量MAVEN_HOME

%title插图%num

 

4、将【;%maven_home%\bin】追加到PATH路径中

(一般这样配置就可以了,但是有时候会提示mvn不是内部命令,那可能是在设置path变量时,覆盖了原有的值,这时候只要将之前配置的【;%maven_home%\bin】改为【;%SystemRoot%\system32;%maven_home%\bin】就可以了)

%title插图%num

 

 

5、在cmd中输入以下命令mvn -version,看是否配置成功

%title插图%num

 

Maven数据仓库的配置:

1、进入Maven的安装路径 -> conf -> 找到settings.xml文件,打开文件,找到localRepository标签,该标签默认是被注释掉的

保留原有的注释,新添加该标签,对应的路径可以自定义

(备注:

a.如果不设置,默认在C盘

b.将settings.xml复制一份到以下红框配置的路径中)

%title插图%num

 

2、配置中央仓库的镜像(改用阿里)

复制代码
1 <mirror>        
2   <id>nexus-aliyun</id>
3   <mirrorOf>central</mirrorOf>
4   <name>nexus-aliyun</name>
5   <url>http://maven.aliyun.com/nexus/content/groups/public</url>
6 </mirror>
复制代码

 

 在Eclipse中集成Maven

1、在preferences中进行配置,如下图:

%title插图%num

%title插图%num

 

 

2、点击File–>new–>other–>输入maven–>Maven Project,新建Maven项目

%title插图%num

 

错误信息处理:

1、index.jsp有报错,需要在pom.xml中导入 javaee-api.jar

1 <dependency>
2   <groupId>javax</groupId>
3   <artifactId>javaee-api</artifactId>
4   <version>7.0</version>
5 </dependency>

 

2、pom.xml*行报错:“org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)”

解决方案:

a)Eclipse -> Help -> Install New SoftWare

分别输入:

MavenArchiver

https://otto.takari.io/content/sites/m2e.extras/m2eclipse-mavenarchiver/0.17.2/N/LATEST/

%title插图%num

 

b)按照提示一直next

c)重启eclipse之后,执行maven-update project

 

以上是在windows系统中对于Maven的安装过程,以及在安装配置过程中出现的一些问题的整理,希望能够给有需要的同仁带来一些帮助。

使用AChartEngine制作饼图

 在很多项目中都会使用到图表,具体表现形式为饼图、折线图、柱状图等,但是网上有很多图表架包都是需要收费的,而Google的AChartEngine是免费的,于是AChartEngine就变成了首选方案,接下来就介绍一下AChartEngine在项目中的具体使用方法。

AChartEngine简介:

       AChartEngine是一款基于Android的图表绘制引擎;

       AChartEngine支持绘制饼图、柱状图、折线图、散点图等;

       AChartEngine绘制的图表都支持水平(默认)或垂直方式展示,并且支持许多其他的自定义功能;

       所有的图表都可以建立为一个view,也可以建立为一个用于启动activity的intent。

AChartEngine的运行机制:

       每个图表都需要一个数据集 (Dataset) 和 渲染器集合 (Renderer);

       数据集:由许多数据组成;

       渲染器:由不同的子渲染器组成;

       获取Activity 或 组件 : 图表工厂 (ChartFactory) 通过调用 数据集 (Dataset) 和 渲染器集合 (Renderer) 可以生成带图表的 GraphicalView 或者 GraphicalActivity。

效果图:

%title插图%num

具体步骤:

       1、下载AChartEngine库:http://code.google.com/p/achartengine/downloads/list

       2、将下载的jar包引入到项目中(具体方法可参考我的另一篇博文:Android Studio 在项目中引用第三方jar包 )

       3、构建数据集(Dataset),CategorySeries.add(String category,double value)

1 double[] values = {500.00, 800.00, 1000.00, 900.00};

2 double sumVal = values[0] + values[1] + values[2] + values[3];

3

4 CategorySeries dataset = buildCategoryDataset(“图文报表”, values);

5

6 protected CategorySeries buildCategoryDataset(String title, double[] values){

7 CategorySeries series = new CategorySeries(title);

8 series.add(“房租:”+values[0], values[0]/sumVal);

9 series.add(“伙食费:”+values[1], values[1]/sumVal);

10 series.add(“生活费:”+values[2], values[2]/sumVal);

11 series.add(“其它:”+values[3], values[3]/sumVal);

12 return series;

13 }

       4、构建渲染器(Renderer)

            饼图的渲染器:

1 private DefaultRenderer getPieRenderer(){

2 DefaultRenderer renderer = new DefaultRenderer();

3 renderer.setZoomButtonsVisible(true);//设置显示放大放小缩小按钮

4 renderer.setZoomEnabled(true);//设置允许放大放小

5 //设置各个类别分别对应的颜色

6 SimpleSeriesRenderer yellowRenderer = new SimpleSeriesRenderer();

7 yellowRenderer.setColor(Color.YELLOW);

8 SimpleSeriesRenderer blueRenderer = new SimpleSeriesRenderer();

9 blueRenderer.setColor(Color.BLUE);

10 SimpleSeriesRenderer redRenderer = new SimpleSeriesRenderer();

11 redRenderer.setColor(Color.RED);

12 renderer.addSeriesRenderer(yellowRenderer);

13 renderer.addSeriesRenderer(blueRenderer);

14 renderer.addSeriesRenderer(redRenderer);

15

16 renderer.setLabelsTextSize(30);//设置坐标字号

17 renderer.setLegendTextSize(50);//设置图例字号

18 renderer.setApplyBackgroundColor(true);//设置是否应用背景色

19 renderer.setBackgroundColor(Color.BLACK);

20

21 return renderer;

22 }

            对应的颜色:

1 int[] colors = {Color.BLUE, Color.GREEN, Color.MAGENTA, Color.RED};

2

3 DefaultRenderer renderer = buildCategoryRenderer(colors);

4

5 protected DefaultRenderer buildCategoryRenderer(int[] colors){

6 DefaultRenderer renderer = new DefaultRenderer();

7 renderer.setLegendTextSize(35);//设置左下角标注文字的大小

8 renderer.setLabelsTextSize(25);//饼图上标记文字的字体大小

9 renderer.setLabelsColor(Color.BLACK);//饼图上标记文字的颜色

10 renderer.setPanEnabled(false);

11 renderer.setDisplayValues(true);//显示数据

12

13

14 for(int color : colors){

15 SimpleSeriesRenderer r = new SimpleSeriesRenderer();

16 r.setColor(color);

17 //设置百分比

18 r.setChartValuesFormat(NumberFormat.getPercentInstance());

19 renderer.addSeriesRenderer(r);

20 }

21 return renderer;

22 }

       5、生成饼图

            有两种方式:调用ChartFactory.getPieChartIntent() 或者 getPieChartView()

            区别在于:

            一个返回Intent,这个intent可以启动一个特定的activity;

            另一个返回GraphicalView,这个GraphicalView可以灵活设置,它可以仅作为一部分显示在任何activity上

            用ChartFactory.getPieChartIntent()方法生成饼图:

            %title插图%num

            (备注:使用该方法的话,则需要在AndroidManifest.xml中注册org.achartengine.GraphicalActivity,添加位置如下图:)

            %title插图%num

            用ChartFactory.getPieChartView()方法生成饼图:

            先在布局文件中创建控件:

1 <LinearLayout

2          android:id=”@+id/ll_expense_piechart”

3          android:layout_width=”wrap_content”

4          android:layout_height=”wrap_content”

5          android:layout_centerHorizontal=”true”

6          android:layout_centerVertical=”true”

7          android:orientation=”vertical”>

8 </LinearLayout>

            Activity文件中生成饼图:

%title插图%num

Renderer常用的设置:

       addSeriesRenderer(SimpleSeriesRenderer renderer)增加一个renderer到multiple  renderer中

       setApplyBackgroundColor(boolean apply) 设置是否应用背景色

       setBackgroundColor(int color) 设置背景色

       setChartTitle(java.lang.String title)设置图表的标题

       setChartTitleTextSize(float textSize)设置图表标题字号

       setClickEnabled(boolean enabled) 设置是否允许单击事件

       setFitLegend(boolean fit) 设置图例字号自适应

       setLegendHeight(int height)设置图例高度(单位: pixels)

       setLegendTextSize(float textSize) 设置图例字号

       setPanEnabled(boolean enabled) 设置是否允许拖动

       setShowLegend(boolean showLegend) 设置是否显示图例

       setTextTypeface(java.lang.String typefaceName, int style) 设置字体名和类型

       setZoomButtonsVisible(boolean visible) 设置是否显示放大缩小按钮

       setZoomEnabled(boolean enabled) 设置是否允许放大和缩小

       setZoomRate(float rate) 设置放大缩小的倍率

       setDisplayValues(boolean enabled) 设置是否显示数据

       setChartValuesFormat(NumberFormat format) 设置百分比

如果服务器被 DDos,不能正常访问,*反应应该如何处理?

如题。

另外一个*端的情况是被大量的流量攻击导致服务器都不能登录上去了,比如说 windows 的 3389 不能登录了,这时候又应该如何应对呢?

刚接手运维,对这方面的处理没有任何经验,还请大牛不吝赐教。

第 1 条附言  ·  2017-03-19 21:29:09 +08:00

谢谢大家的回复,这里补充一下: CDN 已在考虑中,公司目前租的腾讯云服务器,按官方的说明应该是带一定的防护功能的,只是不知道效果如何? web 方面打算安装安全狗,防止注入之类的攻击。
• 2017-04-28 09:35:46 +08:00
oldliu 1
oldliu 2017-03-19 18:14:55 +08:00
断开外网就好了啊。。这有啥。。
oldliu 2
oldliu 2017-03-19 18:15:57 +08:00
如果你不在机房,那你让机房把你的 ip 空路由,然后再用机房的另一台机器链接就行了啊。。
xxoxx 3
xxoxx 2017-03-19 18:27:45 +08:00
@oldliu 谢谢回复。断外网确实是一个方法,但是断外网对公司业务会有一定影响。
oldliu 4
oldliu 2017-03-19 18:43:27 +08:00
@xxoxx 那就加 cdn 把源站隐藏就好。被 DDOS 就换节点。
zrj766 5
zrj766 2017-03-19 18:53:11 +08:00 via Android
上 CDN
备用节点
睡觉
barbery 6
barbery 2017-03-19 20:56:20 +08:00
上周刚被 DD 攻击,没啥办法,要么停机换 IP ,要么交保护费上 DDOS 防护
loading 7
loading 2017-03-19 21:42:02 +08:00 via Android
windows 3389…这个例子……
直接叫人停服吧。
wangzhangwei 8
wangzhangwei 2017-03-19 22:36:46 +08:00
个人建议:外地找个抗攻击机房节点,价格相对阿里、腾讯的防攻击服务优惠不很多哦。如果平时没攻击可以做为一个测试节点或灾备用。
Laynooor 9
Laynooor 2017-03-20 00:33:37 +08:00 via Android
被攻击就自动切换到防 D 的备用服务器
duansindo 10
duansindo 2017-03-20 00:40:50 +08:00 via iPhone
切换会不会很麻烦?

webjin1 11
webjin1 2017-03-20 01:28:52 +08:00
默认的 3389 端口修改下,如果是被盯上了,无解。如果是被那些无脑的扫鸡还是可以预防下的。被盯上了的话,只有放有硬防护的机房。
akira 12
akira 2017-03-20 01:43:34 +08:00
多 ip 切换,上 cdn 。*好的方案还是找出是谁做的
lecher 13
lecher 2017-03-20 01:53:08 +08:00 ❤️ 1
对于小型项目被 DDOS 。
*,找机房,机房能不能帮忙清洗流量。如果不能,可不可以通过增加带宽的方式把流量吃下来,吃得下来就有机会找办法清洗。
第二,此机房已被打跨或者机房不愿意清洗流量,考虑临时上 CDN ,先把服务降级,先保证服务器的非交互可以正常展现,比如首页之类的。
第三,实在不行就请求机房关闭外网,先走内网连接登录服务器改改安全配置,只要不是带宽被 D 光的攻击,比如 CPU 或者内容消耗型的,找找性能瓶颈或者降级业务,先保证服务器能提供基本业务。

如果又用不起可以清洗流量的机房,又没钱买 CDN ,那就等死。

此外网站安全靠代码, windows 上面的安全狗之类的都是 cpu 大户,所有请求全拦截进行分析,装上去,没等别人 DDOS ,用户流量大一点,就先把服务器 CPU 爆掉了,*好不要浪费资源在这种软件上面。

临时迁移域名解析有个坑,用户的 DNS 解析记录更新是很慢的,如果就服务器没有做好反代新服务器的配置。
直接切换并且旧服务器关闭,大概率面临某些地区用户丢失一周无法访问。
如果迁移没有关闭旧服务器,又不做反代或者数据同步方案,大概率出现某些地区用户依然访问旧服务器数据分裂不一致。
binux 14
binux 2017-03-20 02:07:25 +08:00
有钱找机房,没钱回去睡觉。
qcloud 15
qcloud 2017-03-20 09:36:08 +08:00 via iPhone
@binux 哈哈哈哈,笑出声
johnnyR 16
johnnyR 2017-04-02 15:58:27 +08:00
@zrj766 找不到 IP 可以直接 D 域名吗
KanVivii 17
KanVivii 2017-04-10 11:03:53 +08:00
@wangzhangwei
@lecher
想问一下大佬 比如我现在香港的服务器 A 被 D 无法正常访问,那我怎么能做到切换到香港的服务器 B 呀
这两台服务器怎么同步数据或者说怎么部署呀
wangzhangwei 18
wangzhangwei 2017-04-10 11:49:18 +08:00
如果本地有备份的话,上传到服务器 B 或者到服务器 B 所在的机房。如果没有就按照 @lecher 的方法哦。
一般都会提前做 A 和 B 的同步,具体网上有挺多方法的。
caogen9 19
caogen9 2017-04-28 00:47:08 +08:00
*有效的就是清洗了
qq1242245799 20
qq1242245799 2017-04-28 09:35:46 +08:00
香港服务器都没有真实防御,防御都是通过 cdn 跳转来实现的,一般是跳美国或者东南亚吧,需要租用香港服务器的找我,自建机房,一手资源,bgp 多线路出口

项目前端Vue.js环境搭建

*近在考虑搭建个人网站,想了想决定采用前后端分离模式

前端使用Vue,负责接收数据

后端使用Spring Boot,负责提供前端需要的API

就这样开启了我边学习边实践之旅

 

 

Vue环境搭建步骤:

1、安装node.js

a)进入node.js官网(https://nodejs.org/en/download/),选择对应版本下载,并进行安装(安装时,按照提示,一直next)

b)验证node.js是否有安装好:打开命令行窗口,输入node -v,会返回对应的node.js版本号

%title插图%num

c)npm包管理器是集成在node.js中,在安装node.js时已安装了npm,所以不需要特别再安装,在命令行窗口中,输入npm -v,即可得到npm版本号

%title插图%num

d)输入以下命令npm -g install npm,可更新npm至*新版本

%title插图%num

2、安装cnpm

a)输入以下命令npm install -g cnpm –registry=https://registry.npm.taobao.org,使用npm国内镜像(https://npm.taobao.org/)

%title插图%num

3、使用安装vue脚手架vue-cli

a)输入以下命令cnpm install -g vue-cli,安装脚手架

%title插图%num

b)输入以下命令vue -V,查看vue版本号

%title插图%num

 

创建项目:

可自定义将项目创建到某个路径下(Eg:G:\workspace-vue)

a)通过命令进入该路径

%title插图%num

b)输入以下命令新建项目vue init webpack annewebsite,执行后会自动生成vue项目

%title插图%num

%title插图%num

c)在实体目录下进行查看

%title插图%num

 

安装项目依赖:

以上通过脚手架创建的vue项目,还不能直接运行,需要加载上项目需要的依赖包才能运行

a)通过命令进入到项目所在目录(G:\workspace-vue\annewebsite)

%title插图%num

b)输入以下命令cnpm install,安装项目所需的依赖包

%title插图%num

 

运行项目:

项目已经配置完毕,可以开始运行项目,看一看初始效果了

a)通过命令进入到项目所在目录(G:\workspace-vue\annewebsite)

b)输入以下命令npm run dev,来运行项目

%title插图%num

%title插图%num

c)在浏览器中访问项目,查看效果

%title插图%num

 

备注:

以上就是整个项目的环境搭建过程,可以在工具中查看项目目录,后续的开发工作都将在src目录下进行

%title插图%num

 

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速