Android WebView显示Pdf、2007 word Excel,要求转换成html显示.

公司要求做客户端程序使用webview显示本地文件. 我使用的是poi3.8 可对2007Word无从下手,word中包含表格和图片... pdf用什么解析好点???有做过类似项目的哥们搭把手...感激不尽...

mansuifengqi
漫随风起 在数据解析上面 java 能做的 android 基本上都没有什么问题的,按照woshiwoxingfu的去弄弄呗
接近 7 年之前 回复

14个回答

先在服务器上转完再显示,可以用jacob不过要在服务器上装Libre office 或 openoffice 或 wps(Linux)、office(office),不过我只用过windows上的.
jacob和poi一样的,只不过poi不依赖office软件,jacob依赖;而jacob可以做图片的显示,这个要比poi强大一些,而且poi更出名些.

楼主解决了吗 求解决方案或者demo很着急先谢谢楼主了

楼主解决了吗,我用最新的poi 3.10 在android项目中不能运行

这是我之前做的,也是参考别人的,你可以看看,希望对你有帮助。

package com.word;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class WordReadActivity extends Activity {
private ListView listV=null;
private List<File> list=null;
private int a[] ={R.drawable.doc,R.drawable.dir};
private ArrayList<HashMap<String,Object>> recordItem;

private File PresentFile;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.browse);
        listV=(ListView)this.findViewById(R.id.list);
        list_files();
    }
    private void list_files(){
     File path=android.os.Environment.getExternalStorageDirectory();
     PresentFile = path;
     File[] file=path.listFiles();
     fill(file);
    }
    private void fill(File[] file){
     SimpleAdapter adapter=null;
     recordItem = new ArrayList<HashMap<String,Object>>();
     list=new ArrayList<File>();
     for(File f: file){
      if(Invalid(f) ==1){
       list.add(f);
       HashMap<String,Object> map= new HashMap<String,Object>();
       map.put("picture", a[0]);
       map.put("name", f.getName());
       recordItem.add(map);       
      }
      if(Invalid(f)==0){
       list.add(f);
       HashMap<String,Object> map= new HashMap<String,Object>();
       map.put("picture", a[1]);
       map.put("name", f.getName());
       recordItem.add(map); 
      }
     }
     adapter = new SimpleAdapter(this, recordItem, R.layout.item, new String[]{"picture", "name"}, new int[]{R.id.picture, R.id.text});
  listV.setAdapter(adapter);
  listV.setAdapter(adapter);
  listV.setOnItemClickListener(new Clicker());
    }
    private int Invalid(File f){
     if(f.isDirectory()){
      return 0;
     }else{
      String filename=f.getName().toLowerCase();
      if(filename.endsWith(".doc")){
       return 1;
      }
      return 2;
     }
    }

    private class Clicker implements OnItemClickListener{
  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
   Intent i= new Intent();
   String nameStr=null;
   i.setClass(WordReadActivity.this, ViewFile.class);
   Bundle bundle = new Bundle();
   File file= list.get(arg2);
   PresentFile=file;
   if(file.isDirectory()){
    File[] files=file.listFiles();
    fill(files);
   }else{
    nameStr=file.getAbsolutePath();
    bundle.putString("name", nameStr);
    i.putExtras(bundle);
    startActivity(i);
    finish();
   }
  }
    }
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if(keyCode==KeyEvent.KEYCODE_BACK){
   if(PresentFile.isDirectory()){
    if(PresentFile.equals(android.os.Environment.getExternalStorageDirectory())){
     this.finish();
    }else{
     PresentFile=PresentFile.getParentFile();
     File file=PresentFile;
     File[] files=file.listFiles();
     fill(files);
    }
   }
   if(PresentFile.isFile()){
    if(PresentFile.getParentFile().isDirectory()){
     PresentFile = PresentFile.getParentFile();
        File file = PresentFile;
        File[] files = file.listFiles();
        fill(files);
    }
   }
  }
  return false;
}
}

这个是先开始读取sdcard的目录,用LIstview显示,如果你只需要一个Button点击进入的话,就直接传一个文件名用Bundle带参传值过去就好了。。

package com.word;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Table;
import org.apache.poi.hwpf.usermodel.TableCell;
import org.apache.poi.hwpf.usermodel.TableIterator;
import org.apache.poi.hwpf.usermodel.TableRow;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
public class ViewFile extends Activity{
private String nameStr = null;
private Range range = null;
private HWPFDocument hwpf = null;
private String htmlPath;
private String picturePath;
private WebView view; 
private List pictures; 
private TableIterator tableIterator; 
private int presentPicture = 0; 
private int screenWidth; 
private FileOutputStream output; 
private File myFile;

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  setContentView(R.layout.view);  
  view = (WebView)findViewById(R.id.show);  
  screenWidth = this.getWindowManager().getDefaultDisplay().getWidth() - 10;  
  Intent intent = this.getIntent();
  Bundle bundle = intent.getExtras();
  nameStr = bundle.getString("name");

  getRange();   
  makeFile();  
  readAndWrite();
// String url="http://www.baidu.com";
  String uri="file:///mnt/sdcard/doc/doc.html";
// String url="content://com.android.htmlfileprovider/sdcard/doc/doc.html";
  view.loadUrl(uri);
// view.loadUrl("content://com.android.htmlfileprovider/" + htmlPath);
  System.out.println("htmlPath" + htmlPath);
}

public boolean onCreateOptionsMenu(Menu menu){  
  super.onCreateOptionsMenu(menu);
  menu.add(0, 0, 0, "关于文件").setIcon(this.getResources().getDrawable(R.drawable.importdb));
  menu.add(0, 1, 1, "关于作者").setIcon(this.getResources().getDrawable(R.drawable.exportdb));
  return true;
}

public boolean onOptionsItemSelected(MenuItem item){  
  switch(item.getItemId()){
  case 0:
   showDialog(0);
   break;
  case 1:
   showDialog(1);
   break;
  }
  return super.onOptionsItemSelected(item);
}

protected Dialog onCreateDialog(int id){
  switch(id){
  case 0:
   return buildDialogProgram(ViewFile.this);
  case 1:
   return buildDialogAuthor(ViewFile.this);
  }
  return null;
}

private Dialog buildDialogAuthor(Context context){

  AlertDialog.Builder builder = new AlertDialog.Builder(context);
  builder.setIcon(this.getResources().getDrawable(R.drawable.dslab));
  builder.setTitle("关于我们");
  builder.setMessage("提示");
  builder.setPositiveButton("我知道了", new DialogInterface.OnClickListener(){
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    dialog.dismiss();
   }

  });
  return builder.create();

}

private Dialog buildDialogProgram(Context context){

  AlertDialog.Builder builder = new AlertDialog.Builder(context);
  builder.setTitle("关于文件");
  builder.setIcon(this.getResources().getDrawable(R.drawable.importdb));
  String programInfo = "word" + hwpf.characterLength() + "\n";
  programInfo = programInfo + "段落个数:" + range.numParagraphs() + "\n";
  programInfo = programInfo + "图片个数:" + pictures.size() + "\n";

  builder.setMessage(programInfo);
  builder.setPositiveButton("我知道了", new DialogInterface.OnClickListener() {

   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    dialog.dismiss();
   }
  });

  return builder.create();
}

public void makeFile(){

  String sdStateString = android.os.Environment.getExternalStorageState();

     if(sdStateString.equals(android.os.Environment.MEDIA_MOUNTED)){
      try{
       File sdFile = android.os.Environment.getExternalStorageDirectory();

       String path = sdFile.getAbsolutePath() + File.separator + "doc";

       String temp = path + File.separator + "doc.html";

       File dirFile = new File(path);
       if(!dirFile.exists()){
        dirFile.mkdir();
       }

       File myFile = new File(path + File.separator + "doc.html");

       if(!myFile.exists()){
        myFile.createNewFile();
       }

       htmlPath = myFile.getAbsolutePath();
      }
      catch(Exception e){

      }
     }
}

/*用来在sdcard上创建图片*/
public void makePictureFile(){
  String sdString = android.os.Environment.getExternalStorageState();

  if(sdString.equals(android.os.Environment.MEDIA_MOUNTED)){
   try{
    File picFile = android.os.Environment.getExternalStorageDirectory();

    String picPath = picFile.getAbsolutePath() + File.separator + "doc";

    File picDirFile = new File(picPath);

    if(!picDirFile.exists()){
     picDirFile.mkdir();
    }
    File pictureFile = new File(picPath + File.separator + presentPicture + ".jpg");

    if(!pictureFile.exists()){
     pictureFile.createNewFile();
    }

    picturePath = pictureFile.getAbsolutePath();

   }
   catch(Exception e){
    System.out.println("PictureFile Catch Exception");
   }
  }
}

public void onDestroy(){
  super.onDestroy();
}
/*读取word中的内容写到sdcard上的.html文件中*/
public void readAndWrite(){

  try{
   myFile = new File(htmlPath);
   output = new FileOutputStream(myFile);
   String head = "<html><body>";
   String tagBegin = "<p>";
   String tagEnd = "</p>";


   output.write(head.getBytes());

   int numParagraphs = range.numParagraphs();

   for(int i = 0; i < numParagraphs; i++){
    Paragraph p = range.getParagraph(i);

    if(p.isInTable()){
     int temp = i;
     if(tableIterator.hasNext()){
      String tableBegin = "<table style=\"border-collapse:collapse\" border=1 bordercolor=\"black\">";
      String tableEnd = "</table>";
      String rowBegin = "<tr>";
      String rowEnd = "</tr>";
      String colBegin = "<td>";
      String colEnd = "</td>";

      Table table = tableIterator.next();

      output.write(tableBegin.getBytes());

      int rows = table.numRows();

      for( int r = 0; r < rows; r++){
       output.write(rowBegin.getBytes());
       TableRow row = table.getRow(r);
       int cols = row.numCells();
       int rowNumParagraphs = row.numParagraphs();
       int colsNumParagraphs = 0;
       for( int c = 0; c < cols; c++){
        output.write(colBegin.getBytes());
        TableCell cell = row.getCell(c);
        int max = temp + cell.numParagraphs();
        colsNumParagraphs = colsNumParagraphs + cell.numParagraphs();
        for(int cp = temp; cp < max; cp++){
         Paragraph p1 = range.getParagraph(cp);
         output.write(tagBegin.getBytes());
         writeParagraphContent(p1);
         output.write(tagEnd.getBytes());
         temp++;
        }
        output.write(colEnd.getBytes());
       }
       int max1 = temp + rowNumParagraphs;
       for(int m = temp + colsNumParagraphs; m < max1; m++){
        Paragraph p2 = range.getParagraph(m);
        temp++;
       }
       output.write(rowEnd.getBytes());
      }
      output.write(tableEnd.getBytes());
     }
     i = temp;
    }
    else{
     output.write(tagBegin.getBytes());
     writeParagraphContent(p);
     output.write(tagEnd.getBytes());
    }
   }
   String end = "</body></html>";
   output.write(end.getBytes());
   output.close();
  }
  catch(Exception e){
   System.out.println("readAndWrite Exception");
  }
}
/*以段落的形式来往html文件中写内容*/
public void writeParagraphContent(Paragraph paragraph){
  Paragraph p = paragraph;
  int pnumCharacterRuns = p.numCharacterRuns();

  for( int j = 0; j < pnumCharacterRuns; j++){

   CharacterRun run = p.getCharacterRun(j);

   if(run.getPicOffset() == 0 || run.getPicOffset() >= 1000){
    if(presentPicture < pictures.size()){
     writePicture();
    }
   }
   else{
    try{
     String text = run.text();
     if(text.length() >= 2 && pnumCharacterRuns < 2){
      output.write(text.getBytes());
     }
     else{
      int size = run.getFontSize();
      int color = run.getColor();
      String fontSizeBegin = "<font size=\"" + decideSize(size) + "\">";
      String fontColorBegin = "<font color=\"" + decideColor(color) + "\">";
      String fontEnd = "</font>";
      String boldBegin = "<b>";
      String boldEnd = "</b>";
      String islaBegin = "<i>";
      String islaEnd = "</i>";

      output.write(fontSizeBegin.getBytes());
      output.write(fontColorBegin.getBytes());

      if(run.isBold()){
       output.write(boldBegin.getBytes());
      }
      if(run.isItalic()){
       output.write(islaBegin.getBytes());
      }

      output.write(text.getBytes());

      if(run.isBold()){
       output.write(boldEnd.getBytes());
      }
      if(run.isItalic()){
       output.write(islaEnd.getBytes());
      }
      output.write(fontEnd.getBytes());
      output.write(fontEnd.getBytes());
     }
    }
    catch(Exception e){
     System.out.println("Write File Exception");
    }
   }
  }
}
/*将word中的图片写入到.jpg文件中*/
public void writePicture(){
  Picture picture = (Picture)pictures.get(presentPicture);

  byte[] pictureBytes = picture.getContent();

  Bitmap bitmap = BitmapFactory.decodeByteArray(pictureBytes, 0, pictureBytes.length);

  makePictureFile();
  presentPicture++;

  File myPicture = new File(picturePath);

  try{

   FileOutputStream outputPicture = new FileOutputStream(myPicture);

   outputPicture.write(pictureBytes);

   outputPicture.close();
  }
  catch(Exception e){
   System.out.println("outputPicture Exception");
  }

  String imageString = "<img src=\"" + picturePath + "\"";

  if(bitmap.getWidth() > screenWidth){
   imageString = imageString + " " + "width=\"" + screenWidth + "\"";
  }
  imageString = imageString + ">";

  try{
   output.write(imageString.getBytes());
  }
  catch(Exception e){
   System.out.println("output Exception");
  }
}
/*处理word和html字体的转换*/
public int decideSize(int size){

  if(size >= 1 && size <= 8){
   return 1;
  }
  if(size >= 9 && size <= 11){
   return 2;
  }
  if(size >= 12 && size <= 14){
   return 3;
  }
  if(size >= 15 && size <= 19){
   return 4;
  }
  if(size >= 20 && size <= 29){
   return 5;
  }
  if(size >= 30 && size <= 39){
   return 6;
  }
  if(size >= 40){
   return 7;
  }
  return 3;
}
/*处理word和html颜色的转换*/
private String decideColor(int a){
  int color = a;
  switch(color){
  case 1:
   return "#000000";
  case 2:
   return "#0000FF";
  case 3:
  case 4:
   return "#00FF00";
  case 5:
  case 6:
   return "#FF0000";
  case 7:
   return "#FFFF00";
  case 8:
   return "#FFFFFF";
  case 9:
   return "#CCCCCC";
  case 10:
  case 11:
   return "#00FF00";
  case 12:
   return "#080808";
  case 13:
  case 14: 
   return "#FFFF00";
  case 15: 
   return "#CCCCCC";
  case 16:
   return "#080808";
  default:
   return "#000000";
  }
}

private void getRange(){
  FileInputStream in = null;
  POIFSFileSystem pfs = null;

   try {
    in = new FileInputStream(nameStr);
    pfs = new POIFSFileSystem(in);
    hwpf = new HWPFDocument(pfs);
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

  range = hwpf.getRange();

  pictures = hwpf.getPicturesTable().getAllPictures();

  tableIterator = new TableIterator(range);

}
/*处理点击返回按钮*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
      Intent intent = new Intent();
      intent.setClass(ViewFile.this, WordReadActivity.class);
      startActivity(intent);
      this.finish();
     }
  return false; 
  }
}
libei_march
libei_march 03的我已经做好了. 我需要的是07的..
接近 7 年之前 回复

你好,我对android不太熟,但是对于java解析pdf,我刚做了一个相关的项目。
建议你学习一下xpdf,和icepdf,这些都是比较好的抽取文本的程序,但是我认为抽取pdf都会有偏差的,对于里面的表格一类的不好弄。
相对于你说的word,excel相对来说网上的资料比较多一点了,比较容易一点。

我也是在做用poi显示word和excel的内容。
目前我已经做到了支持office2003的标准,因为2007之后加入了ooxml之后比较麻烦,poi也是在ooxml纳入国际文档标准后才开始支持新版本的。
针对doc文件,poi里面支持的包是hwpf
真的对docx文件,poi里面的包是xwpf
可恶的是hwpf包里面有convert可以直接从doc转换成html。而xwpf里面没有
目前我的思路是docx文件转成doc文件,然后用doc的converter
或者是docx转换为标准的document文件(或者xml格式),然后用document转换为html
我也还是新手,你那边有解决方案说一下

qq_22875583
qq_22875583 亲。你在android上把excel转成html完成了嘛。。我最近也在做这些。。如果完成了麻烦搭把手啊。。谢谢了。。我邮箱411747165@qq.com
接近 3 年之前 回复
qq_22875583
qq_22875583 回复lijunfeng722: 亲。你在android上把excel转成html完成了嘛。。我最近也在做这些。。如果完成了麻烦搭把手啊。。谢谢了。。我邮箱411747165@qq.com
接近 3 年之前 回复
tanhao_wenyu
tanhao_wenyu 解决了吗 求帮忙
大约 5 年之前 回复
u012364631
lijunfeng722 我在做03的时候遇到问题,如果一行文字里存在空格,空格以后的文字就全丢失了,读不出来,请问你遇到了吗,怎么解决的
5 年多之前 回复

这么一了死代码就搞定了???你玩我啊

楼主解决这个问题了么请问 ? 我刚好也需要在APP中集成这个功能,求帮助

Android WebView好像只能查看html文档吧?
Android WebView好像只能查看html文档吧?

我也是在做用poi显示word和excel的内容。
目前我已经做到了支持office2003的标准,因为2007之后加入了ooxml之后比较麻烦,poi也是在ooxml纳入国际文档标准后才开始支持新版本的。
针对doc文件,poi里面支持的包是hwpf
真的对docx文件,poi里面的包是xwpf
可恶的是hwpf包里面有convert可以直接从doc转换成html。而xwpf里面没有
目前我的思路是docx文件转成doc文件,然后用doc的converter
或者是docx转换为标准的document文件(或者xml格式),然后用document转换为html
我也还是新手,你那边有解决方案说一下

itlangqun1
itpkm 安卓里面 :hwpf包里面有convert可以直接从doc转换成html 这个可以实现吗?好像不行,因为安卓里面有些没有java的api
4 年多之前 回复
共14条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android webview在线PDF预览
-
Android的webview显示的问题
-
android webview 问题
-
Android 开发WebView显示带百度地图的H5,地图部分显示失败
-
Android webview 加载html 中audio显示不正常
-
Android webView显示空白问题
-
Android webview 设置agent
-
页面已缓存,但是断网后在android webview 上显示找不到页面,刷新后正常
-
android webview显示html片段时的相关问题
-
Android WebView加载网页不显示
-
Android webview布局
-
android webview加载微信公众号文件退出后重新进入无法显示图片?
-
android webview webpage not available
-
android webview加载的网页里面的验证码无法显示
-
android webview如何获取用户是否登录
-
Android webview自动点击事件
-
Android webview如何自适应内容高度
-
Android Studio中使用webview显示本地html显示一片空白
-
急求android webview 的一个问题
-
程序员真是太太太太太有趣了!!!
网络上虽然已经有了很多关于程序员的话题,但大部分人对这个群体还是很陌生。我们在谈论程序员的时候,究竟该聊些什么呢?各位程序员大佬们,请让我听到你们的声音!不管你是前端开发...
史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)
网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无 ~中招了咩~ ,还有一些同学依旧在使用eclipse或者Myeclipse开发,我想对这些朋友说IDEA 的编译速度很快,人生苦短,来不及解释了,直接上手idea吧。这篇文章每一步搭建过程都测试过了,应该不会有什么差错。本文章还有个比较优秀的特点,就是idea的使用,基本上关于idea的操作都算是比较详细的,所以不用太担心不会撸idea!最后,本文
史上最全的后端技术大全,你都了解哪些技术呢?
| 导语工欲善其事,必先利其器;士欲宣其义,必先读其书。后台开发作为互联网技术领域的掌上明珠,一直都是开发者们的追逐的高峰。本文将从后台开发所涉及到的技术术语出发,基于...
吃人的那些 Java 名词:对象、引用、堆、栈
作为一个有着 8 年 Java 编程经验的 IT 老兵,说起来很惭愧,我被 Java 当中的四五个名词一直困扰着:**对象、引用、堆、栈、堆栈**(栈可同堆栈,因此是四个名词,也是五个名词)。每次我看到这几个名词,都隐隐约约觉得自己在被一只无形的大口慢慢地吞噬,只剩下满地的衣服碎屑(为什么不是骨头,因为骨头也好吃)。
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
团队中的 Git 实践
在 2005 年的某一天,Linux 之父 Linus Torvalds 发布了他的又一个里程碑作品——Git。它的出现改变了软件开发流程,大大地提高了开发流畅度!直到现...
不识 Pandas,纵是老手也枉然?
作者 |周志鹏 责编 | 郭 芮 这段时间和一些做数据分析的同学闲聊,我发现数据分析技能入门阶段存在一个普遍性的问题,很多凭着兴趣入坑的同学,都能够很快熟悉Python基础语法,然后不约而同的一头扎进《利用Python进行数据分析》这本经典之中,硬着头皮啃完之后,好像自己什么都会了一点,然而实际操作起来既不知从何操起,又漏洞百出。 至于原因嘛,理解不够,实践不够是两条老牌的拦路...
接班马云的为何是张勇?
上海人、职业经理人、CFO 背景,集齐马云三大不喜欢的张勇怎么就成了阿里接班人? 作者|王琳 本文经授权转载自燃财经(ID:rancaijing) 9月10日,张勇转正了,他由阿里巴巴董事局候任主席正式成为阿里巴巴董事局主席,这也意味着阿里巴巴将正式开启“逍遥子时代”。 从2015年接任CEO开始,张勇已经将阿里巴巴股价拉升了超过200%。但和马云强大的个人光环比,张勇显得尤其...
程序员终极面试指南!
身为技术人,如何拿下自己心仪的 offer? 作者|James Bedford 译者 |苏本如,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 以下为译文: 介绍 最近半年以来,我一直在积极指导开发人员,包括新手和有经验的开发人员。我发现,所有开发人员最关心的问题之一通常都是寻找工作。 如果你已经被录用了,很有可能你经历了一个令人精疲力竭的过程。...
我在快手认识了 4 位工程师,看到了快速发展的公司和员工如何彼此成就!
作者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 从西二旗地铁站B口出来,步行700多米可以看到一个工业建筑风格的院子。这个独立的院子和后厂村各大互联网公司的高楼林立有些不同。 院子里有7栋6层高的楼,几栋楼之间打通,可以从A栋自由穿行到F栋。这里就是快手总部。这个园区可以容纳6000多名员工,目前40%以上是研发人员。 这些研发人员维护着快手这款日活超过2亿的ap...
让程序员崩溃的瞬间(非程序员勿入)
今天给大家带来点快乐,程序员才能看懂。 来源:https://zhuanlan.zhihu.com/p/47066521 1. 公司实习生找 Bug 2.在调试时,将断点设置在错误的位置 3.当我有一个很棒的调试想法时 4.偶然间看到自己多年前写的代码 5.当我第一次启动我的单元测试时 ...
分享一个 pycharm 专业版的永久使用方法
刚开始接触Python,首先要解决的就是Python开发环境的搭建。 目前比较好用的Python开发工具是PyCharm,他有社区办和专业版两个版本,但是社区版支持有限,我们既然想好好学python,那肯定得用专业的不是。 但他专业版要么只能试用一个月,要么就是 $ , 身为猿军中的一员怎么能让他们这些小伎俩阻碍了我们继续前进的步伐呢?所以我在度娘的引导下,一步步实现了PyCharm的永久使用(虽...
用Python分析2000款避孕套,得出这些有趣的结论
到现在为止,我们的淘宝教程已经写到了第四篇,前三篇分别是: 第一篇:Python模拟登录淘宝,详细讲解如何使用requests库登录淘宝pc端。 第二篇:淘宝自动登录2.0,新增Cookies序列化,教大家如何将cookies保存起来。 第三篇:Python爬取淘宝商品避孕套,教大家如何爬取淘宝pc端商品信息。 今天,我们来看看淘宝系列的第四篇 我们在上一篇的时候已经将淘宝数据爬取下来了,...
无需安装,仅需 1 条指令,秒实现内网穿透的神器,你有用过吗?
什么是 ServeoServeo 是一个免费的内网穿透服务,Serveo 可以将本地计算机暴露在互联网上,官方声称其为 Ngrok 的绝佳替代品。Serveo 其最大优点...
作为曾经的 Web 开发“王者”,jQuery 的传奇怎么续写?
作为世界上使用最广泛的JavaScript库,jQuery曾经帮助过一代开发人员创建了适用于每种浏览器的网站,可以说,Web开发之所以能有今天,jQuery可谓功不可没。但是随着新的库、框架和范例的不断涌现,jQuery作为Web开发首选工具的地位已经逐渐不保......任何事物都有其自身发展的兴盛与衰落,短期内jQuery并不会消失,但是对于其来说,又该如何维稳逆袭呢? 作者|Da...
重磅:硬核前端面试开源项目汇总(进大厂必备)
复习前端面试的知识,是为了巩固前端的基础知识,最重要的还是平时的积累!”开源项目https://github.com/InterviewMap/CS-Interview...
为什么平头哥做芯片如此迅猛?
作者 | 胡巍巍 发自杭州云栖大会责编 | 唐小引出品 | CSDN(ID:CSDNnews)2018年10月31日,阿里旗下的平头哥半导体有限公司成立。如今,平头哥成立...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
技术人员要拿百万年薪,必须要经历这9个段位
很多人都问,技术人员如何成长,每个阶段又是怎样的,如何才能走出当前的迷茫,实现自我的突破。所以我结合我自己10多年的从业经验,总结了技术人员成长的9个段位,希望对大家的职...
多线程编程是后台开发人员的基本功
这里先给大家分享一个小故事:在我刚开始参加工作的那年,公司安排我开发一款即时通讯软件(IM,类似于 QQ 聊天软件),在这之前我心里也知道如果多线程操作一个整型值是要加锁...
Java 网络爬虫,就是这么的简单
这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识。第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻的新闻标题和详情页为例,需要提取的内容如下图所示: 我们需要提取图中圈出来的文字及其对应的链接,在提取的过程中,我们会使用两种方式来提取,一种是 Jsoup 的方式,另一种是 httpcli...
相关热词 c#二进制字符转字节 c# rc4 c#中md5加密 c# 新建mvc项目 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字