蘇州培訓(xùn)網(wǎng) > 蘇州JAVA培訓(xùn)機(jī)構(gòu) > 蘇州其然軟件開發(fā)培訓(xùn)
首頁 培訓(xùn)網(wǎng) 最新資訊 熱門問答

蘇州其然軟件開發(fā)培訓(xùn)

免費(fèi)試聽

您當(dāng)前的位置: 蘇州IT認(rèn)證培訓(xùn) > 蘇州JAVA培訓(xùn) > 張家港java開發(fā)培訓(xùn)學(xué)習(xí)班

張家港java開發(fā)培訓(xùn)學(xué)習(xí)班_JAVA培訓(xùn)

¥詳詢

班制:周末班

蘇州其然軟件開發(fā)
上課(咨詢)地址:蘇州市昆山市震川西路111號(hào)名仕大廈
報(bào)名咨詢 預(yù)約試聽
課程介紹
張家港java開發(fā)培訓(xùn)學(xué)習(xí)班
其然IT 教育環(huán)境

張家港java開發(fā)培訓(xùn)學(xué)習(xí)班

張家港java開發(fā)培訓(xùn)學(xué)習(xí)班

java入門要注意什么

張家港java開發(fā)培訓(xùn)學(xué)習(xí)班

學(xué)習(xí)java就像是一個(gè)種花的過程,不斷地為其施肥澆水,它才會(huì)茁壯成長(zhǎng)。 而我們學(xué)習(xí)java,就要不斷的充實(shí)自己、提升自己,才能獲得更多機(jī)會(huì)。很多開始學(xué)習(xí)java編程的小白,經(jīng)常就會(huì)被概念、定義什么的搞糊涂。當(dāng)分類 、對(duì)象、接口、構(gòu)造函數(shù)等等各種專業(yè)名詞出現(xiàn)的時(shí)候,你一定是腦子里好像一片空白,根本就搞不懂這些字眼的意思和關(guān)系,而且,這種情況下,很 容易導(dǎo)致你喪失自信心,開始逃避、拒絕,這些小白經(jīng)常遇到的情況在我剛接觸java的時(shí)候也遇見了,但是好在我足夠幸運(yùn),遇見了誠(chéng)筑說。我現(xiàn)在已 經(jīng)是公司的項(xiàng)目經(jīng)理了,今天,我為大家來總結(jié)了一些經(jīng)驗(yàn)和建議,希望能夠幫助到大家。

一點(diǎn):熟練基本的j2seAPI

除去java語言本身的語法之外呢,要懂得并且熟練j2seAPI的API也是非常有 必要的,在這里,就建議大家首先去掌握字符串的處理、異常的處理、容器、輸入輸出、線程等,這些相對(duì)來說較為重要的。還有就是API的內(nèi)容是非 常龐大的,關(guān)于API,一定要懂得查詢API的文件說明,在了解了其作用用途或者目的才能夠進(jìn)行相對(duì)于的程序。

二點(diǎn):穩(wěn)固java的語法基礎(chǔ)

學(xué)習(xí)java一定要學(xué)會(huì)使用java的程序語言,用來編寫程序,但是學(xué)習(xí)程序語 言就要熟悉語法是怎么使用的。程序語言其實(shí)也是一種語言,不過跟人類的語言不同,這種語言是要和計(jì)算機(jī)溝通交流,那怎么做才能熟悉這種語言呢 ,我給出的建議是多看別人寫的程序,了解人家是怎么用java來解決問題的。然后再找類似的程序去練習(xí)了,這樣就能夠從實(shí)際操作中檢驗(yàn)自己是否真 的知道該怎么去解決問題了。

三點(diǎn):加入貼吧論壇多參與討論

根據(jù)我當(dāng)時(shí)的經(jīng)驗(yàn),在大家學(xué)習(xí)的過程中,如果有人可以參與話題,共同討 論的話,會(huì)加快你學(xué)習(xí)的速度。所以大家可以和我一樣,找一個(gè)技術(shù)討論的地方,貼吧啊,論壇啊都可以,在這里進(jìn)行討論,畢竟大家有著共同的目標(biāo) 和理想,有著共同的話題可聊,這樣的話,又大大節(jié)省了學(xué)習(xí)的時(shí)間。

學(xué)完基本的java語法呢,現(xiàn)在就該用java來進(jìn)行實(shí)際的編程了,假如你需要 編寫窗口程序,那就學(xué)Swing窗口設(shè)計(jì);假如你要編寫數(shù)據(jù)庫什么的,那就學(xué)JDBC等等。

JavaWeb開發(fā)

張家港java開發(fā)培訓(xùn)學(xué)習(xí)班

JavaWeb開發(fā)

  • 01HTML5與CSS3

    • 1.B/S架構(gòu)

    • 2.HTML基本使用

    • 3.HTML DOM

    • 4.CSS選擇器

    • 5.常用樣式

    • 6.盒子模型與布局

    • 7.HTML5新特性

    • 8.CSS3新特性

  • 02JavaScript

    • 1.JavaScript基本語法

    • 2.JavaScript流程控制

    • 3.?dāng)?shù)組、函數(shù)、對(duì)象的使用

    • 4.JavaScript事件綁定/觸發(fā)

    • 5.JavaScript事件冒泡

    • 6.JavaScript嵌入方式

    • 7.JavaScript DOM操作

    • 8.DOM API

  • 03jQuery

    • 1.jQuery快速入門

    • 2.jQuery語法詳解

    • 3.jQuery核心函數(shù)

    • 4.jQuery對(duì)象/JavaScript對(duì)象

    • 5.jQuery選擇器

    • 6.jQuery 文檔處理

    • 7.jQuery事件

    • 8.jQuery動(dòng)畫效果

  • 04AJAX&JSON

    • 1.AJAX技術(shù)衍生

    • 2.XMLHttpRequest使用

    • 3.同步請(qǐng)求&異步請(qǐng)求

    • 4.JSON語法

    • 5.Java JSON轉(zhuǎn)換

    • 6.JavaScript JSON轉(zhuǎn)換

    • 7.jQuery 基本AJAX方法

    • 8.底層$.ajax使用

  • 05XML

    • 1.XML用途

    • 2.XML文檔結(jié)構(gòu)

    • 3.XML基本語法

    • 4.DOM&SAX解析體系

    • 5.DOM4j節(jié)點(diǎn)查詢

    • 6.DOM4j文檔操作

    • 7.xPath語法

    • 8.xPath快速查詢

  • 06bootstrap

    • 1.bootstrap快速使用

    • 2.柵格系統(tǒng)

    • 3.表單、表格、按鈕、圖片

    • 4.下拉菜單

    • 5.按鈕組使用

    • 6.導(dǎo)航條

    • 7.分頁、進(jìn)度條

  • 07Web服務(wù)器基礎(chǔ)

    • 1.HTTP協(xié)議

    • 2.HttpWatch

    • 3.Tomcat服務(wù)器搭建

    • 4.Tomcat目錄結(jié)構(gòu)解析

    • 5.Tomcat端口配置

    • 6.Tomcat啟動(dòng)&停止

    • 7.Tomcat&Eclipse整合

    • 8.Eclipse配置優(yōu)化

  • 08Servlet

    • 1.Servlet體系

    • 2.Servlet生命周期

    • 3.ServletConfig&ServletContext

    • 4.請(qǐng)求&響應(yīng)

    • 5.重定向&轉(zhuǎn)發(fā)

    • 6.中文亂碼解決方案

    • 7.項(xiàng)目路徑問題

  • 09JSP

    • 1.JSP語法

    • 2.JSP原理

    • 3.JSP腳本片段&表達(dá)式

    • 4.JSP聲明&指令

    • 5.JSP九大隱含對(duì)象

    • 6.域?qū)ο笫褂?/span>

  • 10JSTL

    • 1.JSTL簡(jiǎn)介

    • 2.JSTL-核心標(biāo)簽庫

    • 3.JSTL-函數(shù)標(biāo)簽庫

    • 4.JSTL-fmt標(biāo)簽庫

    • 5.自定義標(biāo)簽庫使用

    • 6.自定義標(biāo)簽庫原理

  • 11EL

    • 1.EL表達(dá)式簡(jiǎn)介

    • 2.EL使用

    • 3.EL取值原理

    • 4.EL的11大隱含對(duì)象

    • 5.EL2.2與3.0規(guī)范

    • 6.EL邏輯運(yùn)算

    • 7.函數(shù)庫深入

  • 12Cookie&Session

    • 1.Cookie機(jī)制

    • 2.Cookie創(chuàng)建&使用

    • 3.Session原理

    • 4.Session失效

    • 5.Url重寫

    • 6.Session活化&鈍化

    • 7.Token令牌應(yīng)用

  • 13Filter&Listener

    • 1.Filter原理

    • 2.Filter聲明周期

    • 3.Filter鏈

    • 4.Filter登錄驗(yàn)證

    • 5.Filter事務(wù)控制

    • 6.Listener原理

    • 7.八大監(jiān)聽器使用

    • 8.Listener監(jiān)聽在線用戶

  • 14國(guó)際化

    • 1.國(guó)際化原理

    • 2.ResourceBundle&Locale

    • 3.國(guó)際化資源文件

    • 4.日期/數(shù)字/貨幣國(guó)際化

    • 5.頁面動(dòng)態(tài)中英文切換

    • 6.頁面點(diǎn)擊鏈接中英文切換

    • 7.fmt標(biāo)簽庫的使用

  • 15文件上傳

    • 1.文件上傳原理

    • 2.commons-io&commons-fileupload

    • 3.文件上傳參數(shù)控制

    • 4.文件上傳路徑瀏覽器兼容性解決

    • 5.文件**原理

    • 6.文件**響應(yīng)頭

    • 7.文件**中文亂碼&瀏覽器兼容性

Android系統(tǒng)Recovery工作原理3-- 升級(jí)包的制作


>

 ㈡ 下面我們分析ota_from_target_files這個(gè)python腳本是怎樣生成**終zip包的。先講這個(gè)腳本的代碼貼出來如下:

import sys      if sys.hexversion 0x02040000:     PRint >> sys.stderr, "Python 2.4 or newer is required."     sys.exit(1)      import copy   import errno   import os   import re   import sha   import subprocess   import tempfile   import time   import zipfile      import common   import edify_generator      OPTIONS common.OPTIONS   OPTIONS.package_key "build/target/product/security/testkey"   OPTIONS.incremental_source None   OPTIONS.require_verbatim set()   OPTIONS.prohibit_verbatim set(("system/build.prop",))   OPTIONS.patch_threshold 0.95   OPTIONS.wipe_user_data False   OPTIONS.omit_prereq False   OPTIONS.extra_script None   OPTIONS.worker_threads      def MostPopularKey(d, default):     """Given dict, return the key corresponding to the largest    value.  Returns  default  if the dict is empty."""     [(v, k) for (k, v) in d.iteritems()]     if not x: return default     x.sort()     return x[-1][1]         def IsSymlink(info):     """Return true if the zipfile.ZipInfo object passed in represents    symlink."""     return (info.external_attr >> 16) == 0120777         class Item:     """Items represent the metadata (user, group, mode) of files and    directories in the system image."""     ITEMS {}     def __init__(self, name, dir=False):       self.name name       self.uid None       self.gid None       self.mode None       self.dir dir          if name:         self.parent Item.Get(os.path.dirname(name), dir=True)         self.parent.children.append(self)       else:         self.parent None       if dir:         self.children []        def Dump(self, indent=0):       if self.uid is not None:         print "%s%s %d %d %o" ("  "*indent, self.name, self.uid, self.gid, self.mode)       else:         print "%s%s %s %s %s" ("  "*indent, self.name, self.uid, self.gid, self.mode)       if self.dir:         print "%s%s" ("  "*indent, self.descendants)         print "%s%s" ("  "*indent, self.best_subtree)         for in self.children:           i.Dump(indent=indent 1)       @classmethod     def Get(cls, name, dir=False):       if name not in cls.ITEMS:         cls.ITEMS[name] Item(name, dir=dir)       return cls.ITEMS[name]       @classmethod     def GetMetadata(cls, input_zip):          try:         See if the target_files contains record of what the uid,         gid, and mode is supposed to be.         output input_zip.read("META/filesystem_config.txt")       except KeyError:         Run the external  fs_config  program to determine the desired         uid, gid, and mode for every Item object.  Note this uses the         one in the client now, which might not be the same as the one         used when this target_files was built.         common.Run(["fs_config"], stdin=subprocess.PIPE,                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)         suffix False: "", True: "/"         input "".join(["%s%s\n" (i.name, suffix[i.dir])                          for in cls.ITEMS.itervalues() if i.name])         output, error p.communicate(input)         assert not error          for line in output.split("\n"):         if not line: continue         name, uid, gid, mode line.split()         cls.ITEMS.get(name, None)         if is not None:           i.uid int(uid)           i.gid int(gid)           i.mode int(mode, 8)           if i.dir:             i.children.sort(key=lambda i: i.name)          set metadata for the files generated by this script.       cls.ITEMS.get("system/recovery-from-boot.p", None)       if i: i.uid, i.gid, i.mode 0, 0, 0644       cls.ITEMS.get("system/etc/install-recovery.sh", None)       if i: i.uid, i.gid, i.mode 0, 0, 0544        def CountChildMetadata(self):       """Count up the (uid, gid, mode) tuples for all children and      determine the best strategy for using set_perm_recursive and      set_perm to correctly chown/chmod all the files to their desired      values.  Recursively calls itself for all descendants.        Returns dict of {(uid, gid, dmode, fmode): count} counting up      all descendants of this node.  (dmode or fmode may be None.)  Also      sets the best_subtree of each directory Item to the (uid, gid,      dmode, fmode) tuple that will match the most descendants of that      Item.      """          assert self.dir       self.descendants {(self.uid, self.gid, self.mode, None): 1}       for in self.children:         if i.dir:           for k, in i.CountChildMetadata().iteritems():             d[k] d.get(k, 0)           else:           (i.uid, i.gid, None, i.mode)           d[k] d.get(k, 0)            Find the (uid, gid, dmode, fmode) tuple that matches the most       descendants.          First, find the (uid, gid) pair that matches the most       descendants.       ug {}       for (uid, gid, _, _), count in d.iteritems():         ug[(uid, gid)] ug.get((uid, gid), 0)   count       ug MostPopularKey(ug, (0, 0))          Now find the dmode and fmode that match the most descendants       with that (uid, gid), and choose those.       best_dmode (0, 0755)       best_fmode (0, 0644)       for k, count in d.iteritems():         if k[:2] != ug: continue         if k[2] is not None and count >= best_dmode[0]: best_dmode (count, k[2])         if k[3] is not None and count >= best_fmode[0]: best_fmode (count, k[3])       self.best_subtree ug   (best_dmode[1], best_fmode[1])          return        def SetPermissions(self, script):       """Append set_perm/set_perm_recursive commands to  script  to      set all permissions, users, and groups for the tree of files      rooted at  self ."""          self.CountChildMetadata()          def recurse(item, current):         current is the (uid, gid, dmode, fmode) tuple that the current         item (and all its children) have already been set to.  We only         need to issue set_perm/set_perm_recursive commands if we re         supposed to be something different.         if item.dir:           if current != item.best_subtree:             script.SetPermissionsRecursive("/" item.name, *item.best_subtree)             current item.best_subtree              if item.uid != current[0] or item.gid != current[1] or              item.mode != current[2]:             script.SetPermissions("/" item.name, item.uid, item.gid, item.mode)              for in item.children:             recurse(i, current)         else:           if item.uid != current[0] or item.gid != current[1] or                  item.mode != current[3]:             script.SetPermissions("/" item.name, item.uid, item.gid, item.mode)          recurse(self, (-1, -1, -1, -1))         def CopySystemFiles(input_zip, output_zip=None,                       substitute=None):     """Copies files underneath system/ in the input zip to the output    zip.  Populates the Item class with their metadata, and returns    list of symlinks.  output_zip may be None, in which case the copy is    skipped (but the other side effects still happen).  substitute is an    optional dict of {output filename: contents} to be output instead of    certain input files.    """        symlinks []        for info in input_zip.infolist():       if info.filename.startswith("SYSTEM/"):         basefilename info.filename[7:]         if IsSymlink(info):           symlinks.append((input_zip.read(info.filename),                            "/system/"   basefilename))         else:           info2 copy.copy(info)           fn info2.filename "system/"   basefilename           if substitute and fn in substitute and substitute[fn] is None:             continue           if output_zip is not None:             if substitute and fn in substitute:               data substitute[fn]             else:               data input_zip.read(info.filename)             output_zip.writestr(info2, data)           if fn.endswith("/"):             Item.Get(fn[:-1], dir=True)           else:             Item.Get(fn, dir=False)        symlinks.sort()     return symlinks         def SignOutput(temp_zip_name, output_zip_name):     key_passWords common.GetKeyPasswords([OPTIONS.package_key])     pw key_passwords[OPTIONS.package_key]        common.SignFile(temp_zip_name, output_zip_name, OPTIONS.package_key, pw,                     whole_file=True)         def AppendAssertions(script, input_zip):     device GetBuildProp("ro.product.device", input_zip)     script.AssertDevice(device)         def MakeRecoveryPatch(output_zip, recovery_img, boot_img):     """Generate binary patch that creates the recovery image starting    with the boot image.  (Most of the space in these images is just the    kernel, which is identical for the two, so the resulting patch    should be efficient.)  Add it to the output zip, along with shell    script that is run from init.rc on first boot to actually do the    patching and install the new recovery image.      recovery_img and boot_img should be File objects for the    corresponding images.      Returns an Item for the shell script, which must be made    executable.    """        common.Difference(recovery_img, boot_img)     _, _, patch d.ComputePatch()     common.ZipWriteStr(output_zip, "recovery/recovery-from-boot.p", patch)     Item.Get("system/recovery-from-boot.p", dir=False)        boot_type, boot_device common.GetTypeAndDevice("/boot", OPTIONS.info_dict)     recovery_type, recovery_device common.GetTypeAndDevice("/recovery", OPTIONS.info_dict)        Images with different content will have different first page, so     we check to see if this recovery has already been installed by     testing just the first 2k.     HEADER_SIZE 2048     header_sha1 sha.sha(recovery_img.data[:HEADER_SIZE]).hexdigest()     sh """#!/system/bin/sh  if applypatch -c %(recovery_type)s:%(recovery_device)s:%(header_size)d:%(header_sha1)s; then    log -t recovery "Installing new recovery image"    applypatch %(boot_type)s:%(boot_device)s:%(boot_size)d:%(boot_sha1)s %(recovery_type)s:%(recovery_device)s %(recovery_sha1)s %(recovery_size)d %(boot_sha1)s:/system/recovery-from-boot.p  else    log -t recovery "Recovery image already installed"  fi  """  boot_size : boot_img.size,            boot_sha1 : boot_img.sha1,            header_size : HEADER_SIZE,            header_sha1 : header_sha1,            recovery_size : recovery_img.size,            recovery_sha1 : recovery_img.sha1,            boot_type : boot_type,            boot_device : 

體驗(yàn)課預(yù)約試聽

倒計(jì)時(shí)

12:00:00

課程熱線:

在線咨詢

客服在線時(shí)間:早上9點(diǎn)~下午6點(diǎn),其他時(shí)間請(qǐng)?jiān)诰€預(yù)約報(bào)名或留言,謝謝!

蘇州JAVA

免費(fèi)體驗(yàn)課開班倒計(jì)時(shí)

11: 41: 09

稍后會(huì)有專業(yè)老師給您回電,請(qǐng)保持電話暢通

咨詢電話:
推薦機(jī)構(gòu) 全國(guó)分站 更多課程

本周僅剩 個(gè)試聽名額

請(qǐng)鍵入信息,稍后系統(tǒng)將會(huì)把領(lǐng)獎(jiǎng)短信發(fā)至您的手機(jī)

申請(qǐng)?jiān)嚶犆~

QQ:
加盟合作:0755-83654572