文档章节

bacula安装+配置+简单测试

1
 11Jerry11
发布于 2016/11/04 14:27
字数 2471
阅读 80
收藏 0
点赞 0
评论 0

一、基本拓扑

server端:192.168.232.31 包括:bacula-dirbacula-sd bconsole

client端:192.168.232.32 包括:bacula-fdbconsole

二、安装

1、下载bacula-5.2.13.tar.gz(server和client端),MySQL-community-release-el7-5.noarch.rpm(仅server端)

2、检查系统是否安装mysql相关,若有则删除干净

3、rpm -ivh mysql-community-release-el7-5.noarch.rpm(仅server端)

4、yum installmysql-devel(否则编译安装bacula,./configure提示找不到mysql.h文件)(仅server端)

5、server和client端解压bacula压缩包,cd bacula-5.2.13

server端执行./configure--prefix=/usr/local/bacula --with-mysql

client端执行./configure--prefix=/usr/local/bacula --enable-client-only

6、server端进入/usr/local/bacula/etc目录直接执行以下脚本文件:

./grant_mysql_privileges

./create_mysql_database

./make_mysql_tables

7、执行完成后查看mysql数据库showdatabases能够查看到bacula库

三、配置

提示:除了增加配置文件,还要注意baculadir baculasd baculafd console之间的密码和name相对应。

 

 

3.1 server端配置:

3.1.1、配置文件:bconsole.conf

Director {

 Name = ctl01-dir

 DIRport = 9101

 address = 192.168.232.31

 Password = "IM/TDS3/k2jrIXneqc67VAX9ag5qgVulqgCfGFDwWA5T"

}

3.1.2、配置文件:bacula-dir.conf

Director {                            # define myself

 Name = ctl01-dir

 DIRport = 9101                # where we listen for UAconnections

 QueryFile = "/usr/local/bacula/etc/query.sql"

 WorkingDirectory = "/usr/local/bacula/opt/bacula/working"

 PidDirectory = "/var/run"

 Maximum Concurrent Jobs = 1

 Password = "IM/TDS3/k2jrIXneqc67VAX9ag5qgVulqgCfGFDwWA5T"      #Console password

 Messages = Daemon

}

 

JobDefs {

 Name = "DefaultJob"

 Type = Backup

 Level = Incremental

 Client = ctl01-fd

 FileSet = "Full Set"

 Schedule = "WeeklyCycle"

 Storage = File

 Messages = Standard

 Pool = File

 Priority = 10

 Write Bootstrap ="/usr/local/bacula/opt/bacula/working/%c.bsr"

}

Job {

 Name = "BackupClient1"

 JobDefs = "DefaultJob"

}

 

Job {

 Name = "BackupCatalog"

 JobDefs = "DefaultJob"

 Level = Full

 FileSet="Catalog"

 Schedule = "WeeklyCycleAfterBackup"

 RunBeforeJob = "/usr/local/bacula/etc/make_catalog_backup.plMyCatalog"

 RunAfterJob  ="/usr/local/bacula/etc/delete_catalog_backup"

 Write Bootstrap ="/usr/local/bacula/opt/bacula/working/%n.bsr"

 Priority = 11                   #run after main backup

}

Job {

 Name = "RestoreFiles"

 Type = Restore

 Client=ctl01-fd

 FileSet="Full Set"

 Storage = File

 Pool = Default

 Messages = Standard

 Where = /tmp/bacula-restores

}

 

#########################definemyself####################

Job {

  Name = "FullBackup-zlj"

  Client = client_fd

  Level = Full

  Type = Backup

  FileSet = "Full Set"

  Schedule = "WeeklyCycle"

  Storage = File

  Messages = Standard

  Pool = dbpool

  Write Bootstrap ="/usr/local/bacula/working/client_fd.bsr"

}

##########################################################

 

FileSet {

 Name = "Full Set"

 Include {

   Options {

     signature = MD5

    }

      File = /aaa/bbb

  }

 

 Exclude {

   File = /usr/local/bacula/opt/bacula/working

   File = /tmp

   File = /proc

   File = /tmp

   File = /.journal

   File = /.fsck

  }

}

 

###################definemyself########################(后面暂时没测试到这个)

FileSet {

  Name = "Client_epsi"

  Include {

        Options {

                signature = MD5

                Compression = GZIP

                }

        File ="/usr/local/bacula/working/epsi"

        }

  Exclude {

    File = /usr/local/bacula/opt/bacula/working

    File = /tmp

    File = /proc

    File = /tmp

    File = /.journal

    File = /.fsck

  }

}

########################################################

Schedule {

 Name = "WeeklyCycle"

  Run= Full 1st sun at 23:05

  Run= Differential 2nd-5th sun at 23:05

  Run= Incremental mon-sat at 23:05

}

 

Schedule {

 Name = "WeeklyCycleAfterBackup"

  Run= Full sun-sat at 23:10

}

 

FileSet {

 Name = "Catalog"

 Include {

   Options {

     signature = MD5

    }

   File = "/usr/local/bacula/opt/bacula/working/bacula.sql"

  }

}

 

Client {

 Name = ctl01-fd

 Address = ctl01

 FDPort = 9102

 Catalog = MyCatalog

 Password = "erA2ioVHicekOCo4B3DHJh3e7X6IEFas1UiISRgwqfEg"          # password for FileDaemon

 File Retention = 30 days           # 30 days

  JobRetention = 6 months            # sixmonths

 AutoPrune = yes                    # Prune expired Jobs/Files

}

 

#######################definemyself#################

Client {

  Name = client_fd

  Address = 192.168.232.32

  FDPort = 9102

  Catalog = MyCatalog

  Password ="bG+0H5zyr6rhockPXN00EJbSmODElpVqTz/4GL/cgBbq"

  File Retention = 30 days

  Job Retention = 6 months

  AutoPrune = yes

}

#####################################################

 

Storage {

 Name = File

 Address = 192.168.232.31               # N.B. Use a fully qualified name here

 SDPort = 9103

 Password = "s0/iBw3fzLk4gxBYmhKzpKwgDW700xlEFW++tDDdmmQN"

 Device = FileStorage

 Media Type = File

}

 

Catalog {

 Name = MyCatalog

 dbname = "bacula"; dbuser = "bacula"; dbpassword =""

}

 

Messages {

 Name = Standard

 mailcommand = "/usr/local/bacula/sbin/bsmtp -h localhost -f\"Bacula \<%r\>\" -s \"Bacula: %t %e of %c %l\"%r"

 operatorcommand = "/usr/local/bacula/sbin/bsmtp -h localhost -f\"Bacula \<%r\>\" -s \"Bacula: Intervention needed for%j\" %r"

 mail = root@localhost = all, !skipped

 operator = root@localhost = mount

 console = all, !skipped, !saved

 append = "/usr/local/bacula/opt/bacula/log/bacula.log" = all,!skipped

 catalog = all

}

 

Messages {

 Name = Daemon

 mailcommand = "/usr/local/bacula/sbin/bsmtp -h localhost -f\"Bacula \<%r\>\" -s \"Bacula daemon message\"%r"

 mail = root@localhost = all, !skipped

 console = all, !skipped, !saved

 append = "/usr/local/bacula/opt/bacula/log/bacula.log" = all,!skipped

}

 

Pool {

 Name = Default

 Pool Type = Backup

 Recycle = yes                      # Bacula can automatically recycle Volumes

 AutoPrune = yes                    # Prune expired volumes

 Volume Retention = 365 days        # one year

}

 

Pool {

 Name = File

 Pool Type = Backup

 Recycle = yes                      # Bacula can automatically recycle Volumes

 AutoPrune = yes                    # Prune expired volumes

 Volume Retention = 365 days        # one year

 Maximum Volume Bytes = 50G         # Limit Volume size to something reasonable

 Maximum Volumes = 100              # Limit number of Volumes in Pool

}

 

Pool {

 Name = Scratch

 Pool Type = Backup

}

 

Pool {

  Name = dbpool

  Pool Type = Backup

  Recycle = yes

  AutoPrune = yes

  Volume Retention = 7 days

  Label Format ="db-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-id${JobId}"

  Maximum Volumes = 7

  Recycle Current Volume = yes

  Maximum Volume Jobs = 1

}

 

Console {

 Name = ctl01-mon

 Password = "nLspgR64RJweyZi6SH5Nba8cAA1SBKIT+rhlxhAXNId6"

  CommandACL= status, .status

}

 

3.1.3、配置文件:bacula-sd.conf

Storage {                             # definition ofmyself

 Name = ctl01-sd

 SDPort = 9103                  #Director's port     

 WorkingDirectory = "/usr/local/bacula/opt/bacula/working"

  PidDirectory = "/var/run"

 Maximum Concurrent Jobs = 20

}

 

Director {

 Name = ctl01-dir

 Password = "s0/iBw3fzLk4gxBYmhKzpKwgDW700xlEFW++tDDdmmQN"

}

 

Director {

 Name = ctl01-mon

 Password = "nLspgR64RJweyZi6SH5Nba8cAA1SBKIT+rhlxhAXNId6"

 Monitor = yes

}

 

Device {

 Name = FileStorage

 Media Type = File

 Archive Device = /tmp

 LabelMedia = yes;                  # lets Bacula label unlabeled media

 Random Access = Yes;

 AutomaticMount = yes;              # when device opened, read it

 RemovableMedia = no;

 AlwaysOpen = no;

}

 

Messages {

 Name = Standard

 director = ctl01-dir = all

}

 

3.2 Client端配置

3.2.1配置文件:bacula-fd.conf

Director {

 Name = ctl01-dir

 Password = "bG+0H5zyr6rhockPXN00EJbSmODElpVqTz/4GL/cgBbq"

}

 

Director {

 Name = ctl01-mon

 Password = "nLspgR64RJweyZi6SH5Nba8cAA1SBKIT+rhlxhAXNId6"

 Monitor = yes

}

 

FileDaemon {                          # this is me

 Name = ctl02-fd

 FDport = 9102                  #where we listen for the director

 WorkingDirectory = /usr/local/bacula/opt/bacula/working

  PidDirectory = /var/run

 Maximum Concurrent Jobs = 20

}

 

Messages {

 Name = Standard

 director = ctl02-dir = all, !skipped, !restored

}

3.2.2配置文件:bconsole.conf

Director {

 Name = ctl01-dir

 DIRport = 9101

 address = 192.168.232.31

 Password = "IM/TDS3/k2jrIXneqc67VAX9ag5qgVulqgCfGFDwWA5T"

}

 

四、启动

4.1、server端启动:

./bacula start 启动失败提示信息找不到libbacfind-5.2.13.so文件,find查看系统内有该文件

执行:

cd /usr/local/bacula/lib

ln -s/root/bacula-5.2.13/src/findlib/.libs/libbacfind-5.2.13.so./libbacfind-5.2.13.so

./bacula start启动成功

4.2、client端启动:

./bacula start

 

五、使用测试

5.1server端:

[root@ctl01 etc]# ./bconsole

Connecting to Director 192.168.232.31:9101

1000 OK: ctl01-dir Version: 5.2.13 (19February 2013)

Enter a period to cancel a command.

*label

Automatically selected Catalog: MyCatalog

Using Catalog "MyCatalog"

Automatically selected Storage: File

Enter new Volume name: test111

Defined Pools:

    1: Default

    2: File

    3: Scratch

    4: dbpool

Select the Pool (1-4): 4

Connecting to Storage daemon File at192.168.232.31:9103 ...

Sending label command for Volume"test111" Slot 0 ...

3000 OK label. VolBytes=192 DVD=0Volume="test111" Device="FileStorage" (/tmp)

Catalog record for Volume"test111", Slot 0  successfullycreated.

Requesting to mount FileStorage ...

3001 OK mount requested.Device="FileStorage" (/tmp)

You have messages.

*exit

 

5.2 Client端

[root@ctl02 etc]# ./bconsole

Connecting to Director 192.168.232.31:9101

1000 OK: ctl01-dir Version: 5.2.13 (19February 2013)

Enter a period to cancel a command.

*run

Automatically selected Catalog: MyCatalog

Using Catalog "MyCatalog"

A job name must be specified.

The defined Job resources are:

    1: BackupClient1

    2: BackupCatalog

    3: RestoreFiles

    4: FullBackup-zlj

Select Job resource (1-4): 4 //开始一个备份任务

Run Backup job

JobName: FullBackup-zlj

Level:   Full

Client:  client_fd

FileSet: Full Set

Pool:    dbpool (From Job resource)

Storage: File (From Job resource)

When:    2016-11-02 02:04:55

Priority: 10

OK to run? (yes/mod/no): yes

Job queued. JobId=11

You have messages.

* status                   //查看备份任务状态

Status available for:

    1: Director

    2: Storage

    3: Client

    4: All

Select daemon type for status (1-4): 3

The defined Client resources are:

    1: ctl01-fd

    2: client_fd

Select Client (File daemon) resource (1-2):2

Connecting to Client client_fd at192.168.232.32:9102

 

ctl02-fd Version: 5.2.13 (19 February2013)  x86_64-unknown-Linux-gnu redhat(Core)

Daemon started 01-Nov-16 21:52. Jobs: run=2running=0.

 Heap: heap=135,168 smbytes=102,339max_bytes=175,221 bufs=70 max_bufs=99

 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0

Running Jobs:

Director connected at: 02-Nov-16 02:05

No Jobs running.

====

Terminated Jobs:

 JobId Level    Files      Bytes  Status   Finished        Name

======================================================================

    1  Full          0         0  Error    01-Nov-16 03:05FullBackup-zlj

    2  Full          0         0  Cancel   01-Nov-16 03:17FullBackup-zlj

    3  Full          0         0  Cancel   01-Nov-16 03:52FullBackup-zlj

    4  Full          0        0   Cancel  01-Nov-16 04:56 FullBackup-zlj

    5  Full          0         0  Cancel   01-Nov-16 05:14FullBackup-zlj

    6  Full          2        42  OK       01-Nov-16 21:52FullBackup-zlj

    7                2        42  OK       01-Nov-16 22:34RestoreFiles

====

*exit

!!!!(delete可以删除一个label,cancel可以取消一个job,出现备份任务执行失败的问题,提示新建一个卷,卷不是append的状态,与pool的定义有关)

5.3 测试从备份恢复丢失的文件

5.3.1、首先在客户端删除bacula-dir中的FileSet逻辑段中定义的备份文件(我的测试文件是/aaa/bbb/test1)

5.3.2、恢复操作如下(Client端执行)

[root@ctl02 etc]# ./bconsole

Connecting to Director 192.168.232.31:9101

1000 OK: ctl01-dir Version: 5.2.13 (19February 2013)

Enter a period to cancel a command.

*restore

Automatically selected Catalog: MyCatalog

Using Catalog "MyCatalog"

 

First you select one or more JobIds thatcontain files

to be restored. You will be presentedseveral methods

of specifying the JobIds. Then you will beallowed to

select which files from those JobIds are tobe restored.

 

To select the JobIds, you have thefollowing choices:

    1: List last 20 Jobs run

    2: List Jobs where a given File is saved

    3: Enter list of comma separated JobIds to select

    4: Enter SQL list command

    5: Select the most recent backup for a client

    6: Select backup for a client before a specified time

    7: Enter a list of files to restore

    8: Enter a list of files to restore before a specified time

    9: Find the JobIds of the most recent backup for a client

   10: Find the JobIds for a backup for a client before a specified time

   11: Enter a list of directories to restore for found JobIds

   12: Select full restore to a specified Job date

   13: Cancel

Select item:  (1-13): 5

Defined Clients:

    1: client_fd

    2: ctl01-fd

Select the Client (1-2): 1

The defined FileSet resources are:

    1: Client_epsi

    2: Full Set

Select FileSet resource (1-2): 2

+-------+-------+----------+----------+---------------------+-------------+

| JobId | Level | JobFiles | JobBytes |StartTime           | VolumeName  |

+-------+-------+----------+----------+---------------------+-------------+

|    6 | F     |        2 |       42 | 2016-11-01 21:52:28 | backup-test |

+-------+-------+----------+----------+---------------------+-------------+

You have selected the following JobId: 6

 

Building directory tree for JobId(s) 6... 

1 files inserted into the tree.

 

You are now entering file selection modewhere you add (mark) and

remove (unmark) files to be restored. Nofiles are initially added, unless

you used the "all" keyword on thecommand line.

Enter "done" to leave this mode.

 

cwd is: /

$ mark *

2 files marked.

$ done  

Bootstrap records written to/usr/local/bacula/opt/bacula/working/ctl01-dir.restore.2.bsr

 

The job will require the following

  Volume(s)                Storage(s)                SDDevice(s)

===========================================================================

  

   backup-test              File                     FileStorage              

 

Volumes marked with "*" areonline.

 

 

2 files selected to be restored.

 

Run Restore job

JobName:         RestoreFiles

Bootstrap:      /usr/local/bacula/opt/bacula/working/ctl01-dir.restore.2.bsr

Where:           /tmp/bacula-restores

Replace:        always

FileSet:         Full Set

Backup Client:   client_fd

Restore Client:  client_fd

Storage:         File

When:            2016-11-02 02:12:03

Catalog:         MyCatalog

Priority:        10

Plugin Options:  *None*

 

OK to run? (yes/mod/no): mod

Parameters to modify:

    1: Level

    2: Storage

    3: Job

    4: FileSet

    5: Restore Client

    6: When

    7: Priority

    8: Bootstrap

    9: Where

   10: File Relocation

   11: Replace

   12: JobId

   13: Plugin Options

Select parameter to modify (1-13): 9

Please enter the full path prefix forrestore (/ for none): /

Run Restore job

JobName:         RestoreFiles

Bootstrap:      /usr/local/bacula/opt/bacula/working/ctl01-dir.restore.2.bsr

Where:          

Replace:         always

FileSet:         Full Set

Backup Client:   client_fd

Restore Client:  client_fd

Storage:         File

When:            2016-11-02 02:12:03

Catalog:         MyCatalog

Priority:        10

Plugin Options:  *None*

 

OK to run? (yes/mod/no): yes

Job queued. JobId=12

*exit

5.3.3 查看刚才被删除的/aaa/bbb/test1文件已经恢复。

 

附:bacula基础知识

1.支持多种备份方式

(1)完全备份

完全备份就是完整的备份业务数据。

优点:当数据丢失时,只是需要当时的备份就能还原

缺点:由于每天对整个系统进行完整备份,难免造成备份数据大量重复。不但占用大量空间成本也要增加,备份时间长。

(2)增量备份

增量备份以上次备份为基准的备份方式,只是对每次更新或者修改的时间进行备份。

优点:只是备份每天更新或者增加的数据数据量小节点了空间节省成本。

缺点:恢复过程比较麻烦。

(3)差异备份

差异备份是以完全备份为基准的一种备份方式。

假如星期一至星期五,星期1进行了一次完整备份,星期二会把星期1到星期2期间的数据不同的数据进行备份以此类推星期3会把星期1到星期3的不同的数据进行备份。

优点:避免了上面两种备份的缺陷。同时又具有上面两种方式的所有有点,他无需每天对系统做完全备份,因此备份数据量小,备份时间短,节省空间,灾难恢复简单只需要两个备份就可以将系统回复。

© 著作权归作者所有

共有 人打赏支持
1
粉丝 1
博文 5
码字总数 4330
作品 0
苏州
CentOS7下配置bacula-web

一、介绍 Bacula-Web是一个php编写的web应用,它能够运行在apache或者nginx上,主要可以做一个bacula的备份展示。 二、安装与配置 1)安装apache # sudo yum -y install httpd systemctl en...

冰冻vs西瓜 ⋅ 2017/11/29 ⋅ 0

Bacula安装配置指南[CentOS7]

介绍 Bacula是开源的网络备份解决方案,通过它你可以构建强壮灵活的备份系统,但是bacula相对其他解决方案会稍显笨重。但是备份系统在绝大多数的服务器基础设施中尤其重要,数据恢复也是灾备...

Firxiao ⋅ 2016/07/07 ⋅ 0

超全Linux备份工具集合,满足你的所有需要!

导读 个人计算机或者服务器上的备份对于防止数据丢失很重要。系统管理员每天需要处理大量的企业级数据,甚至个人计算机上的数据,所以要深入了解不同的备份工具。我们在本文中将介绍11款一流...

linuxprobe16 ⋅ 2016/12/07 ⋅ 0

好久不见webmin

一直不太习惯用Linux下的图形化的工具,但不得不说,现在Linux下的开源工具展示效果都还不错,因为生产用的bacula备份软件做备份,前段时间搭了一套bacula-web,用作备份展示都还不错,但美中...

冰冻vs西瓜 ⋅ 2017/12/26 ⋅ 0

备份管理工具--Bacula

Bacula是一套计算机程序,允许系统管理员来管理备份,恢复和核查在网络上的计算机数据。 它可以备份到不同类型的媒体,包括磁带和磁盘。在技术方面,它是一个网络客户机/服务器的备份程序。相...

匿名 ⋅ 2008/11/12 ⋅ 1

存储分析 开源重复数据删除技术崭露头角

就在几年时间里,重复数据删除从一个新生的而且只有非常大型的企业才能担负得起的技术变成一个几乎大部分备份和恢复解决方案都配置的技术。 重复数据删除已经变得如此重要以至于数据存储厂商...

红薯 ⋅ 2010/05/15 ⋅ 4

重复数据删除技术 开源软件成气候

仅仅在几年之内,重复数据删除已经从一个只有大企业才能买得起的技术变成了在备份和恢复领域普遍应用的功能。 重复数据删除已经变得如 此重要以至于数据存储厂商投入数百万、甚至数十亿美元来...

老枪 ⋅ 2010/05/26 ⋅ 1

Bacula 5.2.13 发布,备份管理系统

Bacula 放出最新稳定版5.2.13.2013-02-19.上一个版本是2012-00-11的5.2.11.此版本修正大量bug,目前最好的开源专业备份工具就是Bacula和Amanda。 Bacula是一套计算机程序,允许系统管理员来管...

fei ⋅ 2013/02/22 ⋅ 0

centos7安装防火墙firewalld

centos7已经将防火墙改为firewalld,默认的centos7 minimal是不自带firewalld,下面来安装吧 那我们访问原来的elasticsearch的head插件,发现已经不可以访问了 注:elasticsearch需要开放920...

weidedong ⋅ 2016/10/19 ⋅ 0

网站上线流程

上线的流程 1. 上线流程包含下列几个方面: 1.1. 网络规划 1.2. 系统规划 1.3. 数据迁移 2. 网络规划包含的内容 2.1. 挑选机房 2.2. 是否需要划分多个网段 2.3. 出口是否需要VSRP 2.4. 交换机...

yinxingyouyou ⋅ 2017/06/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

apollo配置中心的学习笔记

公司现在配置文件太多了,导致配置文件修改起来还是非常麻烦的。在boss(业务运营支撑系统)中,配置文件是存放在jar包的,通过应用jar包来引用配置文件(区分不同环境)。这种方式虽然能够满足...

miaojiangmin ⋅ 1分钟前 ⋅ 0

Jena增删改查AP

插入、更新数据 public static void insert(){ String query = "PREFIX book: <http://www.book.com/jinyong/> \n" + " INSERT DATA \n" + ......

Vincent-Duan ⋅ 2分钟前 ⋅ 0

springMVC之与json数据交互方法

因为我也要返回json数据。所以需要这个注解@ResponseBody,把Java对象转换成json字符串 注意: 1、@RequestBody不能省,因为前台发过来的数据是json数据,得用这个注解去解析该怎么接收这些数...

颖伙虫 ⋅ 6分钟前 ⋅ 0

用实例域代替序号(31)

1、许多枚举天生就与一个单独的int 值相关联 ordinal 方法,返回枚举常量在类型中的数字位置 下述,枚举修改很不方便,不好维护 永远不要根据枚举的序数导出与他相关联的值 而是将他保存在一...

职业搬砖20年 ⋅ 8分钟前 ⋅ 0

并发编程---ConcurrentHashMap源码解析

ConcurrentHashMap是java中为了解决HashMap不能支持高并发而设计的新的实现。 ConcurrentHashMap的类结构 public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements C......

千古一梦888 ⋅ 11分钟前 ⋅ 0

微服务 WildFly Swarm 简介

我们将看到的最后一个Java微服务框架是一个相对较新的场景,它利用了 JBoss WildFly 应用服务器中已试过且受信任的 JavaEE 功能。WildFly Swarm 是 WildFly 应用服务器的一个完整的拆下来的组...

woshixin ⋅ 16分钟前 ⋅ 0

android apk 瘦身

头条APK瘦身之路 随着版本迭代,功能增加安装包体积也会慢慢增大。 今日头条576版本APK达到了25M,通过一系列的优化,到目前的607版本为12M。本文主要是介绍头条APK瘦身中用到的一些方法。 ...

GoldenVein ⋅ 20分钟前 ⋅ 1

mac机器学习开发环境部署及helloworld

一、下载并安装Anaconda2.7 https://repo.anaconda.com/archive/Anaconda2-5.2.0-MacOSX-x86_64.pkg 路径:/Users/shijun/anaconda2 二、运行Anaconda Navigator -> Environments -> base(ro......

八戒八戒八戒 ⋅ 31分钟前 ⋅ 0

关于日常开发的经验总结(Java),持续更新中

常量尽量使用枚举来表示,这样表现力会很强,因为枚举比一个常量类要有更多的扩展性 方法的入参和出参尽量不要使用Map,因为Map会让调用者感到迷惑,他不知道你里面装的什么,面向对象的开发...

小99 ⋅ 31分钟前 ⋅ 0

IDEA创建SpringMVC+Mybatis+Maven项目

视频如下(加载有点慢请见谅,服务器不太好): 视频

影狼 ⋅ 31分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部