Friday, January 21, 2011

.net interview question2

Interview questions for Web application developer

   1. What is the maximum length of a varchar field in SQL Server?
   2. How do you define an integer in SQL Server?
   3. How do you separate business logic while creating an ASP.NET application?
   4. If there is a calendar control to be included in each page of your application, and we do not intend to use the Microsoft-provided calendar control, how do you develop it? Do you copy and paste the code into each and very page of your application?
   5. How do you debug an ASP.NET application?
   6. How do you deploy an ASP.NET application?
   7. Name a few differences between .NET application and a Java application?
   8. Specify the best ways to store variables so that we can access them in various pages of ASP.NET application?
   9. What are the XML files that are important in developing an ASP.NET application?
  10. What is XSLT and what is its use?

   





   

Interview questions for ASP
   





   


Used by IBM Consulting Services, according to the site visitor.

   1. How many objects are there in ASP?
   2. Which DLL file is needed to be registered for ASP?
   3. If you want to initialize a global variable for an application, which is the right place to declare it? (like form or some other file).
   4. What is diffrence between Server.transfer and Response.redirect.
   5. Is there any inbuilt paging(for example shoping cart. which will show next 10 records without refreshing) in ASP? How will you do pating.
   6. What does Server.MapPath do?
   7. Name at least three methods of response object other than Redirect.
   8. Name at least two methods of response object other than Transfer.
   9. Tell few programming diffrence between ADO and DAO programming. What is state?
  10. How many types of cookies are there?
  11. Tell few steps for optimizing (for speed and resources) ASP page/application .

   





   

Interview questions for MS SQL Server
   





   



This one always gets asked. For a while the database interview questions were limited to Oracle and generic database design questions. This is a set of more than a hundred Microsoft SQL Server interview questions. Some questions are open-ended, and some do not have answers.

   1. What is normalization? - Well a relational database is basically composed of tables that contain related data. So the Process of organizing this data into tables is actually referred to as normalization.
   2. What is a Stored Procedure? - Its nothing but a set of T-SQL statements combined to perform a single task of several tasks. Its basically like a Macro so when you invoke the Stored procedure, you actually run a set of statements.
   3. Can you give an example of Stored Procedure? - sp_helpdb , sp_who2, sp_renamedb are a set of system defined stored procedures. We can also have user defined stored procedures which can be called in similar way.
   4. What is a trigger? - Triggers are basically used to implement business rules. Triggers is also similar to stored procedures. The difference is that it can be activated when data is added or edited or deleted from a table in a database.
   5. What is a view? - If we have several tables in a db and we want to view only specific columns from specific tables we can go for views. It would also suffice the needs of security some times allowing specfic users to see only specific columns based on the permission that we can configure on the view. Views also reduce the effort that is required for writing queries to access specific columns every time.
   6. What is an Index? - When queries are run against a db, an index on that db basically helps in the way the data is sorted to process the query for faster and data retrievals are much faster when we have an index.
   7. What are the types of indexes available with SQL Server? - There are basically two types of indexes that we use with the SQL Server. Clustered and the Non-Clustered.
   8. What is the basic difference between clustered and a non-clustered index? - The difference is that, Clustered index is unique for any given table and we can have only one clustered index on a table. The leaf level of a clustered index is the actual data and the data is resorted in case of clustered index. Whereas in case of non-clustered index the leaf level is actually a pointer to the data in rows so we can have as many non-clustered indexes as we can on the db.
   9. What are cursors? - Well cursors help us to do an operation on a set of data that we retreive by commands such as Select columns from table. For example : If we have duplicate records in a table we can remove it by declaring a cursor which would check the records during retreival one by one and remove rows which have duplicate values.
  10. When do we use the UPDATE_STATISTICS command? - This command is basically used when we do a large processing of data. If we do a large amount of deletions any modification or Bulk Copy into the tables, we need to basically update the indexes to take these changes into account. UPDATE_STATISTICS updates the indexes on these tables accordingly.
  11. Which TCP/IP port does SQL Server run on? - SQL Server runs on port 1433 but we can also change it for better security.
  12. From where can you change the default port? - From the Network Utility TCP/IP properties –> Port number.both on client and the server.
  13. Can you tell me the difference between DELETE & TRUNCATE commands? - Delete command removes the rows from a table based on the condition that we provide with a WHERE clause. Truncate will actually remove all the rows from a table and there will be no data in the table after we run the truncate command.
  14. Can we use Truncate command on a table which is referenced by FOREIGN KEY? - No. We cannot use Truncate command on a table with Foreign Key because of referential integrity.
  15. What is the use of DBCC commands? - DBCC stands for database consistency checker. We use these commands to check the consistency of the databases, i.e., maintenance, validation task and status checks.
  16. Can you give me some DBCC command options?(Database consistency check) - DBCC CHECKDB - Ensures that tables in the db and the indexes are correctly linked.and DBCC CHECKALLOC - To check that all pages in a db are correctly allocated. DBCC SQLPERF - It gives report on current usage of transaction log in percentage. DBCC CHECKFILEGROUP - Checks all tables file group for any damage.
  17. What command do we use to rename a db? - sp_renamedb ‘oldname’ , ‘newname’
  18. Well sometimes sp_reanmedb may not work you know because if some one is using the db it will not accept this command so what do you think you can do in such cases? - In such cases we can first bring to db to single user using sp_dboptions and then we can rename that db and then we can rerun the sp_dboptions command to remove the single user mode.
  19. What is the difference between a HAVING CLAUSE and a WHERE CLAUSE? - Having Clause is basically used only with the GROUP BY function in a query. WHERE Clause is applied to each row before they are part of the GROUP BY function in a query.
  20. What do you mean by COLLATION? - Collation is basically the sort order. There are three types of sort order Dictionary case sensitive, Dictonary - case insensitive and Binary.
  21. What is a Join in SQL Server? - Join actually puts data from two or more tables into a single result set.
  22. Can you explain the types of Joins that we can have with Sql Server? - There are three types of joins: Inner Join, Outer Join, Cross Join
  23. When do you use SQL Profiler? - SQL Profiler utility allows us to basically track connections to the SQL Server and also determine activities such as which SQL Scripts are running, failed jobs etc..
  24. What is a Linked Server? - Linked Servers is a concept in SQL Server by which we can add other SQL Server to a Group and query both the SQL Server dbs using T-SQL Statements.
  25. Can you link only other SQL Servers or any database servers such as Oracle? - We can link any server provided we have the OLE-DB provider from Microsoft to allow a link. For Oracle we have a OLE-DB provider for oracle that microsoft provides to add it as a linked server to the sql server group.
  26. Which stored procedure will you be running to add a linked server? - sp_addlinkedserver, sp_addlinkedsrvlogin
  27. What are the OS services that the SQL Server installation adds? - MS SQL SERVER SERVICE, SQL AGENT SERVICE, DTC (Distribution transac co-ordinator)
  28. Can you explain the role of each service? - SQL SERVER - is for running the databases SQL AGENT - is for automation such as Jobs, DB Maintanance, Backups DTC - Is for linking and connecting to other SQL Servers
  29. How do you troubleshoot SQL Server if its running very slow? - First check the processor and memory usage to see that processor is not above 80% utilization and memory not above 40-45% utilization then check the disk utilization using Performance Monitor, Secondly, use SQL Profiler to check for the users and current SQL activities and jobs running which might be a problem. Third would be to run UPDATE_STATISTICS command to update the indexes
  30. Lets say due to N/W or Security issues client is not able to connect to server or vice versa. How do you troubleshoot? - First I will look to ensure that port settings are proper on server and client Network utility for connections. ODBC is properly configured at client end for connection ——Makepipe & readpipe are utilities to check for connection. Makepipe is run on Server and readpipe on client to check for any connection issues.
  31. What are the authentication modes in SQL Server? - Windows mode and mixed mode (SQL & Windows).
  32. Where do you think the users names and passwords will be stored in sql server? - They get stored in master db in the sysxlogins table.
  33. What is log shipping? Can we do logshipping with SQL Server 7.0 - Logshipping is a new feature of SQL Server 2000. We should have two SQL Server - Enterprise Editions. From Enterprise Manager we can configure the logshipping. In logshipping the transactional log file from one server is automatically updated into the backup database on the other server. If one server fails, the other server will have the same db and we can use this as the DR (disaster recovery) plan.
  34. Let us say the SQL Server crashed and you are rebuilding the databases including the master database what procedure to you follow? - For restoring the master db we have to stop the SQL Server first and then from command line we can type SQLSERVER –m which will basically bring it into the maintenance mode after which we can restore the master db.
  35. Let us say master db itself has no backup. Now you have to rebuild the db so what kind of action do you take? - (I am not sure- but I think we have a command to do it).
  36. What is BCP? When do we use it? - BulkCopy is a tool used to copy huge amount of data from tables and views. But it won’t copy the structures of the same.
  37. What should we do to copy the tables, schema and views from one SQL Server to another? - We have to write some DTS packages for it.
  38. What are the different types of joins and what dies each do?
  39. What are the four main query statements?
  40. What is a sub-query? When would you use one?
  41. What is a NOLOCK?
  42. What are three SQL keywords used to change or set someone’s permissions?
  43. What is the difference between HAVING clause and the WHERE clause?
  44. What is referential integrity? What are the advantages of it?
  45. What is database normalization?
  46. Which command using Query Analyzer will give you the version of SQL server and operating system?
  47. Using query analyzer, name 3 ways you can get an accurate count of the number of records in a table?
  48. What is the purpose of using COLLATE in a query?
  49. What is a trigger?
  50. What is one of the first things you would do to increase performance of a query? For example, a boss tells you that “a query that ran yesterday took 30 seconds, but today it takes 6 minutes”
  51. What is an execution plan? When would you use it? How would you view the execution plan?
  52. What is the STUFF function and how does it differ from the REPLACE function?
  53. What does it mean to have quoted_identifier on? What are the implications of having it off?
  54. What are the different types of replication? How are they used?
  55. What is the difference between a local and a global variable?
  56. What is the difference between a Local temporary table and a Global temporary table? How is each one used?
  57. What are cursors? Name four types of cursors and when each one would be applied?
  58. What is the purpose of UPDATE STATISTICS?
  59. How do you use DBCC statements to monitor various aspects of a SQL server installation?
  60. How do you load large data to the SQL server database?
  61. How do you check the performance of a query and how do you optimize it?
  62. How do SQL server 2000 and XML linked? Can XML be used to access data?
  63. What is SQL server agent?
  64. What is referential integrity and how is it achieved?
  65. What is indexing?
  66. What is normalization and what are the different forms of normalizations?
  67. Difference between server.transfer and server.execute method?
  68. What id de-normalization and when do you do it?
  69. What is better - 2nd Normal form or 3rd normal form? Why?
  70. Can we rewrite subqueries into simple select statements or with joins? Example?
  71. What is a function? Give some example?
  72. What is a stored procedure?
  73. Difference between Function and Procedure-in general?
  74. Difference between Function and Stored Procedure?
  75. Can a stored procedure call another stored procedure. If yes what level and can it be controlled?
  76. Can a stored procedure call itself(recursive). If yes what level and can it be controlled.?
  77. How do you find the number of rows in a table?
  78. Difference between Cluster and Non-cluster index?
  79. What is a table called, if it does not have neither Cluster nor Non-cluster Index?
  80. Explain DBMS, RDBMS?
  81. Explain basic SQL queries with SELECT from where Order By, Group By-Having?
  82. Explain the basic concepts of SQL server architecture?
  83. Explain couple pf features of SQL server
  84. Scalability, Availability, Integration with internet, etc.)?
  85. Explain fundamentals of Data ware housing & OLAP?
  86. Explain the new features of SQL server 2000?
  87. How do we upgrade from SQL Server 6.5 to 7.0 and 7.0 to 2000?
  88. What is data integrity? Explain constraints?
  89. Explain some DBCC commands?
  90. Explain sp_configure commands, set commands?
  91. Explain what are db_options used for?
  92. What is the basic functions for master, msdb, tempdb databases?
  93. What is a job?
  94. What are tasks?
  95. What are primary keys and foreign keys?
  96. How would you Update the rows which are divisible by 10, given a set of numbers in column?
  97. If a stored procedure is taking a table data type, how it looks?
  98. How m-m relationships are implemented?
  99. How do you know which index a table is using?
 100. How will oyu test the stored procedure taking two parameters namely first name and last name returning full name?
 101. How do you find the error, how can you know the number of rows effected by last SQL statement?
 102. How can you get @@error and @@rowcount at the same time?
 103. What are sub-queries? Give example? In which case sub-queries are not feasible?
 104. What are the type of joins? When do we use Outer and Self joins?
 105. Which virtual table does a trigger use?
 106. How do you measure the performance of a stored procedure?
 107. Questions regarding Raiseerror?
 108. Questions on identity?
 109. If there is failure during updation of certain rows, what will be the state?

   




   1. Explain Windows service. You often need programs that run continuously in the background. For example, an email server is expected to listen continuously on a network port for incoming email messages, a print spooler is expected to listen continuously to print requests, and so on.
   2. What’s the Unix name for a Windows service equivalent? Daemon.
   3. So basically a Windows service application is just another executable? What’s different about a Windows service as compared to a regular application? Windows services must support the interface of the Service Control Manager (SCM). A Windows service must be installed in the Windows service database before it can be launched.
   4. How is development of a Windows service different from a Windows Forms application? A Windows service typically does not have a user interface, it supports a set of commands and can have a GUI that’s built later to allow for easier access to those commands.
   5. How do you give a Windows service specific permissions? Windows service always runs under someone’s identity. Can be System or Administrator account, but if you want to restrict the behavior of a Windows service, the best bet is to create a new user account, assign and deny necessary privileges to that account, and then associatethe Windows service with that new account.
   6. Can you share processes between Windows services? Yes.
   7. Where’s Windows service database located? HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
   8. What does SCM do? SCM is Windows Service Control Manager. Its responsibilities are as follows:
          * Accepts requests to install and uninstall Windows services from the Windows service database.
          * To start Windows services either on system startup or requested by the user.
          * To enumerate installed Windows services.
          * To maintain status information for currently running Windows services.
          * To transmits control messages (such as Start, Stop, Pause, and Continue) to available Windows services.
          * To lock/unlock Windows service database.
   9. vice on a box? Use Windows Service Installer, do not go through Add/Remove Programs or MSI file, as you would normally go with applications.
  10. When developing a Windows service for .NET, which namespace do you typically look in for required classes? System.ServiceProcess. The classes are ServiceBase, ServiceProcessInstaller, ServiceInstaller and ServiceController.
  11. How do you handle Start, Pause, Continue and Stop calls from SCM within your application? By implementing OnStart, OnPause, OnContinue and OnStop methods.
  12. Describe the start-up process for a Windows service. Main() is executed to create an instance of a Web service, then Run() to launch it, then OnStart() from within the instance is executed.
  13. I want to write a Windows service that cannot be paused, only started and stopped. How do I accomplish that? Set CanPauseAndContinue attribute to false.
  14. What application do you use to install a Windows service? installutil.exe
  15. I am trying to install my Windows service under NetworkService account, but keep getting an error. The LocalService and NetworkService accounts are only available on Windows XP and Windows Server 2003. These accounts do not exist on Windows 2000 or older operating systems.
  16. How can you see which services are running on a Windows box? Admin Tools -> Computer Management -> Services and Application -> Services. You can also open the Computer Management tool by right-clicking on My Computer and selecting Manage from the popup menu.
  17. How do you start, pause, continue or stop a Windows service off the command line? net start ServiceName, net pause ServiceName and so on. Also sc.exe provides a command-line interface for Windows services. View the OS documentation or proper book chapters on using sc.exe.
  18. Can I write an MMC snap-in for my Windows service? Yes, use classes from the System.Management.Instrumentation namespace. Also see Managing Applications Using WMI from .NET Framework SDK.

   



   

Microsoft .NET Framework interview questions

   1. What is .NET Framework?
   2. Is .NET a runtime service or a development platform? Answer It’s bothand actually a lot more. Microsoft .NET is a company-wide initiative. It includes a new way of delivering software and services to businesses and consumers. A part of Microsoft.NET is the .NET Frameworks. The frameworks is the first part of the MS.NET initiate to ship and it was given out to attendees at the PDC in July. The .NET frameworks consists of two parts: the .NET common language runtime and the .NET class library. These two components are packaged together into the .NET Frameworks SDK which will be available for free download from Microsoft’s MSDN web site later this month. In addition, the SDK also includes command-line compilers for C#, C++, JScript, and VB. You use these compilers to build applications and components. These components require the runtime to execute so this is adevelopment platform. When Visual Studio.NET ships, it will include the .NET SDK and a GUI editor, wizards, tools, and a slew of other things. However, Visual Studio.NET is NOT required to build .NET applications.
   3. New features of Framework 1.1 ?
   4. What is CLR? How it will work?
   5. What is MSIL, IL, CTS?
   6. What is JIT and how is works
   7. What is strong name? A name that consists of an assembly’s identity—its simple text name, version number, and culture information (if provided)—strengthened by a public key and a digital signature generated over the assembly.
   8. What is portable executable (PE) The file format defining the structure that all executable files (EXE) and Dynamic Link Libraries (DLL) must use to allow them to be loaded and executed by Windows. PE is derived from the Microsoft Common Object File Format (COFF). The EXE and DLL files created using the .NET Framework obey the PE/COFF formats and also add additional header and data sections to the files that are only used by the CLR. The specification for the PE/COFF file formats is available at http://www.microsoft.com/whdc/hwdev/hardware/pecoffdown.mspx
   9. Which is the base class for .net Class library? Ans: system.object
  10. What is Event? Delegate, clear syntax for writing a event delegate// keyword_delegate.cs // delegate declaration delegate void MyDelegate(int i);

11.class Program

12.{

13.  public static void Main()

14.  {

15.         TakesADelegate(new MyDelegate(DelegateFunction));

16.  }

17.  public static void TakesADelegate(MyDelegate SomeFunction)

18.  {

19.         SomeFunction(21);

20.  }

21.  public static void DelegateFunction(int i)

22.  {

23.         System.Console.WriteLine("Called by delegate withnumber: {0}.", i);

24.  }

}

  25. ment DataGrid in .NET? How would you make a combo-box appear in one column of a DataGrid? What are the ways to show data grid inside a data grid for a master details type of tables?
  26. If we write any code for DataGrid methods, what is the access specifier used for that methods in the code behind file and why?
  27. What is Application Domain? Application domains provide a unit of isolation for the common language runtime. They are created and run inside a process. Application domains are usually created by a runtime host, which is an application responsible for loading the runtime into a process and executing user code within an application domain. The runtime host creates a process and a default application domain, and runs managed code inside it. Runtime hosts include ASP.NET, Microsoft Internet Explorer, and the Windows shell.
  28. What is serialization in .NET? What are the ways to control serialization? Serialization can be defined as the process of storing the state of an object to a storage medium. During this process, the public and private fields of the object and the name of the class, including the assembly containing the class, are converted to a stream of bytes, which is then written to a data stream. When the object is subsequently deserialized, an exact clone of the original object is created.
          * Binary serialization preserves type fidelity, which is useful for preserving the state of an object between different invocations of anapplication . For example, you can share an object between different applications by serializing it to the clipboard. You can serialize an object to a stream, disk, memory, over the network, and so forth. Remoting uses serialization to pass objects “by value” from one computer orapplication domain to another.
          * XML serialization serializes only public properties and fields and does not preserve type fidelity. This is useful when you want to provide or consume data without restricting the application that uses the data. Because XML is an open standard, it is an attractive choice for sharing data across the Web. SOAP is an open standard, which makes it an attractive choice.
  29. What are the different authentication modes in the .NET environment?

30.  <authentication mode="Windows|Forms|Passport|None">

31.  <forms name="name” loginUrl="url”

32.  protection="All|None|Encryption|Validation”

33.  timeout="30″ path="/” > requireSSL=“true|false”

34.  slidingExpiration=“true|false”><

35.  credentials passwordFormat="Clear|SHA1|MD5″><

36.  user name="username” password="password"/>

37.  </credentials> </forms>

38.  <passport redirectUrl="internal"/>

  </authentication>

/li>

  39. What is the use of trace utility
  40. What is different between User Control and Web Control and Custom Control?
  41. What is exception handling? When an exception occurs, the system searches for the nearest catch clause that can handle the exception, as determined by the run-time type of the exception. First, the current method is searched for a lexically enclosing try statement, and the associated catch clauses of the try statement are considered in order. If that fails, the method that called the current method is searched for a lexically enclosing try statement that encloses the point of the call to the current method. This search continues until a catch clause is found that can handle the current exception, by naming an exception class that is of the same class, or a base class, of the run-time type of the exception being thrown. A catch clause that doesn’t name an exception class can handle any exception. Once a matching catch clause is found, the system prepares to transfer control to the first statement of the catch clause. Before execution of the catch clause begins, the system first executes, in order, any finally clauses that were associated withtry statements more nested that than the one that caught the exception. Exceptions that occur during destructor execution are worthspecial mention. If an exception occurs during destructor execution, and that exception is not caught, then the execution of that destructor is terminated and the destructor of the base class (if any) is called. If there is no base class (as in the case of the object type) or if there is no base class destructor, then the exception is discarded.
  42. What is Assembly? Assemblies are the building blocks of .NET Framework applications; they form the fundamental unit of deployment, version control, reuse, activation scoping, and security permissions. An assembly is a collection of types and resources that are built to work together and form a logical unit of functionality. An assembly provides the common language runtime withthe information it needs to be aware of type implementations. To the runtime, a type does not exist outside the context of an assembly. Assemblies are a fundamental part of programming withthe .NET Framework. An assembly performs the following functions:
          * It contains code that the common language runtime executes. Microsoft intermediate language (MSIL) code in a portable executable (PE) file will not be executed if it does not have an associated assembly manifest. Note that each assembly can have only one entry point (that is,DllMain,WinMain, orMain).
          * It forms asecurity boundary. An assembly is the unit at which permissions are requested and granted.
          * It forms atype boundary. Every type’s identity includes the name of the assembly in which it resides. A type called MyType loaded in the scope of one assembly is not the same as a type called MyType loaded in the scope of another assembly.
          * It forms areference scope boundary. The assembly’s manifest contains assembly metadata that is used for resolving types and satisfying resource requests. It specifies the types and resources that are exposed outside the assembly. The manifest also enumerates other assemblies on which it depends.
          * It forms aversion boundary. The assembly is the smallest versionable unit in the common language runtime; all types and resources in the same assembly are versioned as a unit. The assembly’s manifest describes the version dependencies you specify for any dependent assemblies.
          * It forms a deployment unit. When an application starts, only the assemblies that the application initially calls must be present. Other assemblies, such as localization resources or assemblies containing utility classes, can be retrieved on demand. This allows applications to be kept simple and thin when first downloaded.
          * It is the unit at which side-by-side execution is supported. Assemblies can be static or dynamic. Static assemblies can include .NET Framework types (interfaces and classes), as well as resources for the assembly (bitmaps, JPEG files, resource files, and so on). Static assemblies are stored on disk in PE files. You can also use the .NET Framework to create dynamic assemblies, which are run directly from memory and are not saved to disk before execution. You can save dynamic assemblies to disk after they have executed.

There are several ways to create assemblies. You can use development tools, such as Visual Studio .NET, that you have used in the past to create .dll or .exe files. You can use tools provided in the .NET Framework SDK to create assemblies withmodules created in other development environments. You can also use common language runtime APIs, such as Reflection.Emit, to create dynamic assemblies.

  43. s of assemblies? Private, Public/Shared, Satellite
  44. What are Satellite Assemblies? How you will create this? How will you get the different language strings? Satellite assemblies are often used to deploy language-specific resources for an application. These language-specific assemblies work in side-by-side execution because the application has a separate product ID for each language and installs satellite assemblies in a language-specific subdirectory for each language. When uninstalling, the application removes only the satellite assemblies associated witha given language and .NET Framework version. No core .NET Framework files are removed unless the last language for that .NET Framework version is being removed. For example, English and Japanese editions of the .NET Framework version 1.1 share the same core files. The Japanese .NET Framework version 1.1 adds satellite assemblies withlocalized resources in a \ja subdirectory. An application that supports the .NET Framework version 1.1, regardless of its language, always uses the same core runtime files.
  45. How will you load dynamic assembly? How will create assemblies at run time?
  46. What is Assembly manifest? what all details the assembly manifest will contain. Every assembly, whether static or dynamic, contains a collection of data that describes how the elements in the assembly relate to each other. The assembly manifest contains this assembly metadata. An assembly manifest contains all the metadata needed to specify the assembly’s version requirements and security identity, and all metadata needed to define the scope of the assembly and resolve references to resources and classes. The assembly manifest can be stored in either a PE file (an .exe or .dll) withMicrosoft intermediate language (MSIL) code or in a standalone PE file that contains only assembly manifest information. It contains Assembly name, Version number, Culture, Strong name information, List of all files in the assembly, Type reference information, Information on referenced assemblies.
  47. What are the contents of assembly? In general, a static assembly can consist of four elements:
          * The assembly manifest, which contains assembly metadata.
          * Type metadata.
          * Microsoft intermediate language (MSIL) code that implements the types.
          * A set of resources.
  48. Difference between assembly manifest & metadata assembly manifest -An integral part of every assembly that renders the assembly self-describing. The assembly manifest contains the assembly’s metadata. The manifest establishes the assembly identity, specifies the files that make up the assembly implementation, specifies the types and resources that make up the assembly, itemizes the compile-time dependencies on other assemblies, and specifies the set of permissions required for the assembly to run properly. This information is used at run time to resolve references, enforce version binding policy, and validate the integrity of loaded assemblies. The self-describing nature of assemblies also helps makes zero-impact install and XCOPY deployment feasible. metadata -Information that describes every element managed by the common language runtime: an assembly, loadable file, type, method, and so on. This can include information required for debugging and garbage collection, as well as security attributes, marshaling data, extended class and member definitions, version binding, and other information required by the runtime.
  49. What is Global Assembly Cache (GAC) and what is the purpose of it? (How to make an assembly to public? Steps) Each computer where the common language runtime is installed has a machine-wide code cache called the global assembly cache. The global assembly cache stores assemblies specifically designated to be shared by several applications on the computer.  You should share assemblies by installing them into the global assembly cache only when you need to.
  50. If I have more than one version of one assemblies, then how’ll I use old version (how/where to specify version number?)in my application?
  51. How to find methods of a assembly file (not using ILDASM) Reflection
  52. Value type & data types difference. Example from .NET.
  53. Integer & struct are value types or reference types in .NET?
  54. What is Garbage Collection in .Net? Garbage collection process? The process of transitively tracing through all pointers to actively used objects in order to locate all objects that can be referenced, and then arranging to reuse any heap memory that was not found during this trace. The common language runtime garbage collector also compacts the memory that is in use to reduce the working space needed for the heap.
  55. Readonly vs. const? Aconstfield can only be initialized at the declaration of the field. Areadonlyfield can be initialized either at the declaration or in a constructor. Therefore,readonlyfields can have different values depending on the constructor used. Also, while aconstfield is a compile-time constant, thereadonlyfield can be used for runtime constants, as in the following example: public static readonly uint l1 = (uint) DateTime.Now.Ticks;
  56. 

< in Reflection is What the(code? name that say how assembly, an having I?m If Namespace? create? How attribute? Custom>

         1. 
         2. < . { System.Attribute : MyAttribute public attribute.(>
         3. < { public this.myvalue="myvalue;" myvalue) MyAttribute(bool constructors(>

4.  //Declaring properties

5.  public bool MyProperty

6.  {

7.       get {return this.myvalue;}

8.       set {this.myvalue = value;}

9.  }

10.    

(/DECLARING>(/DECLARING>(/APPLYING> (/WHAT>

ion to get access to custom attributes.
class MainClass
{
public static void Main()
{
System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes();
for (int i = 0; i < attributes.Length; i ++)
{
System.Console.WriteLine(attributes[i]);
}
}
}

  57. C++ & C# differences
  58. What is the managed and unmanaged code in .net? The .NET Framework provides a run-time environment called the Common Language Runtime, which manages the execution of code and provides services that make the development process easier. Compilers and tools expose the runtime’s functionality and enable you to write code that benefits from this managed execution environment. Code that you develop witha language compiler that targets the runtime is calledmanaged code; itbenefits from features such as cross-language integration, cross-language exception handling, enhanced security, versioning and deployment support, a simplified model for component interaction, and debugging and profiling services.
  59. How do you create threading in .NET? What is the namespace for that?
  60. using directive vs using statement You create an instance in ausingstatement to ensure thatDispose is called on the object when theusingstatement is exited. Ausing statement can be exited either when the end of theusingstatement is reached or if, for example, an exception is thrown and control leaves the statement block before the end of the statement. The using directive has two uses.

          * Create an alias for a namespace (a using alias).
          * Permit the use of types in a namespace, such that, you do not have to qualify the use of a type in that namespace (ausingdirective).
  60. Describe the Managed Execution Process
  61. What is Active Directory? What is the namespace used to access the Microsoft Active Directories?
  62. Interop Services?
  63. What is RCW (Run time Callable Wrappers)? The common language runtime exposes COM objects through a proxy called the runtime callable wrapper (RCW). Although the RCW appears to be an ordinary object to .NET clients, its primary function is to marshal calls between a .NET client and a COM object.
  64. What is CCW (COM Callable Wrapper)

A proxy object generated by the common language runtime so that existing COM applications can use managed classes, including .NET Framework classes, transparently.

  66. How does you handle this COM components developed in other programming languages in .NET?
  67. How will you register com+ services?
  68. What is use of ContextUtil class? ContextUtil is the preferred class to use for obtaining COM+ context information.
  69. What is the new three features of COM+ services, which are not there in COM (MTS)
  70. Is the COM architecture same as .Net architecture?  What is the difference between them (if at all there is)?

For more questions and answers, visit Santhosh Thomas’ site, as he constantly updates these questions with answers.


   



   

.NET Remoting questions and answers

To satisfy popular demand, here’s some basics of the .NET Remoting.

   1. What’s a Windows process? It’s an application that’s running and had been allocated memory.
   2. What’s typical about a Windows process in regards to memory allocation? Each process is allocated its own block of available RAM space, no process can access another process’ code or data. If the process crashes, it dies alone without taking the entire OS or a bunch of other applications down.
   3. Why do you call it a process? What’s different between process and application in .NET, not common computer usage, terminology? A process is an instance of a running application. An application is an executable on the hard drive or network. There can be numerous processes launched of the same application (5 copies of Word running), but 1 process can run just 1 application.
   4. What distributed process frameworks outside .NET do you know? Distributed Computing Environment/Remote Procedure Calls (DEC/RPC), Microsoft Distributed Component Object Model (DCOM), Common Object Request Broker Architecture (CORBA), and Java Remote Method Invocation (RMI).
   5. What are possible implementations of distributed applications in .NET? .NET Remoting and ASP.NET Web Services. If we talk about the Framework Class Library, noteworthy classes are in System.Runtime.Remoting and System.Web.Services.
   6. When would you use .NET Remoting and when Web services? Use remoting for more efficient exchange of information when you control both ends of the application. Use Web services for open-protocol-based information exchange when you are just a client or a server with the other end belonging to someone else.
   7. What’s a proxy of the server object in .NET Remoting? It’s a fake copy of the server object that resides on the client side and behaves as if it was the server. It handles the communication between real server object and the client object. This process is also known as marshaling.
   8. What are remotable objects in .NET Remoting? Remotable objects are the objects that can be marshaled across the application domains. You can marshal by value, where a deep copy of the object is created and then passed to the receiver. You can also marshal by reference, where just a reference to an existing object is passed.
   9. What are channels in .NET Remoting? Channels represent the objects that transfer the other serialized objects from one application domain to another and from one computer to another, as well as one process to another on the same box. A channel must exist before an object can be transferred.
  10. What security measures exist for .NET Remoting in System.Runtime.Remoting? None. Security should be taken care of at the application level. Cryptography and other security techniques can be applied at application or server level.
  11. What is a formatter? A formatter is an object that is responsible for encoding and serializing data into messages on one end, and deserializing and decoding messages into data on the other end.
  12. Choosing between HTTP and TCP for protocols and Binary and SOAP for formatters, what are the trade-offs? Binary over TCP is the most effiecient, SOAP over HTTP is the most interoperable.
  13. What’s SingleCall activation mode used for? If the server object is instantiated for responding to just one single request, the request should be made in SingleCall mode.
  14. What’s Singleton activation mode? A single object is instantiated regardless of the number of clients accessing it. Lifetime of this object is determined by lifetime lease.
  15. How do you define the lease of the object? By implementing ILease interface when writing the class code.
  16. Can you configure a .NET Remoting object via XML file? Yes, via machine.config and application level .config file (or web.config in ASP.NET). Application-level XML settings take precedence over machine.config.
  17. How can you automatically generate interface for the remotable object in .NET with Microsoft tools? Use the Soapsuds tool.

   



   

.NET interview questions - Windows Forms

Questions mainly relate to drawing and graphics programming in Windows Forms, when programming C# under .NET.

   1. I am constantly writing the drawing procedures with System.Drawing.Graphics, but having to use the try and dispose blocks is too time-consuming with Graphics objects. Can I automate this? Yes, the code

2.  System.Drawing.Graphics canvas = new System.Drawing.Graphics();

3.  try

4.  {

5.     //some code

6.  }

7.  finally

8.     canvas.Dispose();

is functionally equivalent to

using (System.Drawing.Graphics canvas = new System.Drawing.Graphics())

{

   //some code

}  //canvas.Dispose() gets called automatically


   9. How do you trigger the Paint event in System.Drawing?Invalidate the current form, the OS will take care of repainting. The Update method forces the repaint.
  10. With these events, why wouldn’t Microsoft combine Invalidate and Paint, so that you wouldn’t have to tell it to repaint, and then to force it to repaint? Painting is the slowest thing the OS does, so usually telling it to repaint, but not forcing it allows for the process to take place in the background.
  11. How can you assign an RGB color to a System.Drawing.Color object? Call the static method FromArgb of this class and pass it the RGB values.
  12. What class does Icon derive from? Isn’t it just a Bitmap with a wrapper name around it? No, Icon lives in System.Drawing namespace. It’s not a Bitmap by default, and is treated separately by .NET. However, you can use ToBitmap method to get a valid Bitmap object from a valid Icon object.
  13. Before in my VB app I would just load the icons from DLL. How can I load the icons provided by .NET dynamically? By using System.Drawing.SystemIcons class, for example System.Drawing.SystemIcons.Warning produces an Icon with a warning sign in it.
  14. When displaying fonts, what’s the difference between pixels, points and ems? A pixel is the lowest-resolution dot the computer monitor supports. Its size depends on user’s settings and monitor size. A point is always 1/72 of an inch. An em is the number of pixels that it takes to display the letter M

   



   

.NET Windows Forms basics

   1. Write a simple Windows Forms MessageBox statement.

2.  System.Windows.Forms.MessageBox.Show

3.    ("Hello, Windows Forms");

        

   4. Can you write a class without specifying namespace? Which namespace does it belong to by default??
      Yes, you can, then the class belongs to global namespace which has no name. For commercial products, naturally, you wouldn’t want global namespace.
   5. You are designing a GUI application with a windows and several widgets on it. The user then resizes the app window and sees a lot of grey space, while the widgets stay in place. What’s the problem? One should use anchoring for correct resizing. Otherwise the default property of a widget on a form is top-left, so it stays at the same location when resized.
   6. How can you save the desired properties of Windows Forms application? .config files in .NET are supported through the API to allow storing and retrieving information. They are nothing more than simple XML files, sort of like what .ini files were before for Win32 apps.
   7. So how do you retrieve the customized properties of a .NET application from XML .config file? Initialize an instance of AppSettingsReader class. Call the GetValue method of AppSettingsReader class, passing in the name of the property and the type expected. Assign the result to the appropriate variable.
   8. Can you automate this process? In Visual Studio yes, use Dynamic Properties for automatic .config creation, storage and retrieval.
   9. My progress bar freezes up and dialog window shows blank, when an intensive background process takes over. Yes, you should’ve multi-threaded your GUI, with taskbar and main form being one thread, and the background process being the other.
  10. What’s the safest way to deploy a Windows Forms app? Web deployment: the user always downloads the latest version of the code, the program runs within security sandbox, properly written app will not require additional security privileges.
  11. Why is it not a good idea to insert code into InitializeComponent method when working with Visual Studio? The designer will likely through it away, most of the code inside InitializeComponent is auto-generated.
  12. What’s the difference between WindowsDefaultLocation and WindowsDefaultBounds? WindowsDefaultLocation tells the form to start up at a location selected by OS, but with internally specified size. WindowsDefaultBounds delegates both size and starting position choices to the OS.
  13. What’s the difference between Move and LocationChanged? Resize and SizeChanged? Both methods do the same, Move and Resize are the names adopted from VB to ease migration to C#.
  14. How would you create a non-rectangular window, let’s say an ellipse? Create a rectangular form, set the TransparencyKey property to the same value as BackColor, which will effectively make the background of the form transparent. Then set the FormBorderStyle to FormBorderStyle.None, which will remove the contour and contents of the form.
  15. How do you create a separator in the Menu Designer? A hyphen ‘-’ would do it. Also, an ampersand ‘&’ would underline the next letter.
  16. How’s anchoring different from docking? Anchoring treats the component as having the absolute size and adjusts its location relative to the parent form. Docking treats the component location as absolute and disregards the component size. So if a status bar must always be at the bottom no matter what, use docking. If a button should be on the top right, but change its position with the form being resized, use anchoring.

   



   

Advanced C# interview questions



   1. What’s the advantage of using System.Text.StringBuilder over System.String? StringBuilder is more efficient in the cases, where a lot of manipulation is done to the text. Strings are immutable, so each time it’s being operated on, a new instance is created.
   2. Can you store multiple data types in System.Array? No.
   3. What’s the difference between the System.Array.CopyTo() and System.Array.Clone()? The first one performs a deep copy of the array, the second one is shallow.
   4. How can you sort the elements of the array in descending order? By calling Sort() and then Reverse() methods.
   5. What’s the .NET datatype that allows the retrieval of data by a unique key? HashTable.
   6. What’s class SortedList underneath? A sorted HashTable.
   7. Will finally block get executed if the exception had not occurred? Yes.
   8. What’s the C# equivalent of C++ catch (…), which was a catch-all statement for any possible exception? A catch block that catches the exception of type System.Exception. You can also omit the parameter data type in this case and just write catch {}.
   9. Can multiple catch blocks be executed? No, once the proper catch code fires off, the control is transferred to the finally block (if there are any), and then whatever follows the finally block.
  10. Why is it a bad idea to throw your own exceptions? Well, if at that point you know that an error has occurred, then why not write the proper code to handle that error instead of passing a new Exception object to the catch block? Throwing your own exceptions signifies some design flaws in the project.
  11. What’s a delegate? A delegate object encapsulates a reference to a method. In C++ they were referred to as function pointers.
  12. What’s a multicast delegate? It’s a delegate that points to and eventually fires off several methods.
  13. How’s the DLL Hell problem solved in .NET? Assembly versioning allows the application to specify not only the library it needs to run (which was available under Win32), but also the version of the assembly.
  14. What are the ways to deploy an assembly? An MSI installer, a CAB archive, and XCOPY command.
  15. What’s a satellite assembly? When you write a multilingual or multi-cultural application in .NET, and want to distribute the core application separately from the localized modules, the localized assemblies that modify the core application are called satellite assemblies.
  16. What namespaces are necessary to create a localized application? System.Globalization, System.Resources.


  17. What’s the difference between // comments, /* */ comments and /// comments? Single-line, multi-line and XML documentation comments.
  18. How do you generate documentation from the C# file commented properly with a command-line compiler? Compile it with a /doc switch.
  19. What’s the difference between <c> and <code> XML documentation tag? Single line code example and multiple-line code example.
  20. Is XML case-sensitive? Yes, so <Student> and <student> are different elements.
  21. What debugging tools come with the .NET SDK? CorDBG – command-line debugger, and DbgCLR – graphic debugger. Visual Studio .NET uses the DbgCLR. To use CorDbg, you must compile the original C# file using the /debug switch.
  22. What does the This window show in the debugger? It points to the object that’s pointed to by this reference. Object’s instance data is shown.
  23. What does assert() do? In debug compilation, assert takes in a Boolean condition as a parameter, and shows the error dialog if the condition is false. The program proceeds without any interruption if the condition is true.
  24. What’s the difference between the Debug class and Trace class? Documentation looks the same. Use Debug class for debug builds, use Trace class for both debug and release builds.
  25. Why are there five tracing levels in System.Diagnostics.TraceSwitcher? The tracing dumps can be quite verbose and for some applications that are constantly running you run the risk of overloading the machine and the hard drive there. Five levels range from None to Verbose, allowing to fine-tune the tracing activities.
  26. Where is the output of TextWriterTraceListener redirected? To the Console or a text file depending on the parameter passed to the constructor.
  27. How do you debug an ASP.NET Web application? Attach the aspnet_wp.exe process to the DbgClr debugger.


  28. What are three test cases you should go through in unit testing? Positive test cases (correct data, correct output), negative test cases (broken or missing data, proper handling), exception test cases (exceptions are thrown and caught properly).
  29. Can you change the value of a variable while debugging a C# application? Yes, if you are debugging via Visual Studio.NET, just go to Immediate window.
  30. Explain the three services model (three-tier application). Presentation (UI), business (logic and underlying code) and data (from storage or other sources).
  31. What are advantages and disadvantages of Microsoft-provided data provider classes in ADO.NET? SQLServer.NET data provider is high-speed and robust, but requires SQL Server license purchased from Microsoft. OLE-DB.NET is universal for accessing other sources, like Oracle, DB2, Microsoft Access and Informix, but it’s a .NET layer on top of OLE layer, so not the fastest thing in the world. ODBC.NET is a deprecated layer provided for backward compatibility to ODBC engines.
  32. What’s the role of the DataReader class in ADO.NET connections? It returns a read-only dataset from the data source when the command is executed.
  33. What is the wildcard character in SQL? Let’s say you want to query database with LIKE for all employees whose name starts with La. The wildcard character is %, the proper query with LIKE would involve ‘La%’.
  34. Explain ACID rule of thumb for transactions. Transaction must be Atomic (it is one unit of work and does not dependent on previous and following transactions), Consistent (data is either committed or roll back, no “in-between” case where something has been updated and something hasn’t), Isolated (no transaction sees the intermediate results of the current transaction), Durable (the values persist if the data had been committed even if the system crashes right after).
  35. What connections does Microsoft SQL Server support? Windows Authentication (via Active Directory) and SQL Server authentication (via Microsoft SQL Server username and passwords).
  36. Which one is trusted and which one is untrusted? Windows Authentication is trusted because the username and password are checked with the Active Directory, the SQL Server authentication is untrusted, since SQL Server is the only verifier participating in the transaction.
  37. Why would you use untrusted verificaion? Web Services might use it, as well as non-Windows applications.
  38. What does the parameter Initial Catalog define inside Connection String? The database name to connect to.


  39. What’s the data provider name to connect to Access database? Microsoft.Access.
  40. What does Dispose method do with the connection object? Deletes it from the memory.
  41. What is a pre-requisite for connection pooling? Multiple processes must agree that they will share the same connection, where every parameter is the same, including the security settings.

   



   

C# interview questions



   1. What’s the implicit name of the parameter that gets passed into the class’ set method? Value, and it’s datatype depends on whatever variable we’re changing.
   2. How do you inherit from a class in C#? Place a colon and then the name of the base class. Notice that it’s double colon in C++.
   3. Does C# support multiple inheritance? No, use interfaces instead.
   4. When you inherit a protected class-level variable, who is it available to? Classes in the same namespace.
   5. Are private class-level variables inherited? Yes, but they are not accessible, so looking at it you can honestly say that they are not inherited. But they are.
   6. Describe the accessibility modifier protected internal. It’s available to derived classes and classes within the same Assembly (and naturally from the base class it’s declared in).
   7. C# provides a default constructor for me. I write a constructor that takes a string as a parameter, but want to keep the no parameter one. How many constructors should I write? Two. Once you write at least one constructor, C# cancels the freebie constructor, and now you have to write one yourself, even if there’s no implementation in it.
   8. What’s the top .NET class that everything is derived from? System.Object.
   9. How’s method overriding different from overloading? When overriding, you change the method behavior for a derived class. Overloading simply involves having a method with the same name within the class.
  10. What does the keyword virtual mean in the method definition? The method can be over-ridden.
  11. Can you declare the override method static while the original method is non-static? No, you can’t, the signature of the virtual method must remain the same, only the keyword virtual is changed to keyword override.
  12. Can you override private virtual methods? No, moreover, you cannot access private methods in inherited classes, have to be protected in the base class to allow any sort of access.
  13. Can you prevent your class from being inherited and becoming a base class for some other classes? Yes, that’s what keyword sealed in the class definition is for. The developer trying to derive from your class will get a message: cannot inherit from Sealed class WhateverBaseClassName. It’s the same concept as final class in Java.
  14. Can you allow class to be inherited, but prevent the method from being over-ridden? Yes, just leave the class public and make the method sealed.
  15. What’s an abstract class? A class that cannot be instantiated. A concept in C++ known as pure virtual method. A class that must be inherited and have the methods over-ridden. Essentially, it’s a blueprint for a class without any implementation.
  16. When do you absolutely have to declare a class as abstract (as opposed to free-willed educated choice or decision based on UML diagram)? When at least one of the methods in the class is abstract. When the class itself is inherited from an abstract class, but not all base abstract methods have been over-ridden.
  17. What’s an interface class? It’s an abstract class with public abstract methods all of which must be implemented in the inherited classes.
  18. Why can’t you specify the accessibility modifier for methods inside the interface? They all must be public. Therefore, to prevent you from getting the false impression that you have any freedom of choice, you are not allowed to specify any accessibility, it’s public by default.
  19. Can you inherit multiple interfaces? Yes, why not.
  20. And if they have conflicting method names? It’s up to you to implement the method inside your own class, so implementation is left entirely up to you. This might cause a problem on a higher-level scale if similarly named methods from different interfaces expect different data, but as far as compiler cares you’re okay.
  21. What’s the difference between an interface and abstract class? In the interface all methods must be abstract, in the abstract class some methods can be concrete. In the interface no accessibility modifiers are allowed, which is ok in abstract classes.
  22. How can you overload a method? Different parameter data types, different number of parameters, different order of parameters.
  23. If a base class has a bunch of overloaded constructors, and an inherited class has another bunch of overloaded constructors, can you enforce a call from an inherited constructor to an arbitrary base constructor? Yes, just place a colon, and then keyword base (parameter list to invoke the appropriate constructor) in the overloaded constructor definition inside the inherited class.
  24. What’s the difference between System.String and System.StringBuilder classes? System.String is immutable, System.StringBuilder was designed with the purpose of having a mutable string where a variety of operations can be performed.

   



   

C# and .NET interview questions



   1. How big is the datatype int in .NET? 32 bits.
   2. How big is the char? 16 bits (Unicode).
   3. How do you initiate a string without escaping each backslash? Put an @ sign in front of the double-quoted string.
   4. What are valid signatures for the Main function?
          * public static void Main()
          * public static int Main()
          * public static void Main( string[] args )
          * public static int Main(string[] args )
   5. Does Main() always have to be public? No.
   6. How do you initialize a two-dimensional array that you don’t know the dimensions of?
          * int [, ] myArray; //declaration
          * myArray= new int [5, 8]; //actual initialization
   7. What’s the access level of the visibility type internal? Current assembly.
   8. What’s the difference between struct and class in C#?
          * Structs cannot be inherited.
          * Structs are passed by value, not by reference.
          * Struct is stored on the stack, not the heap.
   9. Explain encapsulation. The implementation is hidden, the interface is exposed.
  10. What data type should you use if you want an 8-bit value that’s signed? sbyte.
  11. Speaking of Boolean data types, what’s different between C# and C/C++? There’s no conversion between 0 and false, as well as any other number and true, like in C/C++.
  12. Where are the value-type variables allocated in the computer RAM? Stack.
  13. Where do the reference-type variables go in the RAM? The references go on the stack, while the objects themselves go on the heap. However, in reality things are more elaborate.
  14. What is the difference between the value-type variables and reference-type variables in terms of garbage collection? The value-type variables are not garbage-collected, they just fall off the stack when they fall out of scope, the reference-type objects are picked up by GC when their references go null.
  15. How do you convert a string into an integer in .NET? Int32.Parse(string), Convert.ToInt32()
  16. How do you box a primitive data type variable? Initialize an object with its value, pass an object, cast it to an object
  17. Why do you need to box a primitive variable? To pass it by reference or apply a method that an object supports, but primitive doesn’t.
  18. What’s the difference between Java and .NET garbage collectors? Sun left the implementation of a specific garbage collector up to the JRE developer, so their performance varies widely, depending on whose JRE you’re using. Microsoft standardized on their garbage collection.
  19. How do you enforce garbage collection in .NET? System.GC.Collect();
  20. Can you declare a C++ type destructor in C# like ~MyClass()? Yes, but what’s the point, since it will call Finalize(), and Finalize() has no guarantees when the memory will be cleaned up, plus, it introduces additional load on the garbage collector. The only time the finalizer should be implemented, is when you’re dealing with unmanaged code.
  21. What’s different about namespace declaration when comparing that to package declaration in Java? No semicolon. Package declarations also have to be the first thing within the file, can’t be nested, and affect all classes within the file.
  22. What’s the difference between const and readonly? You can initialize readonly variables to some runtime values. Let’s say your program uses current date and time as one of the values that won’t change. This way you declare

public readonly string DateT = new DateTime().ToString().

  23. Can you create enumerated data types in C#? Yes.
  24. What’s different about switch statements in C# as compared to C++? No fall-throughs allowed.
  25. What happens when you encounter a continue statement inside the for loop? The code for the rest of the loop is ignored, the control is transferred back to the beginning of the loop.
  26. Is goto statement supported in C#? How about Java? Gotos are supported in C#to the fullest. In Java goto is a reserved keyword that provides absolutely no functionality.
  27. Describe the compilation process for .NET code? Source code is compiled and run in the .NET Framework using a two-stage process. First, source code is compiled to Microsoft intermediate language (MSIL) code using a .NET Framework-compatible compiler, such as that for Visual Basic .NET or Visual C#. Second, MSIL code is compiled to native code.
  28. Name any 2 of the 4 .NET authentification methods. ASP.NET, in conjunction with Microsoft Internet Information Services (IIS), can authenticate user credentials such as names and passwords using any of the following authentication methods:
          * Windows: Basic, digest, or Integrated Windows Authentication (NTLM or Kerberos).
          * Microsoft Passport authentication
          * Forms authentication
          * Client Certificate authentication
  29. How do you turn off SessionState in the web.config file? In the system.web section of web.config, you should locate the httpmodule tag and you simply disable session by doing a remove tag with attribute name set to session.

<httpModules>
<remove name="Session” />
</httpModules>

  30. What is main difference between Global.asax and Web.Config? ASP.NET uses the global.asax to establish any global objects that your Web application uses. The .asax extension denotes an application file rather than .aspx for a page file. Each ASP.NET application can contain at most one global.asax file. The file is compiled on the first page hit to your Web application. ASP.NET is also configured so that any attempts to browse to the global.asax page directly are rejected. However, you can specify application-wide settings in the web.config file. The web.config is an XML-formatted text file that resides in the Web site’s root directory. Through Web.config you can specify settings like custom 404 error pages, authentication and authorization settings for the Web site, compilation options for the ASP.NET Web pages, if tracing should be enabled, etc.

   



   

.NET framework programming interview questions



NET framework overview

   1. Has own class libraries. System is the main namespace and all other namespaces are subsets of this.
   2. It has CLR(Common language runtime, Common type system, common language specification)
   3. All the types are part of CTS and Object is the base class for all the types.
   4. If a language said to be .net complaint, it should be compatible with CTS and CLS.
   5. All the code compiled into an intermediate language by the .Net language compiler, which is nothing but an assembly.
   6. During runtime, JIT of CLR picks the IL code and converts into PE machine code and from there it processes the request.
   7. CTS, CLS, CLR
   8. Garbage Collection
   9. Dispose, finalize, suppress finalize, Idispose interface
  10. Assemblies, Namespace: Assembly is a collection of class/namespaces. An assembly contains Manifest, Metadata, Resource files, IL code
  11. Com interoperability, adding references, web references
  12. Database connectivity and providers

Application Domain

   1. Class modifiers: public, private, friend, protected, protected friend, mustinherit, NotInheritable
   2. Method modifiers: public, private
   3. Overridable
   4. Shadows
   5. Overloadable
   6. Overrides
   7. Overloads
   8. Set/Get Property
   9. IIF
  10. Inheritance
  11. Polymorphism
  12. Delegates
  13. Events
  14. Reflection
  15. Boxing
  16. UnBoxing

ASP.Net

   1. Web Controls: Data grid (templates, sorting, paging, bound columns, unbound columns, data binding), Data list, repeater controls
   2. HTML Controls
   3. Code behind pages, system.web.ui.page base class
   4. Web.config: App settings, identity (impersonate), authentication (windows, forms, anonymous, passport), authorization
   5. Databind.eval
   6. Trace, Debug
   7. Output cache
   8. Session management
   9. Application, Session
  10. Global.asax httpapplication
  11. User controls, custom controls, custom rendered controls (postback event, postdatachanged event) usercontrol is the base class
  12. Directives

ADO.Net

   1. Command object (ExecuteNonquery, ExecuteReader, ExecuteXMLReader, ExecuteScalar)
   2. DataAdapter object (Fill)
   3. Dataset (collection of tables)
   4. CommandBuiler object
   5. Transaction Object
   6. Isolation levels

   



   

ASP.NET interview questions

   1. Describe the role of inetinfo.exe, aspnet_isapi.dll andaspnet_wp.exe
      in the page loading process. inetinfo.exe is theMicrosoft IIS server running,
      handling ASP.NET requests among other things.When an ASP.NET request is received
      (usually a file with .aspx extension),the ISAPI filter aspnet_isapi.dll takes
      care of it by passing the request tothe actual worker process aspnet_wp.exe.
   2. What’s the difference between Response.Write() andResponse.Output.Write()?
      The latter one allows you to write formattedoutput.
   3. What methods are fired during the page load? Init() - when the pageis
      instantiated, Load() - when the page is loaded into server memory,PreRender()
      - the brief moment before the page is displayed to the user asHTML, Unload()
      - when page finishes loading.
   4. Where does the Web page belong in the .NET Framework class hierarchy?System.Web.UI.Page
   5. Where do you store the information about the user’s locale? System.Web.UI.Page.Culture
   6. What’s the difference between Codebehind="MyCode.aspx.cs" andSrc="MyCode.aspx.cs"?
      CodeBehind is relevant to Visual Studio.NET only.
   7. What’s a bubbled event? When you have a complex control, likeDataGrid,
      writing an event processing routine for each object (cell, button,row, etc.)
      is quite tedious. The controls can bubble up their eventhandlers, allowing
      the main DataGrid event handler to take care of itsconstituents.
   8. Suppose you want a certain ASP.NET function executed on MouseOver overa
      certain button. Where do you add an event handler? It’s the Attributesproperty,
      the Add function inside that property. So

btnSubmit.Attributes.Add("onMouseOver","someClientCode();")

A simple"Javascript:ClientCode();” in the button control of the .aspx
page will attach the handler (javascript function)to the onmouseover event.

   9. What data type does the RangeValidator control support? Integer,String
      and Date.
  10. Where would you use an iHTTPModule, and what are the limitations of any
      approach you might take in implementing one? One of ASP.NET’s most useful
      features is the extensibility of the HTTP pipeline, the path that data takes between client and server.
      You can use them to extend your ASP.NET applications by adding pre- and post-processing
      to each HTTP request coming into your application. For example, if you wanted
      custom authentication facilities for your application, the best technique
      would be to intercept the request when it comes in and process the request
      in a custom HTTP module.
  11. Explain what a diffgram is, and a good use for one? A DiffGram is
      an XML format that is used to identify current and original versions of data
      elements. The DataSet uses the DiffGram format to load and persist its contents,
      and to serialize its contents for transport across a network connection. When
      a DataSet is written as a DiffGram, it populates the DiffGram with all the
      necessary information to accurately recreate the contents, though not the
      schema, of the DataSet, including column values from both the Original and
      Current row versions, row error information, and row order.

   





C# Interview Questions

This is a list of questions I have gathered from other sources and created myself over a period of time from my experience, many of which I felt where incomplete or simply wrong.  I have finally taken the time to go through each question and correct them to the best of my ability.  However, please feel free to post feedback to challenge, improve, or suggest new questions.  I want to thank those of you that have contributed quality questions and corrections thus far.

There are some question in this list that I do not consider to be good questions for an interview.  However, they do exist on other lists available on the Internet so I felt compelled to keep them easy access.

General Questions

   1. Does C# support multiple-inheritance?
      No.
      
   2. Who is a protected class-level variable available to?
      It is available to any sub-class (a class inheriting this class).
      
   3. Are private class-level variables inherited?
      Yes, but they are not accessible.  Although they are not visible or accessible via the class interface, they are inherited.
      
   4. Describe the accessibility modifier “protected internal”.
      It is available to classes that are within the same assembly and derived from the specified base class.
      
   5. What’s the top .NET class that everything is derived from?
      System.Object.
      
   6. What does the term immutable mean?
      The data value may not be changed.  Note: The variable value may be changed, but the original immutable data value was discarded and a new data value was created in memory.
      
   7. What’s the difference between System.String and System.Text.StringBuilder classes?
      System.String is immutable.  System.StringBuilder was designed with the purpose of having a mutable string where a variety of operations can be performed.
      
   8. What’s the advantage of using System.Text.StringBuilder over System.String?
      StringBuilder is more efficient in cases where there is a large amount of string manipulation.  Strings are immutable, so each time a string is changed, a new instance in memory is created.
      
   9. Can you store multiple data types in System.Array?
      No.
      
  10. What’s the difference between the System.Array.CopyTo() and System.Array.Clone()?
      The Clone() method returns a new array (a shallow copy) object containing all the elements in the original array.  The CopyTo() method copies the elements into another existing array.  Both perform a shallow copy.  A shallow copy means the contents (each array element) contains references to the same object as the elements in the original array.  A deep copy (which neither of these methods performs) would create a new instance of each element's object, resulting in a different, yet identacle object.
      
  11. How can you sort the elements of the array in descending order?
      By calling Sort() and then Reverse() methods.
      
  12. What’s the .NET collection class that allows an element to be accessed using a unique key?
      HashTable.
      
  13. What class is underneath the SortedList class?
      A sorted HashTable.
      
  14. Will the finally block get executed if an exception has not occurred?­
      Yes.
      
  15. What’s the C# syntax to catch any possible exception?
      A catch block that catches the exception of type System.Exception.  You can also omit the parameter data type in this case and just write catch {}.
      
  16. Can multiple catch blocks be executed for a single try statement?
      No.  Once the proper catch block processed, control is transferred to the finally block (if there are any).
      
  17. Explain the three services model commonly know as a three-tier application.
      Presentation (UI), Business (logic and underlying code) and Data (from storage or other sources).
      

Class Questions

   1. What is the syntax to inherit from a class in C#?
      Place a colon and then the name of the base class.
      Example: class MyNewClass : MyBaseClass
      
   2. Can you prevent your class from being inherited by another class?
      Yes.  The keyword “sealed” will prevent the class from being inherited.
      
   3. Can you allow a class to be inherited, but prevent the method from being over-ridden?
      Yes.  Just leave the class public and make the method sealed.
      
   4. What’s an abstract class?
      A class that cannot be instantiated.  An abstract class is a class that must be inherited and have the methods overridden.  An abstract class is essentially a blueprint for a class without any implementation.
      
   5. When do you absolutely have to declare a class as abstract?
      1. When the class itself is inherited from an abstract class, but not all base abstract methods have been overridden.
      2.  When at least one of the methods in the class is abstract.
      
   6. What is an interface class?
      Interfaces, like classes, define a set of properties, methods, and events. But unlike classes, interfaces do not provide implementation. They are implemented by classes, and defined as separate entities from classes.
      
   7. Why can’t you specify the accessibility modifier for methods inside the interface?
      They all must be public, and are therefore public by default.
      
   8. Can you inherit multiple interfaces?
      Yes.  .NET does support multiple interfaces.
      
   9. What happens if you inherit multiple interfaces and they have conflicting method names?
      It’s up to you to implement the method inside your own class, so implementation is left entirely up to you. This might cause a problem on a higher-level scale if similarly named methods from different interfaces expect different data, but as far as compiler cares you’re okay.
      To Do: Investigate
      
  10. What’s the difference between an interface and abstract class?
      In an interface class, all methods are abstract - there is no implementation.  In an abstract class some methods can be concrete.  In an interface class, no accessibility modifiers are allowed.  An abstract class may have accessibility modifiers.
      
  11. What is the difference between a Struct and a Class?
      Structs are value-type variables and are thus saved on the stack, additional overhead but faster retrieval.  Another difference is that structs cannot inherit.
      

Method and Property Questions

   1. What’s the implicit name of the parameter that gets passed into the set method/property of a class?
      Value.  The data type of the value parameter is defined by whatever data type the property is declared as.
      
   2. What does the keyword “virtual” declare for a method or property?
      The method or property can be overridden.
      
   3. How is method overriding different from method overloading?
      When overriding a method, you change the behavior of the method for the derived class.  Overloading a method simply involves having another method with the same name within the class.
      
   4. Can you declare an override method to be static if the original method is not static?
      No.  The signature of the virtual method must remain the same.  (Note: Only the keyword virtual is changed to keyword override)
      
   5. What are the different ways a method can be overloaded?
      Different parameter data types, different number of parameters, different order of parameters.
      
   6. If a base class has a number of overloaded constructors, and an inheriting class has a number of overloaded constructors; can you enforce a call from an inherited constructor to a specific base constructor?
      Yes, just place a colon, and then keyword base (parameter list to invoke the appropriate constructor) in the overloaded constructor definition inside the inherited class.
      

Events and Delegates

   1. What’s a delegate?
      A delegate object encapsulates a reference to a method.
      
   2. What’s a multicast delegate?
      A delegate that has multiple handlers assigned to it.  Each assigned handler (method) is called.
      

XML Documentation Questions

   1. Is XML case-sensitive?
      Yes.
      
   2. What’s the difference between // comments, /* */ comments and /// comments?
      Single-line comments, multi-line comments, and XML documentation comments.
      
   3. How do you generate documentation from the C# file commented properly with a command-line compiler?
      Compile it with the /doc switch.
      

Debugging and Testing Questions

   1. What debugging tools come with the .NET SDK?
      1.   CorDBG – command-line debugger.  To use CorDbg, you must compile the original C# file using the /debug switch.
      2.   DbgCLR – graphic debugger.  Visual Studio .NET uses the DbgCLR.
      
   2. What does assert() method do?
      In debug compilation, assert takes in a Boolean condition as a parameter, and shows the error dialog if the condition is false.  The program proceeds without any interruption if the condition is true.
      
   3. What’s the difference between the Debug class and Trace class?
      Documentation looks the same.  Use Debug class for debug builds, use Trace class for both debug and release builds.
      
   4. Why are there five tracing levels in System.Diagnostics.TraceSwitcher?
      The tracing dumps can be quite verbose.  For applications that are constantly running you run the risk of overloading the machine and the hard drive.  Five levels range from None to Verbose, allowing you to fine-tune the tracing activities.
      
   5. Where is the output of TextWriterTraceListener redirected?
      To the Console or a text file depending on the parameter passed to the constructor.
      
   6. How do you debug an ASP.NET Web application?
      Attach the aspnet_wp.exe process to the DbgClr debugger.
      
   7. What are three test cases you should go through in unit testing?
      1.       Positive test cases (correct data, correct output).
      2.       Negative test cases (broken or missing data, proper handling).
      3.       Exception test cases (exceptions are thrown and caught properly).
      
   8. Can you change the value of a variable while debugging a C# application?
      Yes.  If you are debugging via Visual Studio.NET, just go to Immediate window.
      

ADO.NET and Database Questions

   1. What is the role of the DataReader class in ADO.NET connections?
      It returns a read-only, forward-only rowset from the data source.  A DataReader provides fast access when a forward-only sequential read is needed.




   2. What are advantages and disadvantages of Microsoft-provided data provider classes in ADO.NET?
      SQLServer.NET data provider is high-speed and robust, but requires SQL Server license purchased from Microsoft. OLE-DB.NET is universal for accessing other sources, like Oracle, DB2, Microsoft Access and Informix.  OLE-DB.NET is a .NET layer on top of the OLE layer, so it’s not as fastest and efficient as SqlServer.NET.
      
   3. What is the wildcard character in SQL?
      Let’s say you want to query database with LIKE for all employees whose name starts with La. The wildcard character is %, the proper query with LIKE would involve ‘La%’.
      
   4. Explain ACID rule of thumb for transactions.
      A transaction must be:
      1.       Atomic - it is one unit of work and does not dependent on previous and following transactions.
      2.       Consistent - data is either committed or roll back, no “in-between” case where something has been updated and something hasn’t.
      3.       Isolated - no transaction sees the intermediate results of the current transaction).
      4.       Durable - the values persist if the data had been committed even if the system crashes right after.
      
   5. What connections does Microsoft SQL Server support?
      Windows Authentication (via Active Directory) and SQL Server authentication (via Microsoft SQL Server username and password).
      
   6. Between Windows Authentication and SQL Server Authentication, which one is trusted and which one is untrusted?
      Windows Authentication is trusted because the username and password are checked with the Active Directory, the SQL Server authentication is untrusted, since SQL Server is the only verifier participating in the transaction.
      
   7. What does the Initial Catalog parameter define in the connection string?
      The database name to connect to.
       
   8. What does the Dispose method do with the connection object?
      Deletes it from the memory.
      To Do: answer better.  The current answer is not entirely correct.
      
   9. What is a pre-requisite for connection pooling?
      Multiple processes must agree that they will share the same connection, where every parameter is the same, including the security settings.  The connection string must be identical.
      

Assembly Questions

   1. How is the DLL Hell problem solved in .NET?
      Assembly versioning allows the application to specify not only the library it needs to run (which was available under Win32), but also the version of the assembly.
      
   2. What are the ways to deploy an assembly?
      An MSI installer, a CAB archive, and XCOPY command.
      
   3. What is a satellite assembly?
      When you write a multilingual or multi-cultural application in .NET, and want to distribute the core application separately from the localized modules, the localized assemblies that modify the core application are called satellite assemblies.
      
   4. What namespaces are necessary to create a localized application?
      System.Globalization and System.Resources.
      
   5. What is the smallest unit of execution in .NET?
      an Assembly.
      
   6. When should you call the garbage collector in .NET?
      As a good rule, you should not call the garbage collector.  However, you could call the garbage collector when you are done using a large object (or set of objects) to force the garbage collector to dispose of those very large objects from memory.  However, this is usually not a good practice.
      
   7. How do you convert a value-type to a reference-type?
      Use Boxing.
      
   8. What happens in memory when you Box and Unbox a value-type?
      Boxing converts a value-type to a reference-type, thus storing the object on the heap.  Unboxing converts a reference-type to a value-type, thus storing the value on the stack.



posted on Tuesday, March 16, 2004 8:09 AM


Feedback

# re: Interview Questions: C# 6/7/2004 7:25 AM Mark Wagner

Add questions for:
- Global Assembly Cache (GAC)
- DataSet vs. DataReader
- Remoting



# re: Interview Questions: C# 6/22/2004 5:19 PM Not sure about #34: "Why is it a bad idea to

Exceptions are there for a reason. It is so that you can centralize your error handling code instead of having to tediously monitor return codes and/or sprinkle error handling code all over the place. A central location for managing errors is much easier to maintain and test than having error code all over the place.



# re: Interview Questions: C# 6/26/2004 6:41 PM Mark Wagner

A quick FYI, I did not write these questions myself. I found them to be useful and wanted to keep a copy for myself since I do hold technical interview from time to time. I have a link to what I believe the source is.

As for question number 34, I do not agree completely with the answer. Moreover, I don't think the answer is very complete or clear.

I am currently putting together an Exception Handling Best Practices document. This short post will not provide enough to properly cover exception handling. I hope to post it soon, and when I do it will be in my Developer Guidelines section just in case you want to subscribe to that article category.

There are two primary exception throwing scenarios:
- Throwing a new exception (creating and throwing it)
- Re-Throwing an exception (an exception that has been caught within a try/catch block)

THOWING (a new exception):
However, when it comes to "throwing" exceptions I have one rule that is the most important of all.

Rule: Throw an exception only when the current request/process simply can not progress due to incorrect, insufficient data, or otherwise. If this code is in the UI an exception should rarely be thrown since a user can usually be notified of the error - such as an incorrect password. However, for middle tier or non-UI code, throwing an exception is most likely the correct response.

RE-THROWING (an existing exception):
The primary rule I have when "Re-Throwing" an exception is:

Rule: Re-Throw an exception ONLY when you are adding value to the exception process such as adding data to the exception for debugging purposes. Otherwise, the try/catch should not even be used since the exception will naturally propagate up the call stack.




# re: Interview Questions: C# 7/31/2004 2:51 PM Eyal

Another good question
What is the difference between a Struct and a Class?

Structs are value-type variables and are thus saved on the stack -> additional overhead but faster retrieval.

Another difference is that structs CANNOT inherit.



# re: Interview Questions: C# 8/10/2004 4:13 AM Manoj

Please put some more questions about oops here



# re: Interview Questions: C# 8/10/2004 4:14 AM manoj

Also put some more questions about Web Service, Assemblies, events & delegates....



# re: Interview Questions: C# 8/17/2004 9:30 AM mm

What does the term immutable mean?

I believe it means to create a view of data that is not modifiable and is temporary of data that is modifiable.



# re: Interview Questions: C# 8/17/2004 9:31 AM mm

What does the term immutable mean?

I believe it means to create a view of data that is not modifiable and is temporary of data that is modifiable.



# re: Interview Questions: C# 9/12/2004 4:23 PM Vikas

Immutable means you can't change the currrent data, but if you perform some operation on that data, a new copy is created. The operation doesn't change the data itself. Like let's say you have a string object having "hello" value. Now if you say temp = temp + "new value" a new object is created, and values is saved in that. the temp object is immutable, and can't be changed.

Did it help???



# re: Interview Questions: C# 10/19/2004 7:19 AM Raja A.S.

hi
The Question are Use ful but ,Question no 2

2. When you inherit a protected class-level variable, who is it available to?
Ans-Classes in the same namespace.

The above answer that is displayed in the page is wrong one protected members can be acceable by all the derived class irrespective of the Namespaces only protectedFriend or protectedinternal will be accessed inside the namespace...







# re: Interview Questions: C# 10/19/2004 9:18 AM Murali

Hi,
Jc I need this important qns.
Regards
D.MURALI



# re: Interview Questions: C# 10/26/2004 12:59 PM pooja

Include the questions about deployment.



# re: Interview Questions: C# 11/4/2004 8:00 PM myhomevancouver

It's great.
One more question:
Difference between DataReader and DataAdapter / DataSet and DataAdapter?




# re: Interview Questions: C# 11/13/2004 8:59 PM krishna

plz snd me more faq and meterial




# re: Interview Questions: C# 11/21/2004 9:14 PM Nyoti

Hi,

These questions are really very useful. Thank you very much for that.
Multiple inheritance is not supported in C# but it can be achieved using interfaces is fine. But can you please explain why multiple inheritance of classes in not supported in C#?
Thanks in advance.



# re: Interview Questions: C# 11/26/2004 11:36 AM Tewodros Dori

Hi,
I found it to be a very useful resource. I appreciate you for organizing the material in such a good order. It would be nice if you could add some more questions in assemblies and delegates and whenever possible to include some code excerpt.
Thanks a lot




# re: Interview Questions: C# 12/15/2004 8:38 AM prasad

wHAT IS THE DIFFERENCE BETWEEN THE CONSTRUCTOR AND DISTRUCTOR PLZ TELL




# re: Interview Questions: C# 12/20/2004 4:18 PM Azad

Hi,
Thanx a lot seding a useful chain of questions.Can u send me some more of them



# re: Interview Questions: C# 3/14/2005 1:07 AM Bhupen parikh

These questions are really very useful. Thank you very much for that but can u tell me why C# more used (preffered) than VB.net ??



# re: Interview Questions: C# 3/21/2005 8:46 AM Ruchi Jain

These questions are really very helpful.I request you to add more questions on event handling and delegates.



# re: Interview Questions: C# 3/23/2005 3:10 AM P.N.Balamurali

These Interview Questions is very useful for
every C# programmers but is not enough for us.
please send more interview question for us
this is useful one. Thank you............................




# re: Interview Questions: C# 3/31/2005 2:29 AM anshu

Hello thanks a lot for c# qiuestion can u send me another question in c# and asp.net



# re: Interview Questions: C# 4/4/2005 3:21 AM Dev

so good. pls send me lot of interview question in C# and asp.net .
thanks



# re: Interview Questions: C# 4/10/2005 3:24 AM P.V.Kameshwar

I was quite impressed by the questions, I request you to provide indepth questions on wach and every topic which will be much more useful for all



# re: Interview Questions: C# 4/16/2005 3:13 AM vnvskumar

Questions are good.Please keep add questions on events and delegates,remoting and webservices.



# re: Interview Questions: C# 4/16/2005 3:14 AM vnvskumar

Questions are good.Please keep add questions on events and delegates,remoting and webservices.



# re: Interview Questions: C#: Array.Copy vs Array.Clone 4/18/2005 9:54 AM vtsr

Array.CopyTo does not make a deep copy. This can be easily verified by running the following code.

public class MyClass
{
public static void Main()
{
Container[] containerArray = new Container[10];
for( int i=0; i < containerArray.Length; i++ ){
containerArray[i] = new Container( i );
}
Container[] containerArrayCopy = new Container[10];
containerArray.CopyTo( containerArrayCopy, 0 );
containerArrayCopy[2].V = 3;
for( int i=0; i < containerArray.Length; i++ ){
Console.Write( "{0}, ", containerArray[i].V );
}
Console.WriteLine();
}

}

public class Container{
public int V;
public Container(int i ){
V = i;
}
}



# re: Interview Questions: C# 4/18/2005 11:02 AM Mark Wagner

vstr

You are correct.

I am now trying to determine the difference between the CopyTo and Clone - other than the starting index.

Thanks for pointing this out.

Mark



# re: Interview Questions: Dispose method 5/30/2005 1:38 AM Anand Thakur

Dispose places the connection back in the managed pool. so that other object/class can use that connection for further use.



# sdf 6/1/2005 11:30 AM asdf

asdfasd



# re: Interview Questions: C# 6/26/2005 2:04 AM Ram Naresh Yadav Talluri M.C.A., M.S

( June 25th 2005 )
================ Holool India Written Test Paper (By. Ram Naresh Yadav Talluri.(M.C.A ., M.S))================

1. Use of Enable view state ? if turn off what happen ?
2. Response.write,server.transfer difference which one is used when ?
3. server.transfer limitation ?
4. how can i kill user session ?
5. wild card character in sql ?
6. can aspx page contains two pager tags ?
7. can aspx page have multi language declarations ?
8. readonly syntax ?
9. which control is used to compare two controls?
10. two common propertys for any validation contro ?
11. what is an assembly ?
12. what is inheritancy where u required ?
13 polymorphism and advantage ?
14. what is the method while we are using adapter and dataset ?
15. what are the things we generally declare in session_start , application_start ?
16. .net class library to find unique key?
17. can Array contains different datatypes ?
18. ACID properties ?
19. which tag i need to use manually to bind columns in a datagrid ?
20. throw exception and rethrowing difference. ?
21. when garbage collector come into picture. ?
22. what is code behined and an aspx files are for?
23. how u maintain data while navigating one page to another
24. --
25. --
----------Ram Naresh Yadav Talluri.(M.C.A ., M.S)--------------------
yaduvancy@india.com






# re: Interview Questions: C# 7/7/2005 2:45 PM latha

What does the Dispose method do with the connection object?
The right answer for this question is:
The dispose method will release all the resources owned by the object. And then it calls the dispose() of its parent class. This is probagated through the base type hierarchy.



# re: Interview Questions: C# 7/21/2005 4:20 AM Tejas

questions are good.please continue the good work



# re: Interview Questions: C# 7/25/2005 8:07 AM jkyoutsey

Best definition for a delegate I've ever seen is a "type safe function pointer". That really cleared things up for me.



# re: Interview Questions: C# 7/26/2005 10:31 PM Majid

Array.CopyTo handles type casting automatically but Clone needs explicit casting.



# re: Interview Questions: C# 7/26/2005 10:38 PM mamta

these questions are really helpfl while preparing 4 an interview.
could u plz tell me that why c# is preffered language for asp.net?



# Interview questions on C# 8/2/2005 2:55 AM Niranjan

Here few questions that I had faced for Symphony firm in Bangalore...

1) Can we have private constructor? when can I use them?

2) what is an internal specifier? what happens internally when I use access specifier Internal ?

3) DO we have inline function in C#? ohterwise what is equivalent inline function in C#?

I would be greatful if somebody can give me wiht proper justification for the above questions?

Thankx in advance...





# re: Interview Questions: C# 8/2/2005 9:15 PM Smita

Hi,

Question: 1) Can we have private constructor? when can I use them?

Answer: private constructors can be used when u donot want the class's object to be created. Since the constructor cannot be accessed, an object of the class cannot be created. A possible scenario would be , a class with static methods.. which dont need object instance to be called.



# re: Interview Questions: C# 8/4/2005 1:52 AM anu

plz send some questions on threads and exceptional handling too.



# Question number 9 in Classes 8/5/2005 7:15 AM Shikher Bisaria

This question can be explained using Explicit interface Implementation ..please look this up on msdn..they have a pretty nifty explanation



# re: Interview Questions: C# 8/15/2005 10:54 PM Dan Masters

The answer to general question 1 is incorrect. The language supports multiple interface inheritance though it doesn't support multiple class inheritance.



# re: Interview Questions: C# 8/29/2005 6:47 AM sarah

Hi,
what are the meaning of copy constructor & distructor??
Thank you very much.



# re: Interview Questions: C# 8/30/2005 2:50 AM Fire Ozzy

Good collection... But seems to be basic..
Pls try to put some deep dive questions..



# re: Interview Questions: C# 9/10/2005 9:57 PM KS

Mark, could you please include some information on system.threading class?



# re: Interview Questions: C# 9/12/2005 10:00 AM Sanket

Hello there,

Can someone explain when we inherit from HttpApplication to create a class for Global.asax,
Why do we NOT have to override Application_Start or any other event handler methods ??

Or, How is that eventhandler linked with the event?

Thanks
Sanket_Vaidya@hotmail.com



# re: Interview Questions: C# 9/14/2005 9:21 AM Tejas

Really superb site..

really ejoying while reading this site... nice one

best of luck go ahed ... :)



# re: Interview Questions: C# 9/21/2005 7:52 AM Adrian

Getting a bit petty here, but Hashtable has a lowercase t (i.e. not HashTable).



# re: Interview Questions: C# 9/21/2005 11:27 PM Ram Naresh Talluri, Kiran Kumar Dopplapudi, Ramara

1. Explain the differences between Server-side and Client-side code?

ANS: Server side code will execute at server end all the business logic will execute at server end where as client side code will execute at client side at browser end.

2. What type of code (server or client) is found in a Code-Behind class?

ANS : Server side.

3. Should validation (did the user enter a real date) occur server-side or client-side? Why?

ANS : client side . there is no need to go to validate user input. If it relates to data base validation we need to validate at server side.

4. What does the "EnableViewState" property do? Why would I want it on or off?

ANS: IT keeps the data of the control during post backs.
if we turn off the values should not populate during server round trip.

5. What is the difference between Server.Transfer and
Response.Redirect? Why would I choose one over the other?

ANS: Server.Trnasfer will prevent round trip. it will redirect pages which or in the same directory. NO way to pass the query strings . Thru http context we can able to get the previous page control values.

Response.Redirect : There is a round trip to process the request. We can redirect to any page external / internal other than aspx. We can pass the query string thru which we can manage sessions.

6. Can you give an example of when it would be appropriate to use a web service as opposed to a non-serviced .NET component

ANS : Web services are best suite for Hetrogenious environment.
Remoting is best suite for Homogenious environment. The systems that under CLR.


7. Let's say I have an existing application written using Visual Studio 6 (VB 6, InterDev 6) and this application utilizes Windows 2000 COM+ transaction services. How would you approach migrating this
application to .NET

We need to have Wrapper to communicate COM components in .net. and vis versa

CCW : Com Callable wrapper.
RCW : RUN time callable wrapper.

8. Can you explain the difference between an ADO.NET Dataset and anADO Recordset?\
ANS : DIsconnected architechure . Maintainace relation schemas. MUtilple table grouping.
Connected one .
9. Can you give an example of what might be best suited to place in the Application_Start and Session_Start subroutines?

ANS: APplication_start need for global variable which are available over the application.
Sesssion_Start : login dependent ( user dependent)

10. If I'm developing an application that must accomodate multiple security levels though secure login and my ASP.NET web appplication is
spanned across three web-servers (using round-robbin load balancing)
what would be the best approach to maintain login-in state for the
users?

ANS : Database Support.
or Thru state service.

11. What are ASP.NET Web Forms? How is this technology different than what is available though ASP (1.0-3.0)?
ANS : ASP . Interprepter.. use the script engine.
ASP.Net Compiled.

12. How does VB.NET/C# achieve polymorphism?
ANS : Function overloading.
Operator overloading.
11. Can you explain what inheritance is and an example of when you might use it?

ANS : Heridity.
Use the existing functionality along with its own properities.

13. How would you implement inheritance using VB.NET/C#?
ANS: Derived Class : Basecalss
VB.NEt : Derived Class Inherits Baseclass
14. Whats an assembly
ANS : A Basic unit of executable code >

Which contains : Manifest - Meta data
versioning , Calture , IL, Reference

15. Describe the difference between inline and code behind - which is best in a loosely coupled solution

Tightly coupled - INLINE
ANS: inline function bind at compile time can write in aspx page with in <% %> .

17. Explain what a diffgram is, and a good use for one

ANS : is an xml grammer. it talk about state of node in xml file.

18. Where would you use an iHTTPModule, and what are the limitations of any approach you might take in implementing one

ANS: Preprocessing before going to IIS.

20. What are the disadvantages of viewstate/what are the benefits
ANS : IT can be hacked . page is size is heavy.

21 Describe session handling in a webfarm, how does it work and what are the limits

ANS:
Session - mode
State sever
OUtprocess
sql

22. How would you get ASP.NET running in Apache web servers - why would you even do this?

ANS: ---- Install Mod_AspDotNet
Add at the end of C:\Program Files\Apache Group\Apache2\conf\httpd.conf the following lines

23. Whats MSIL, and why should my developers need an appreciation of it if at all?

ANS : Microsoft Intermeidate lanaguage. which is the out put for all the .net supported languages after comiplation will produce.
Appreciation for cross language support.

24. In what order do the events of an ASPX page execute. As a developer is it important to undertsand these events?
ANS : INIT, PageLoad, Prerender , UNload.

25. Which method do you invoke on the DataAdapter control to load your generated dataset with data?

Fill()

26. Can you edit data in the Repeater control?
NO

27. Which template must you provide, in order to display data in a Repeater control?
ITemtemplate

28. How can you provide an alternating color scheme in a Repeatercontrol?

AlternateItemTemplate

29. What property must you set, and what method must you call in your code, in order to bind the data from some data source to the Repeatercontrol?

Datasource,
DataBind

30. What base class do all Web Forms inherit from?

System.Web.UI.Page

31. What method do you use to explicitly kill a user s session?

abondon()

32 How do you turn off cookies for one page in your site?
disablecookies.

33. Which two properties are on every validation control?
control to validate, error message
34. What tags do you need to add within the asp:datagrid tags to bind
columns manually?
autogenerated columns is set to false
35. How do you create a permanent cookie?
Cooke = ne cookee().
cooke.adddate.

36. What tag do you use to add a hyperlink column to the DataGrid?
hyper link column

37. What is the standard you use to wrap up a call to a Web service
------------
38. Which method do you use to redirect the user to another page without performing a round trip to the client?
server.transfer
39. What is the transport protocol you use to call a Web service SOAP
http
40. True or False: A Web service can only be written in .NET
false
41. What does WSDL stand for? webservice discription language. it is used to generate for proxy( server object)

42. What property do you have to set to tell the grid which page to go to when using the Pager object?
Page Index.

43. Where on the Internet would you look for Web services?
UDDI
44. What tags do you need to add within the asp:datagrid tags to bind columns manually.

Autogenerate columns

45. Which property on a Combo Box do you set with a column name, prior to setting the DataSource, to display data in the combo box?

datatext
datavalue

46. How is a property designated as read-only?
get
47. Which control would you use if you needed to make sure the values in two different controls matched?
compare filed validator

48. True or False: To test a Web service you must create a windows application or Web application to consume this service?
no
49. How many classes can a single .NET DLL contain?

as many as u want..



# re: Interview Questions: C# 9/22/2005 10:42 PM Hemant Acharya

You put a nice comment on Private constructor.
But there is a pissed ...as constructor don't have access modifier.
Please correct me ..If I am wrong.

Also can someone explain the type fidelity in .Net ?

Thanks.



# re: Interview Questions: C# 9/23/2005 7:04 AM Mark Wagner

Hermant, which question are your referring to?



# Interview Questions: Asp.net 10/3/2005 3:43 AM VENKATESHMOORTHY

is asp.net a platform independent language...if so please explain in brief...thank you



# re: Interview Questions: C# 10/14/2005 1:52 PM chale astale

They very refreshing. Keep it up. I would like the questions to be deeper so that we can grasp the technical part.

thank you



# re: Interview Questions: C# 10/20/2005 5:16 AM Mr_Confusion1

Hi,
When is CLR loaded in the memory? Is there only one instance of CLR running when we are running multiple applications?
How is CLR first loaded? How is an assembly loaded in CLR and executed?
Mr_Confusion1



# re: Interview Questions: C# 10/21/2005 3:46 AM Manish Ahuja

Fist of all, Is ASP.NET a language? I believe it is a framework or set of technologies that simplifies (relativity inferred here) the job of creating .NET based web applications.



# re: Interview Questions: C# 10/21/2005 8:37 AM Mark Wagner

Hi Manish Ahuja,

You are correct is stating that ASP.NET is a technology that provides a framework for developing .NET based web applications.

Mark



# re: Interview Questions: C# 10/21/2005 8:45 AM Mark Wagner

VENKATESHMOORTHY,

ASP.NET is not a platform independen language. As was noted by Manish, ASP.NET is more of a technology that provides a framework for building web applications. ASP.NET provides the reources needed to dynamically deliver html content (pages) to the end user. ASP.NET can leverage languages such as C#, VB.NET, and javascript to help provide a reliable, high perfofmance, and secure web application.

Mark



# re: Interview Questions: C# 10/21/2005 1:50 PM Manish Ahuja

Hi Mark,

Thanks! for clarification.

Manish



# re: Interview Questions: C# 11/5/2005 6:23 AM sunil

excellent , this site is really good..



# re: Interview Questions: C# 11/6/2005 10:11 AM kris

awesome help...thanks



# re: Interview Questions: C# 11/7/2005 10:38 PM Abdul Malik

good number of quality questions....



# re: Interview Questions: C# 12/7/2005 7:17 AM Vincent

Thanks for these useful questions

I got a question too

What is the base Class for Web Form?



# re: Interview Questions: C# 12/12/2005 2:32 AM chirurgia plastica

Thank you for this great article



# re: Interview Questions: C# 12/14/2005 4:45 AM srilatha

VENKATESHMOORTHY,

.net framework is independent because msil is independent can be run anywhere.
but it is platform dependent because msil wil be converted to native code which is understandable by windows.



# re: Interview Questions: C# 1/8/2006 3:47 AM sneha

hello,
the Q list is really useful.
help on following questions is appreciated..
1. What is serialization, how it works in .NET?
2. What should one do to make class serializable?
3. What exactly is being serialized when you perform serialization?
4. scope in C#

Thanks
Sneha



# re: Interview Questions: C# 1/8/2006 6:29 PM Sarat Gollapudi

Hi,

Include some realtime development and deployment quesiotns.



# re: Interview Questions: C# 1/10/2006 5:38 AM Mukesh

Questions:
1)How Web service create Proxy Using WSDL.
2)How to call .NET Web service from Java Appl. & Why ?
3)Is .NET really support fully OOP Concept?

I really found nice site to collect more lnowledge in .Net.
Please answers my Question

Thanks,
Mukesh



# re: Interview Questions: C# 1/12/2006 8:34 AM kk

hi the site is good but questions are of very basic level





# re: Interview Questions: C# 1/20/2006 1:25 AM shivaraj

Hi,

scope in C#

Simply, the scope of a type (a variable, a method, or a class) is where you can use that type in your program. In other words, the scope defines the area of the program where that type can be accessible and referenced.

When you declare a variable inside a block of code (like a method or an if statement structure), it will have a local scope, and it will be called a local-variable. Local scope means that you can't refer to that variable outside that block of code. Consider the next example.


class Test
{
public void Test1()
{
int x = 0;
// some code goes here that uses the x variable
}

public void Test2()
{
Console.WriteLine(x);
}
}



Try to instantiate this class and you will get a compile-time error inside method Test2() telling you that the name x doesn't exist and that's because x is a local variable to the method Test1() and method Test2() doesn't know anything about it. So x has a local score to method Test1() only. Consider the next example.


class Test
{

public void Test1()
{
int x = 0;

if(x == 0)
{

Console.WriteLine("x equal to 0");
}
}
}



Here, the method Test1() declares a local variable x (now x has a local-scope to the method). Try to instance this class and compile the code. It will work! Some beginners think that because I said that x has a local scope to method Test1() it will not be referenced from nested block (like the one we have here, the If statement) but that's not true because any nested block inside Test1() method can refer x because x is local for the method and its all blocks of code.

shiv @@@

shivara.gk@gmail.com



# re: Interview Questions: C# 1/20/2006 1:27 AM shivaraj

shiv @@@@
shivaraj.gk@gmail.com



# re: Interview Questions: C# 1/20/2006 3:04 AM Shrikant

Thanks guys these questions really helped me a lot.
I am thankful to all of u !

Bye Take Care...........................



# re: Interview Questions: C# 1/24/2006 11:16 AM lavpal

Good Collection.. nice work..



# re: Interview Questions: C# 2/6/2006 2:24 AM mathivanan

Realy Superb!!!!



# re: Interview Questions: C# 2/7/2006 7:57 AM Aaron Crandall

In Class Questions #4, it says "An abstract class is essentially a blueprint for a class without any implementation."

This is not true -- an abstract class can have an implementation (this is what separates abstract classes from interfaces).



# re: Interview Questions: C# 2/13/2006 2:11 AM Neeraj Chaudhary

great job guys!

Could sm1 answer this plz?:

How can i create only one instance of class and thus doesn't allow creating any more instances?



# Interview Questions: C# 2/16/2006 10:30 PM Dinesh

Hi, This is very usefull for me .
I Have one question can any one help me Please.....

Question : An Application has a single assembly file that has different version how will you call the different version from your application?



# re: Interview Questions: C# 2/17/2006 5:23 PM Shunmuga priyan

It is really superb....



# C# interview questions 2/20/2006 9:23 PM Alex Barnett blog

Mark Wagner has collated some some interview questions (with answers) you might be asked if you were...



# re: Interview Questions: C# 2/20/2006 11:27 PM nagesh

The above questions are good but this questions are not suitable for experience persons. So please put the questions with basics and give the questions for 2+ experience people.



# re: Interview Questions: C# 2/21/2006 3:31 AM Some person which don't pass 1 question

ad 1. There is multiple inheritance - but only for interfaces! I answered yes on first interview and I don't pass it even I answered that inheritance is multiple only for interfaces....

Anyway - questiona are good but sometimes better is to allow someone write some code...



# re: Interview Questions: C# 3/1/2006 1:25 AM shweta

hi Really good work

I have a question tht when building that is while converting the code to MSIL do we need the framework.



# re: Interview Questions: C# 3/3/2006 3:23 AM Pradeep

Very good questions and i will contribute some questions on C# very soon.....

Keep going guys



# re: Interview Questions: C# 3/3/2006 6:56 PM vasu pavan kumar

hi friends, recently in an interview i faced a question
which is "why repeater control not dragged by mouse on web page during design time?:
plz give me the answer to my mail id

: pavan.svr@gmail.com
i am waiting for ur response.



# re: Interview Questions: C# 3/8/2006 6:22 AM Andrew Polar

The job interview questions designed in presumption that programmer faced problem when writing code and learned how to solve it. There is a big difference in qualification of those who learn from programming and those who learned from your site. However, we can change the world and this site have right to exist. Mu suggestion is make it collective. That means allow everyone submit question and answer. Make group of experts that decide if question and answer is good for the site and publish it in sections not assorted. With that approach the site will grow quickly, become popular and, in the future, kills C# job interview questions, because everyone will answer them.
My regards.





# re: Interview Questions: C# 3/10/2006 11:21 AM Murali

hi,
Please any one mail me Dotnet interview questions


My mail id is muralidharan.rs@gmail.com

thanks and regards
murali



# re: Interview Questions: C# 3/11/2006 12:34 AM karabi adhikary

How can i write a validation script in a .cs file? or is it possible to write java script code in a .cs file?



# re: Interview Questions: C# 3/12/2006 10:55 AM difference between arrays clone and copyto methods

i still think the copyto method makes a deep copy and clone method makes a shallow copy , if i am wrong correct me.

if i have a source array

arr1[0]=a
arr1[1]=b
arr1[2]=c

and a target array

arr2[0]=null
arr2[1]=null
arr2[2]=null
arr2[3]=null
arr2[4]=null

then if i make a copy using copyto method
and with starting index of 1

so my result will be

arr2[0]=null
arr2[1]=a
arr2[2]=b
arr2[3]=c
arr2[4]=null

now according to u if this is also a shallow copy 1,2,3 indexes of target array(arr2[]) are pointing to the same memory location as arr1[]'s.

Then arr2[0] , arr2[4] will be pointing to different memory locations , which wont be in contigous memory locations of arr2[1] or so.

Thats why i think copyto makes a deep copy not shallow . correct me if i am wrong



# re: Interview Questions: C# 3/16/2006 3:40 AM Manohar


Hi,

Thanks for proving nice faqs ,which are more useful to job aspirants and developers
Regards,
Manohar



# re: Interview Questions: C# 3/19/2006 8:54 PM V.R.Patil

It's an great experiance, Good question and answers.
Thanks lot..



# re: Interview Questions: C# 3/21/2006 10:37 PM nilesh

Really good questions

more... Questions on .net Assembly




# re: Interview Questions: C# 3/22/2006 1:46 PM Sundeep Khatri

This is really helpful



# re: Interview Questions: C# 3/23/2006 2:20 AM E.Palani Raja

Hi,
Nice site covering most of the .Net related questions.

The following are some questions.

1. What is web garden?
2. What is object pooling?
3. Tell some thing about IIS isolation levels.

Regards
E.Palani Raja



# re: Interview Questions: C# 3/27/2006 1:13 AM Ravi

Can U some send some ASP.NET and C#.NET interview question for my mail address ravishesham74@rediffmail.com
thanks



# re: Interview Questions: C# 4/3/2006 3:09 AM NarasimhaRao

Can any one let me know
What are design patterns in c#?



# re: Interview Questions: C# 4/4/2006 2:24 AM Gopalakrishnan

hi.. this things to know about c#



# re: Interview Questions: C# 4/11/2006 7:12 AM Harpreet Sahani

Goood Collections of questions for interview...



# re: Interview Questions: C# 4/14/2006 12:29 PM SS

Great Collection........a lot of questions added in comments can be added back to the initial list.



# re: Interview Questions: C# 4/21/2006 12:44 AM Veeru Patil

Hi,

This is very useful for us to know more things in the same subject.. i am very happy with this.....please could you give us some more question's with anwser that is helpful for us to reach higher level of programming......Thank You very much.

.............................. God Bless you...............

Regards
V.R.Patil



# re: Interview Questions: C# 4/24/2006 1:52 AM nitin

please send me more c#.net interview questions



# re: Interview Questions: C# 4/24/2006 1:52 AM nitin

please send me more c#.net interview questions



# re: Interview Questions: C# 4/26/2006 9:59 PM thanushree

Thanks a lot please add more questions



# re: Interview Questions: C# 4/26/2006 9:59 PM thanushree

Thanks a lot please add more questions



# re: Interview Questions: C# 4/29/2006 10:34 AM Sony Syamala

Question: 1) Can we have private constructor? when can I use them?

Yes, you can!!! This is used to mange the number of instances of the object the users can create. This is also known as the Singleton pattern. In singleton pattern you declare the constructor as private and instantiate it from a static method within you class. Please see the example below:

public sealed class MySingleton
{
static MySingleton instance = null;

private MySingleton()
{
}

public static MySingleton ClassInstance()
{
get
{
if (instance = = null)
{
instance = new MySingleton();
}
return instance;
}
}
}




# re: Interview Questions: C# 4/30/2006 10:27 AM Shashank

37. What is the standard you use to wrap up a call to a Web service
Ans:SOAP



# re: Interview Questions: C# 5/2/2006 6:32 PM What's wrong with this code?

void fn(int n)
{
while(n != 0)
{
n >>= 1;
//do something
}
return;
}



# re: Interview Questions: C# 5/2/2006 6:35 PM Ans: What's wrong with this code?

void fn(int n)
{
while(n != 0)
{
n >>= 1;
//do something
}
return;
}

infinite looping if n is less than 0



# How to pass variable parameter list in c#? 5/2/2006 6:39 PM How to pass variable parameter list in c#?

How to pass variable parameter list in c#?



# How to pass variable parameter list in c#? 5/2/2006 6:39 PM How to pass variable parameter list in c#?

How to pass variable parameter list in c#?
using the params keyword.



# How will you implement the IDisposable interface 5/2/2006 7:09 PM matt

class Test : IDisposable
{

public ~Test()
{
Dispose(false);
}
protected bool _disposed = false;

public void Dispose()
{
Dispose(true);
}

protected virtual void Dispose(bool disposing)
{
if(!_disposed)
{
_disposed = true;
if(disposing)
{
//do cleanup
}
}
}
}



# re: Interview Questions: C# 5/3/2006 4:29 AM Vinay

Hi...

I had written a function which contains 1 function with some variables. I am calling that function in my code many times & everytime i am changing those values. So i want to that how can i remove those earlier values . Can i use Dispose functions & if yes how we can use that.

Thanks,
Vinay



# re: Interview Questions: C# 5/4/2006 3:37 AM Romrombus

Really this is good helpful for freshers.



# re: Interview Questions: C# 5/5/2006 10:27 PM kartheekkumar

Hello Everyone,
I would like to know how we can instantiate and connect to sql server in windows authentication mode from visual studio and i will be eagerly waiting for reply.
KartheekAnnavaram



# re: Interview Questions: C# 5/16/2006 5:34 AM Brian Ceccarelli

On General Question 15, a

catch (System.Exception)
{
}

does not catch every exception.

catch
{
}

does.

Some Microsoft code under-the-covers does not generate System.Exceptions. When you make calls to native libraries, or even call some SqlConnection methods, these calls can throw an exception which is not inherited from System.Exception.





# re: Interview Questions: C# 5/16/2006 7:09 AM Satyanarayan Sahoo

I wanna get questionson VB.NET.



# re: Interview Questions: C# 5/20/2006 2:47 AM SEKAR

I WANT SQL QUERIES FOR INTERVIEW?. PLEASE SEND DIFFERENT TYPE OF COMPLEX QUERIES ASKED IN INTERVIEW.



# re: Interview Questions: C# 5/23/2006 1:09 AM Amit

Hi All, The list of questions is good but does it matter? Think over it, pick a topic and start questioning yourself, you will find better questions to get answers on. The list is helpful, but only if you find the answers. The answers are more important. I speak with enough experience on this, I have interviewed many people on C# being in the industry for more than 8 years.
STOP trying to get everything served on a platter......SURE SHOT SERIES of questions?!! Lets discuss the answers friends, the answers people are giving should be MODERATED........I take that approach.....list out the questions, lets say 50 questions, and then start looking for answers.....SORRY WON'T SERVE IT ALL TO YOU..........but for an example........see below for WHAT I EXPECT HERE........

WHAT IS SERIALIZATION?
Serialization is the process of converting an object or a con-nected graph of objects into a contiguous stream of bytes. Deserialization is the process of converting a contiguous stream of bytes back into its graph of connected objects. The ability to convert objects to and from a byte stream is an incredibly useful mechanism. Here are some examples:
• An application's state (object graph) can easily be saved in a disk file or database and then restored the next time the application is run. ASP.NET saves and restores session state by way of serialization and deserialization.
• A set of objects can easily be copied to the system's clipboard and then pasted into the same or another application. In fact, Windows® Forms uses this procedure.
• A set of objects can be cloned and set aside as a backup while a user manipulates the main set of objects.
• A set of objects can easily be sent over the network to a process running on another machine. The Microsoft® .NET Framework remoting architecture serializes and deserializes objects that are marshaled by value.
Why would you want to use serialization? The two most important reasons are
• to persist the state of an object to a storage medium so an exact copy can be recreated at a later stage, and
• to send the object by value from one application domain to another.





# re: Interview Questions: C# 5/23/2006 3:15 AM Sampada

Hi , Really this questions are good but I want questions for MCP 70-316



# re: Interview Questions: C# 5/23/2006 11:59 AM Dharmendra Kumar

Very good answer given by Amit. Thanks a lot.



# re: Interview Questions: C# 5/24/2006 7:37 AM Saw Myat Aung

-------------------------------------------------------------
# re: Interview Questions: C#: Array.Copy vs Array.Clone 4/18/2005 9:54 AM vtsr
Array.CopyTo does not make a deep copy. This can be easily verified by running the following code.

public class MyClass
{
public static void Main()
{
Container[] containerArray = new Container[10];
for( int i=0; i < containerArray.Length; i++ ){
containerArray[i] = new Container( i );
}
Container[] containerArrayCopy = new Container[10];
containerArray.CopyTo( containerArrayCopy, 0 );
containerArrayCopy[2].V = 3;
for( int i=0; i < containerArray.Length; i++ ){
Console.Write( "{0}, ", containerArray[i].V );
}
Console.WriteLine();
}

}

public class Container{
public int V;
public Container(int i ){
V = i;
}
}
-------------------------------------------------------------
That's because Container is reference type. Array.Copyto actually make new copy. But That newly generated copies only hold the references not the actual value store in V.



# About Dispose mehod 5/25/2006 11:10 AM sivaji

Hi,
Dispose is the method, which we call usually when we want the object to be garbage collected. If u r calling Dispose() on inbuilt classes like Form, It'll call a method Finalize() method, which will usually used to cleanup any resources used with in the form. With in this Finalize method, we call the garbage collector to recycle the memory. So, when u r using dispose method, it is used to mark the object to Garbage Collectable. Calling the Dispose dose't means, that object will b garbage collected immidiately. GC will monitor the Managed memory for objects Marked 4 garbage collectable. The recycling of memory depends on when the GC will pay the visit.
Purely the Dispose method is not used for reseting the values in the object. It is used to mark the Object to b collected by the GC
thanx
sivaji



# re: Interview Questions: C# 6/1/2006 7:02 AM sreekumar

Great questions and comments guys...good team work ..keep going



# re: Interview Questions: C# 6/1/2006 8:16 AM Anoop

I have a Question that was asked once..

Does any one know When all can the session state data be retirieved. the choices I got were

1) during init
2) during prerender
and 3) during load event..

does any know abt it..



# Session State 6/2/2006 10:43 AM sivaji

Mr Anoop,
I believe, page init event will occur, when the request will b handled by the worker process on server. Page_init is the first event which will instantiate the page. Here itself u can get the session state data if it is the first time request to the server. The pre-render is the one of the stage in the page life cycle where the page content will be converted to the browser specific. The server can get the information about the browser which made the request. Rendering means placing the controls on the browser. Page_Pre-render event will fire just before the page_render event. B4 the page render page load event fire.
...sivaji



# Session State 6/2/2006 10:44 AM sivaji

Mr Anoop,
I believe, page init event will occur, when the request will b handled by the worker process on server. Page_init is the first event which will fire when the page is instanciated. Here itself u can get the session state data if it is the first time request to the server. The pre-render is the one of the stage in the page life cycle where the page content will be converted to the browser specific. The server can get the information about the browser which made the request. Rendering means placing the controls on the browser. Page_Pre-render event will fire just before the page_render event. B4 the page render page load event fire.
...sivaji



# Excellent Collection 6/4/2006 1:19 AM Akash

Really a nice collection.



# re: Interview Questions: C# 6/5/2006 1:04 AM Harpreet Sahani

All the Questions and Answers r really good ......



# re: Interview Questions: C# 6/5/2006 3:59 AM Rupesh sharma

metadata consists of version information(4 values separeted by 3 dots) i.e major, minor, build and revision please explain the meaning of these 4 values.



# re: Interview Questions: C# 6/5/2006 4:10 AM Rupesh sharma (S/W Devlpr. NIIT Ltd. Gurgaon)

can a com client early bind to an ms.net component? If yes how can it be done?



# re: Interview Questions: C# 6/5/2006 5:49 AM Developer

In regards to "What does the Dispose method do with the connection object?", the Dispose() method will also close the connection.



# re: Interview Questions: C# 6/5/2006 11:18 PM Panku

1). If we declare a class as a private class can we inherit that class?

2). Can a declare public variables in a private class?If yes then can we access those variables?



# re: Interview Questions: C# 6/13/2006 12:41 PM uXuf

What’s the .NET collection class that allows an element to be accessed using a unique key?
HashTable.

I believe Dictionary is another class in framework 2.0 that gives the same functionality.

Great work btw!



# re: Interview Questions: C# 6/13/2006 11:21 PM Narendra Krishna. T

ThanX alot for giving the list of questions. And It's a nice gathering also.

Cheeers !



# re: Interview Questions: C# 6/15/2006 11:49 AM David Kim

Can static void Main() have any member functions(subroutines) instead of class?



# re: Interview Questions: C# 6/24/2006 1:39 AM sai

Thankyou very much for the C# interview questions

Regards,
sai



# re: Interview Questions: C# 6/24/2006 6:13 AM ramya

Hi pls post me the .Net(C# and ASP.Net ) and SQL Server interview questions with answers to my mail id which is mailramya06@yahoo.com

Thank u so much.



# re: Interview Questions: C# 6/26/2006 10:49 AM yosuf

yeah this materila is good,but its not sufficient.if u add little more to it,its better.anyone pls post me the .Net(C# and ASP.Net ) and SQL Server interview questions with answers to my mail id which is yusuf23in@rediffmail.com




# Interview Questions: C# 7/2/2006 10:24 PM Vijay

I have two independent classes like class A and Class B so i want to use methods of Class A and Class B in Class C how do i do. Condition is that Class A or Class B or not inherited each other or not Suppose to use interfaces



# re: Interview Questions: C# 7/5/2006 1:59 AM Ganesan T

what is the difference between wcf and normal web service calls?



# re: Interview Questions: C# 7/5/2006 11:42 PM Vivek Manohar Mani

Thankyou very much for the C# interview questions . This is very helpfull for us.

Regards,
Vivek Manohar Mani




# re: Interview Questions: C# 7/6/2006 9:57 AM Sweeny

Very nice collection of interview questions and subsequent discussions.

It'll be good if we all put questions for experienced (4-5 yrs) people as well



# re: Interview Questions: C# 7/9/2006 2:10 PM Kaiser

What is a value type and a reference type? How to convert one to another using Boxing?



# re: Interview Questions: C# 7/9/2006 2:10 PM Kaiser

What is a value type and a reference type? How to convert one to another using Boxing?



# re: Interview Questions: C# 7/9/2006 2:11 PM Kaiser

What is reflection? Can you give me some examples of reflection?



# re: Interview Questions: C# 7/10/2006 11:47 PM pankaj kumar singh MCA from Alagappa Univ.

very good question



# re: Interview Questions: C# 7/12/2006 7:50 PM Veena Prabhu

Please send some ASP.NET and C#.NET interview question on my mail address veeprabhu@gmail.com

thanks.



# re: Interview Questions: C# 7/15/2006 3:57 AM subbu

I am preparing for the interview. Thanks a lot for the given bunch of questions. Its helps me a lot. Thank you very much.

Regards,
Subbu



# re: Interview Questions: C# 7/16/2006 11:39 PM samir

nice collection and gr8 enthusiasm by all of those who have contributed to make this richer.




# re: Interview Questions: C# 7/18/2006 7:35 PM Guru

Can you please send C#, ASP.NET, VB.NET and SQL Server interview questions to my vguruprasath@yahoo.com ID. I've been preparing for interview

Many Thanks,
Guru



# re: Interview Questions: C# 7/18/2006 11:01 PM Manish Singh

Can one pls send me some interview question on asp.net at singhpmanish@yahoo.com.

Thnaks & Regards
Manish



# re: Interview Questions: C# 7/21/2006 1:58 PM Harika

Friends,

Can you send me some C#.net. ASP.net adn VB.net questions to my email vennar_2005@yahoo.com

Thank you very much.

Harika



# re: Interview Questions: C# 7/22/2006 4:10 AM Ravi chandra

These are fine



# re: Interview Questions: C# 7/24/2006 9:53 PM Raji Chinnam


Hello Guys,

here are some other interview questions.

1. Explain about Normalization?
2. What is the difference between union & union all?
3. What kind of transactions can handled?
4. temporay tables use & how we can manage?
5. perfomance tuning steps?
6. Difference btn method overload / override?
7. When Garbage collector come into picture?
8. Difference btn refernce & value types?
9. boxing / unboxing in ASP.NET
10. assemblies
11. What manifest file contains?
12. MSIL
13. JIT
14. clas vs module
15. dataadapter
16. dataset
17. ado.net objects
18. difference btn and, and also
19. dataset.copy & dataset.clone
20. code access security
21. finalization
22. strogn type dataset

Raji Chinnam



# re: Interview Questions: C# 7/31/2006 5:31 AM Rama

What is the difference between Method Overriding and Method Hiding in C#?



# re: Interview Questions: C# 7/31/2006 3:18 PM Praj

This is good. Can u please send me interview questions on c#, .net, sql server and on xml. My email address is prajshah@yahoo.com



# re: Interview Questions: C# 8/6/2006 7:28 AM Casey Gum

On the classes questsion , no. 9:

You can do explicit implementation if you need different behavior.

public class Class1 : IFoo, IFoo2, IFoo3 {

public void TheMethod() {Console.Write("1");}
void IFoo.TheMethod() {Console.Write("2");}
void IFoo2.TheMethod() {Console.Write("3");}

}

Class1 myClass = new Class1();
myClass.TheMethod(); // writes out "1";
((IFoo) myClass).TheMethod(); // writes out "2";
((IFoo2) myClass).TheMethod(); // writes out "3";
((IFoo3) myClass).TheMethod(); // writes out "1";



# re: Interview Questions: C# 8/11/2006 5:55 AM shubhangi

i like this qu. & ans. which are more helpfull in interview.

I would be greatfull to you if u send me more que.& ans. related to ASP.NET,VB.NET,SQL SERVER,ADO.NET.....




# re: Interview Questions: C# 8/11/2006 5:57 AM shubhangi

i like this qu. & ans. which are more helpfull in interview.

I would be greatfull to you if u send me more que.& ans. related to ASP.NET,VB.NET,SQL SERVER,ADO.NET.....




# re: Interview Questions: C# 8/19/2006 5:39 AM chaukat anna

Gr8



# re: Interview Questions: C# 8/20/2006 11:33 AM Rupali

Hello sir,

Really ur ques. are very helpfull for me
thanks
Rupali



# re: Interview Questions: C# 8/22/2006 2:51 AM Surinder

Gud one...



# re: Interview Questions: C# 8/24/2006 10:38 PM satish chandra pandey

i like this qu. & ans. which are more helpfull in interview.
I would be greatfull to you if u send me more que.& ans. related to ASP.NET,C#,SQL SERVER,ADO.NET.....





# re: Interview Questions: C# 8/28/2006 2:28 AM Inferano

Hi ,
I wanted to know:
What can I do (or add) to a Page directive in .NET so that the page is Pre-Complied?

What is the advantage /disadvantage of performing pre-compilation?

Thanks



# re: Interview Questions: C# 9/5/2006 7:17 PM Ratnam

Hi,

Its realy useful for me, Tq.
Also i need some questions about release and debug.

TQ.



# Marker Interface (empty interface) 9/5/2006 10:53 PM Kalirajan

tell me the purpose of marker interface (empty interface) - explain



# re: Interview Questions: C# 9/7/2006 2:52 AM praveen

very good what is the use of clone() method




# re: Interview Questions: C# 9/8/2006 11:05 PM Pankaj Singh

Interview que in C#.






# re: Interview Questions: C# 9/11/2006 2:56 AM Oleg Safronov

I am afraid the answer to the 4th question is wrong.

4. Describe the accessibility modifier “protected internal”.

It is available to classes that are within the same assembly and derived from the specified base class. - THIS IS WRONG.

The correct statement is:
It is available to classes that are within the same assembly OR derived from the specified base class.

(msdn states as following: Access is limited to the current assembly or types derived from the containing class.)

Please see C# Reference for details.



# re: Interview Questions: C# 9/11/2006 4:08 AM Oleg Safronov

The answer to the 9th question is also incorrect.

> Can you store multiple data types in System.Array?
> No.

Here you're sample code cutting:
=================================
Class1() {}
Class2() {}

Class3()
{
void main()
{
System.Array arr = new object[3];

arr.SetValue( new Class1(), 0 );
arr.SetValue( new Class2(), 1 );
arr.SetValue( new Class3(), 2 );
}
}
=================================

Since Class1, Class2 and Class3 are different datatypes the right answer to the question is YES.



# re: Interview Questions: C# 9/12/2006 2:43 AM Rahul Sharma

Thanks Mark for such a Good collection of questions.



# re: Interview Questions: C# 9/12/2006 9:33 PM v.suresh

interview qustions are very good add some oop concepts



# re: Interview Questions: C# 9/18/2006 2:20 AM sheik

hi this is very use full. but i need more one word questions.



# re: Interview Questions: C# 9/18/2006 2:52 AM Yogesh

Nice Collection !!!!!



# re: Interview Questions: C# 9/19/2006 7:59 PM Bharathi Gurumoorthi

Very useful site i've seen so far.Please update this site,then only we can able to update ourself in this language.



# re: Interview Questions: C# 9/22/2006 7:21 AM pavan kumar

this is god but a still to be added and a seperate page is need for the questions and for the user feedback

and any plz forward me .new interview questions



# re: Interview Questions: C# 9/25/2006 4:26 AM Ramesh M

--> Overriding vs Overloading

--> ASP.Net page lifecycle

--> What is first event of Datagrid for binding the data.

--> What is itemcreated and itemdatabound

--> What is Postback

--> What is multi file Assembly.

--> How many assemblies u will get after compiling a solution of some projects.

--> How the iis server processes a client request.

--> What are the contents of an assembly.

--> What is delay signing.

--> AppDomain vs HttpApplicationObject



# re: Interview Questions: C# 10/5/2006 3:21 AM Jaineesh

Questions are good but besides can you send me good more questions on C# or asp.net on my mail address jaineeshthakur@hotmail.com.

Thanx



# re: Interview Questions: C# 10/6/2006 3:50 AM Parth

Hey Friends,

As i m preparing for interview, please send me C#,ASP.NET and VB.NET questions with ANSWERS on parthin06@yahoo.com email address asap.

Thanking u in advance

Regards

Parth




# re: Interview Questions: C# 10/6/2006 10:11 AM Andrei Marculescu

For question no 9, I think your answer is wrong.

An array can contain objects of different types, but all these object must be subclasses of the type in the declaration of the array.

And yes, it is true, arrays cannot contain different value types like int, long, double, float etc.



# re: Interview Questions: C#,asp.net,vb.net 10/8/2006 11:48 PM jyotsna

I m preparing for interview, please send me C#,ASP.NET and VB.NET questions with ANSWERS
On my khushijyotsna@gmail.com

please send me.thanks





# re: Interview Questions: C# 10/8/2006 11:50 PM jyotsna

i m preparing for interview, please send me C#,ASP.NET and VB.NET questions with ANSWERS



# re: Interview Questions: SOAP, UDI, XML,Serialization,Remoting,Assembly,Exception Handling 10/9/2006 2:25 AM Ashish Upadhyay

Dear All

I am preparing for interview in .Net Technology, So if any body have Interview question or any other useful information regarding above mentioned topics, then Please send me.

I am highly obelgied of him/her

Thank you





# re: Interview Questions: C# 10/12/2006 7:37 AM UncleSam89

I don't agree with General question #9.

Can you store multiple data types in System.Array?
No.

How about array of objects?



# re: Interview Questions: C# 10/13/2006 4:22 AM prasanthi

Its really very usefull.Thanks alot for all the people who spend their valuable time in answering the questions.

Plz do post the question for 2+ experinced persons also



# re: Interview Questions: C# 10/13/2006 6:46 PM Mike

Er... and I really ought to correct that last comment to refer to #4, not #3! =)



# re: Interview Questions: C# 10/14/2006 12:26 AM chinnappa

excellent thanks for the site



# re: Interview Questions: C# 10/15/2006 12:00 AM Pallavi

Good Collection of questions.
Thanks.



# re: Interview Questions: C# 10/16/2006 3:29 AM venkata kiran kumar

Put some more questions relating to IIS.



# re: Interview Questions: C# 10/16/2006 10:46 AM Singh

Nice questions ...

Include questions related to "debugging multithreaded applications".




# re: Interview Questions: C# 10/16/2006 11:50 PM Naveen Kumar B.N


Nice Questions.

It is simple to Understand and Interesting

Thanks
Naveen Kumar BN



# re: Interview Questions: C# 10/16/2006 11:50 PM Naveen Kumar B.N


Nice Questions.

It is simple to Understand and Interesting

Thanks
Naveen Kumar BN



# re: Interview Questions: C# 10/25/2006 11:37 PM KNK

Can u send me more questions on .net,c#,ADO.NET, SQL,RDBMS.

knk_6@yahoo.com.



# re: Interview Questions: C# 10/28/2006 2:25 PM spebby

ADO.Net
8. What does the Dispose method do with the connection object?

The Dispose method closes the connection. The Dispose method and the Close method are equivalent. The first time a connection object is created, a connection pool is created. Subsequent instantiations of the connection object does not create a new connection pool (unless the connection string changes), a connection is retrieved from the pool. The connection pool remains in memory until the application exits.



# re: Interview Questions: C# 11/6/2006 12:06 AM rajesh jaiswal

please send me technical interviews asked in IT companies



# Java Questions 11/13/2006 12:05 AM Sarat Gollapudi

I am trying to write a generic method that takes an enum as argument and returns list of name=value pairs contained in the enum, i.e.. some thing like:
public <T extends Enum<T>> List<NV> getList(T t)
{
List list = new ArrayList<NV>(t.values().length);
for( T type : t.values())
{
list.add(new NV(type.name(), type.toString()));
}
return list;
}

Javac is complaining about missing values() method in java.lang.Enum. Do you know what am I doing wrong?

Thanks,
Sarat



# re: Interview Questions: C# 11/13/2006 8:10 PM Prabahar.V.N

Nice Questions...
Can u Send me more Questions for ADO.Net, C#, Asp.Net.

nal_prabhaa@yahoo.co.in

Thanks
Prabhaa...



# Thanx for -C# 11/15/2006 10:48 PM Yogson Tembhre

hello sir,
the qstn on C# are so useful 4me, i will thankful to you.
----yogson----



# re: Interview Questions: C# 11/22/2006 6:50 AM Sabyasachi Ghosh

Questions are very useful those who are preparing for the interview.
I will be really obliged if you send more questions

Thanking you
sabyasachi



# re: Interview Questions: C# 11/22/2006 6:50 AM Sabyasachi Ghosh

Questions are very useful those who are preparing for the interview.
I will be really obliged if you send more questions

Thanking you
sabyasachi



# re: Interview Questions: C# 11/22/2006 6:50 AM Sabyasachi Ghosh

Questions are very useful those who are preparing for the interview.
I will be really obliged if you send more questions

Thanking you
sabyasachi



# Loss of page readability 11/28/2006 3:34 AM Vinod Kumar Dorairaj

Hi Mark,

Great job on the site and the useful stuff.

I seriously request that you try to improve readability as too many comments have appeared. Maybe you might want to page your comments, moderate them

Thanks and keep up the great work.

Vinod



# re: Interview Questions: C# 11/29/2006 10:30 PM prasad.laalam@gmail.com

interview model questions



# re: Interview Questions: C# 12/6/2006 12:48 AM vidya

I m preparing for interview, please send me C#,C++ questions with ANSWERS
On my sunshine_vidya@yahoo.com




# re: Interview Questions: C# 12/8/2006 3:37 AM kalaiselvan

Its very very useful for us... pls continue



# re: Interview Questions: C# 12/13/2006 8:12 PM parthiban

hi friends,

I m preparing for interview, please send me C#,asp.net,vb.net questions with ANSWERS
On parthi_gt@yahoo.co.in





# re: Interview Questions: C# 12/13/2006 8:55 PM Ram Lakshman

I m preparing for interview, please send me C#,asp.net,vb.net questions with ANSWERS to
e-mail ID : ram.lakshman@ril.com



# re: Interview Questions: C# 12/14/2006 12:33 AM Narendra

These question are very useful.
can you enter some more question on constructure in c#.



# re: Interview Questions: C# 12/18/2006 4:16 AM balamurugan.r

i m preparing for interview, please send me C#,ASP.NET and VB.NET questions with ANSWERS
send email-id:bala_muruganr@rediffmail.com



# re: Interview Questions: C# 12/19/2006 1:48 AM kanhaiya lal

Should be include mobile apllication question also.



# re: Interview Questions: C# 12/24/2006 2:47 AM Ramachandran

HI,

Question 9 in Class Questions.

1. If both interfaces have method with the same name and also needs the same implementation, then provide only one implementation in the inheriting class.

2. If both interfaces have the same method name, but the implementation differs. In this case implement the method with interface name.When you creare object you can not access these method implementation with the object reference, you have to referer or call the method with the specific interface reference.

For example

interface A
{
void X();
}

interface B
{
void X();
}

class M:A,B
{
public void A.X()
{

}

public void B.X()
{
}
}

Class N
{
A oa = new M();
oa.X();
B ob = new M();
ob.X();
}



# re: Interview Questions: C# 1/3/2007 6:09 PM Dave

Why should ask these questions on the interview? pple can memorize them. We also loose respect. Doctors are not asked questions when they are hired. Some pple don't know the answers but they are very good programmers.



# re: Interview Questions: C# 1/6/2007 11:59 PM murali

yeah this materila is good,but its not sufficient.if u add little more to it,its better.anyone pls post me the .Net(C# and ASP.Net ) and SQL Server interview questions with answers to my mail id which is murali_june@yahoo.com







# re: Interview Questions: C# 1/9/2007 1:35 AM Hemant.kaushik@xansa.com

Good Questions appriciated work is done. could any one send me .Net(C# and ASP.Net ) and SQL Server interview questions with answers to my mail id which is hemantkaushik82@rediffmail.com





# re: Interview Questions: C# 1/9/2007 1:44 AM Hemant

Good Questions appriciated work is done. could any one send me .Net(C# and ASP.Net ) and SQL Server interview questions with answers to my mail id which is hemantkaushik82@rediffmail.com





# re: Interview Questions: C# 1/14/2007 9:48 AM vijay kumar

hi friends
I am preparing for interview, please send me C#, VB.NET, ASP.NET questions with answers to my following email.
shani_31@yahoo.com




# re: Interview Questions: C# 1/14/2007 10:11 AM Aditaya

hi friends

What is Process Flow Structure?

also I am preparing for interview please send me C#, ASP.NET, VB.NET questions with answers on

aditayakmr@yahoo.com

thanks




# re: Interview Questions: C# 1/15/2007 9:59 PM deepthi

i think that this is so helpful for me in future interviews. thanks.
deepthi



# re: Interview Questions: C# 1/17/2007 7:39 PM Tom Lee

Could you send the C#, ASP.NET, VB.NET questions with answer to tom8lee@hotmail.com

Thanks,!



# re: Interview Questions: C# 1/19/2007 8:48 PM T. O.

Explanation to question #1 is not accurate.

> Are private class-level variables inherited?
> Yes, but they are not accessible. Although they are not visible
> or accessible via the class interface, they are inherited.

CORRECTION:
Private variables ARE accessible to nested classes.

E.G.
class Outer {
private int bar = 0;

class Inner : Outer {
public int Bar {
get {return bar;}
}
}
}



# re: Interview Questions: C# 1/19/2007 8:50 PM T. O.

^
I meant question #3 on above post (not question #1).



# re: Interview Questions: C# 1/19/2007 10:30 PM T. O.

Explanation is not complete.

> Can you allow a class to be inherited,
> but prevent the method from being
> over-ridden?
> Yes. Just leave the class public and
> make the method sealed.

You CAN'T mark a method as sealed unless it overrides the base method. To prevent overriding of a method, don't specify the "virtual" keyword.



# re: Interview Questions: C# 1/19/2007 10:55 PM T. O.

Clarification

> Can you inherit multiple interfaces?
> Yes. .NET does support multiple interfaces.

An interface can INHERIT multiple interfaces. However, a class doesn't INHERIT an interface. A class IMPLEMENTS an interface. Hence a class can't have multiple inheritance.



# re: Interview Questions: C# 1/19/2007 11:06 PM T. O.

Incomplete

> How is method overriding different
> from method overloading?
> When overriding a method, you
> change the behavior of the method
> for the derived class. Overloading a
> method simply involves having
> another method with the same
> name within the class.

Overloading means the methods have the same name but different argument types or argument counts. With overriding, the method signature remains unchanged.



# re: Interview Questions: C# 1/19/2007 11:12 PM T. O.

> What are the different ways a
> method can be overloaded?
> Different parameter data types,
> different number of parameters,
> different order of parameters.

The "different order of parameters" is a bit misleading. It's the data type of the parameters that really counts.

e.g.
int sum(int a, int b)
~ same signatures ~
int sum(int b, int a)



# re: Interview Questions: C# 1/19/2007 11:56 PM T. O.

> What’s the difference between the
> Debug class and Trace class?
> Documentation looks the same. Use
> Debug class for debug builds, use
> Trace class for both debug and release
> builds.

Debug methods are disabled in release build mode while Trace methods remain enabled.



# re: Interview Questions: C# 1/25/2007 2:48 PM Baskaran Muthu

Difference between Array and Array List?

Difference between Array and Collection?





# re: Interview Questions: C# 2/5/2007 2:12 AM mps

Hi,
Give more question about Boxing and unBoxing?
by
mps



# re: Interview Questions: C# 2/8/2007 1:54 AM Garima khandelwal

These questions helped me a lot. I cleared my interiview for c# in an IT company. Thnaks a lot to you.
Garima Khandelwal



# re: Interview Questions: C# 2/17/2007 4:08 AM Kishore

hi friends,
I am preparing for an interview, please send me C#, ASP.NET, SQL Server questions with answers to my following email.
surana_80@yahoo.co.uk



# re: Interview Questions: C# 2/21/2007 11:04 AM Ragu

Hi Folks:

This site has a lot of useful information; also please send me more interview questions to rrraman@hotmail.com

Thanks
Ragu



# re: Interview Questions: C# 2/22/2007 10:36 PM gaurav jain

This site has a lot of useful information; also please send me more interview questions especially of dotnet framework to gauravj.iit@gmail.com
thanks in advance.

Gaurav Jain





# re: Interview Questions: C# 2/23/2007 10:15 AM Rekha

Hi Friends,

I am preparing for an interview, please send me C#, ASP.NET, SQL Server questions with answers to my following email.

rekhasrigiri@yahoo.com





# re: Interview Questions: C# 2/26/2007 12:26 AM Ashwin

Question about shallow and deep copy of Array.CopyTo and Array.Clone.
I think both the methods do Deep copying. Please check out the following code. Correct me if I m wrong.

class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//

int []aryOne = new int[3];
int []aryTwo;
Array aryThree;
//Array aryFour = new int[3];

aryOne[0] = 1;
aryOne[1] = 2;
aryOne[2] = 3;

System.Console.WriteLine("Array one");
System.Console.WriteLine("Array1 one = {0}, two = {1} and three = {2}",aryOne[0].ToString(),aryOne[1].ToString(),aryOne[2].ToString());
System.Console.Read();

aryTwo = (int[])aryOne.Clone();
System.Console.WriteLine("Array two created with Clone method");
System.Console.WriteLine("Array2 one = {0}, two = {1} and three = {2}",aryTwo[0].ToString(),aryTwo[1].ToString(),aryTwo[2].ToString());
System.Console.Read();

System.Console.WriteLine("Changing array two and printing array one");
aryTwo[0] = 3;
aryTwo[1] = 1;
aryTwo[2] = 2;
System.Console.WriteLine("Array two");
System.Console.WriteLine("Array2 one = {0}, two = {1} and three = {2}",aryTwo[0].ToString(),aryTwo[1].ToString(),aryTwo[2].ToString());

System.Console.WriteLine("Array one");
System.Console.WriteLine("Array1 one = {0}, two = {1} and three = {2}",aryOne[0].ToString(),aryOne[1].ToString(),aryOne[2].ToString());
System.Console.Read();

System.Console.WriteLine("Creating array Three with Clone method.");
aryThree = (Array)aryOne.Clone();
System.Console.WriteLine("Array three");
System.Console.WriteLine("Array3 one = {0}, two = {1} and three = {2}",aryThree.GetValue(0).ToString(),aryThree.GetValue(1).ToString(),aryThree.GetValue(2).ToString());
System.Console.Read();

System.Console.WriteLine("Changing array three and printing array one and two");
aryThree.SetValue(30,0);
aryThree.SetValue(10,1);
aryThree.SetValue(20,2);
System.Console.WriteLine("Array three");
System.Console.WriteLine("Array3 one = {0}, two = {1} and three = {2}",aryThree.GetValue(0).ToString(),aryThree.GetValue(1).ToString(),aryThree.GetValue(2).ToString());
System.Console.Read();

System.Console.WriteLine("Array one and two");
System.Console.WriteLine("Array1 one = {0}, two = {1} and three = {2}",aryOne[0].ToString(),aryOne[1].ToString(),aryOne[2].ToString());
System.Console.WriteLine("Array2 one = {0}, two = {1} and three = {2}",aryTwo[0].ToString(),aryTwo[1].ToString(),aryTwo[2].ToString());
System.Console.WriteLine("Array three");
System.Console.WriteLine("Array3 one = {0}, two = {1} and three = {2}",aryThree.GetValue(0).ToString(),aryThree.GetValue(1).ToString(),aryThree.GetValue(2).ToString());
System.Console.ReadLine();

System.Console.WriteLine("Copying array three to one with CopyTo");
aryThree.CopyTo(aryOne,0);
System.Console.WriteLine("Array one");
System.Console.WriteLine("Array1 one = {0}, two = {1} and three = {2}",aryOne[0].ToString(),aryOne[1].ToString(),aryOne[2].ToString());
System.Console.ReadLine();

System.Console.WriteLine("Changing array one");
aryOne[0] = 4;
aryOne[1] = 5;
aryOne[2] = 6;

System.Console.WriteLine("Array Three");
System.Console.WriteLine("Array3 one = {0}, two = {1} and three = {2}",aryThree.GetValue(0).ToString(),aryThree.GetValue(1).ToString(),aryThree.GetValue(2).ToString());
System.Console.WriteLine("Array one");
System.Console.WriteLine("Array1 one = {0}, two = {1} and three = {2}",aryOne[0].ToString(),aryOne[1].ToString(),aryOne[2].ToString());
System.Console.WriteLine("Array Two");
System.Console.WriteLine("Array2 one = {0}, two = {1} and three = {2}",aryTwo[0].ToString(),aryTwo[1].ToString(),aryTwo[2].ToString());
System.Console.ReadLine();

System.Console.WriteLine("Making array one = array two");
aryTwo = aryOne;
System.Console.WriteLine("Array one");
System.Console.WriteLine("Array1 one = {0}, two = {1} and three = {2}",aryOne[0].ToString(),aryOne[1].ToString(),aryOne[2].ToString());
System.Console.WriteLine("Array Two");
System.Console.WriteLine("Array2 one = {0}, two = {1} and three = {2}",aryTwo[0].ToString(),aryTwo[1].ToString(),aryTwo[2].ToString());
System.Console.ReadLine();

System.Console.WriteLine("Changing array Two");
aryTwo[0] = 0;
aryTwo[1] = 0;
aryTwo[2] = 0;
System.Console.WriteLine("Array one");
System.Console.WriteLine("Array1 one = {0}, two = {1} and three = {2}",aryOne[0].ToString(),aryOne[1].ToString(),aryOne[2].ToString());
System.Console.WriteLine("Array Two");
System.Console.WriteLine("Array2 one = {0}, two = {1} and three = {2}",aryTwo[0].ToString(),aryTwo[1].ToString(),aryTwo[2].ToString());
System.Console.ReadLine();
System.Console.WriteLine("Array one & Two ");
System.Console.ReadLine();


}
}




Cant we implement multiple inheritance using interfaces? I think we can make an object have 2 different properties using interfaces.

About Multiple Interfaces having Methods with same names.

Explicit Implementation of the methods is available in C#

How many assemblies u will get after compiling a solution of some projects?
when garbage collector come into picture. ?
clas vs module
How the iis server processes a client request?
What are the contents of an assembly?

What’s the difference between an interface and abstract class?
In an interface class, all methods are abstract - there is no implementation. In an abstract class some methods can be concrete. In an interface class, no accessibility modifiers are allowed. An abstract class may have accessibility modifiers.


Some Questions could try your knowledge about the framework

1) Look into Application Domains
2). Behaviour of the Garbage collector and how it works.
How it is made efficient? Refer MSDN
3). How to release custom resources in Dot net using
dispose method and its implication with the finalize
method.

Some points based on object orientation

1). Structures do not allow inheritance. Structures are derived from System.VaueType which is derieved from System.object. Not allowing inheritance is one of the main differences between class and structures in c#

2). Constructors are not inherited in c# 2.0

3). What is a Constructor Initializer?
Constructor initializer causes a base class constructor to be called.

Eg: public CSChildClass(int n, int m) : CSParent(int m)
{....}

If you do not explicitly provide the base class constructor like this the parameterless constructor of the base class will be automatically called.

4). A constructor actually begins by setting the values assigned in the declaration part of the field itself.

5). What is Upcasting and Down casting?
Assigning a derieved type to the base type is upcasting and the other way is down casting

6). The casting mentioned above can cause an exception. Refer the c# 'as' operator in this context.

7). Check out the 'Type' class. Its comparison behaviour is different.



# re: Interview Questions: C# 4/27/2007 2:09 AM Zenab

Hello

Let me explain Clone();

Clone() method defined by ICloneable Interface.

public interface ICloneable
{
object Clone();
}

When you wish to implement a custom type which has ability to return an identical copy of itself to caller.
It functionality varies depending on how you have overridden this method.However the basic functionality is to return an identical copy but this copy be values of member variables into new object instance.

public class Point:ICloneable
{
public int x,y;
public Point()
{
}
public Point(int x,int y){this.x=x,this.y=y;}

public Clone()
{
return new Point(this.x,this.y);

}
}


public static void Main(Strings[] args)
{
Point p1=nePoint p2=(Point)p1.Clone();//return new new object

// if change value

p2.x=0;

//this will not change value of p3.x// as it would if have //written p2=p1


}


you can implemt clone as

public object clone()
{
return memberwiseclone();//if object contain aonther //refence varible however other will not be deep copy //they will return refences only.
//to deep copy you to write code in clone method.
}
}



# re: Interview Questions: C# 5/4/2007 7:36 AM William

hi friends,
I am preparing for an interview, please send me C#, ASP.NET, SQL Server questions with answers to my following email.
janey_chi@yahoo.com



# re: Interview Questions: C# 5/11/2007 7:10 AM Irfan

Hi Mark.... Thanks for organizing all C# questions.



# re: Interview Questions: C# 5/12/2007 9:15 PM Devendra Dwivedi

Its a better.



# re: Interview Questions: C# 5/12/2007 9:16 PM Devendra Dwivedi

Its a better.




# re: Interview Questions: C# 5/22/2007 10:44 AM Maulik

You can find some more .NET Interview Questions Here @ Ripal Soni
www.ripalsoni.wordpress.com




# re: Interview Questions: C# 5/23/2007 10:07 PM Parminder

Class Questions no 3

In C# a method can't be declared as sealed. However when we override a method in a derived class, we can declare the overrided method as sealed as shown below. By declaring it as sealed, we can avoid further overriding of this method.

using System;
class MyClass1
{
public int x;
public int y;

public virtual void Method()
{
Console.WriteLine("virtual method");
}
}

class MyClass : MyClass1
{
public override sealed void Method()
{
Console.WriteLine("sealed method");
}
}

class MainClass
{
public static void Main()
{
MyClass1 mC = new MyClass();
mC.x = 110;
mC.y = 150;
Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
mC.Method();
}
}







(B)What is a IL?
Twist :- What is MSIL or CIL , What is JIT?
(IL)Intermediate Language is also known as MSIL (Microsoft Intermediate Language) or CIL
(Common Intermediate Language). All .NET source code is compiled to IL. This IL is then
converted to machine code at the point where the software is installed, or at run-time by a Just-In-
Time (JIT) compiler.
(B)What is a CLR?
Full form of CLR is Common Language Runtime and it forms the heart of the .NET framework.
All Languages have runtime and its the responsibility of the runtime to take care of the code
execution of the program. For example VC++ has MSCRT40.DLL,VB6 has MSVBVM60.DLL,
Java has Java Virtual Machine etc. Similarly .NET has CLR. Following are the responsibilities of


CLR
√ Garbage Collection :- CLR automatically manages memory thus eliminating
memory leaks. When objects are not referred GC automatically releases those
memories thus providing efficient memory management.
√ Code Access Security :- CAS grants rights to program depending on the security
configuration of the machine. Example the program has rights to edit or create
a new file but the security configuration of machine does not allow the program
to delete a file. CAS will take care that the code runs under the environment of
machines security configuration.
√ Code Verification :- This ensures proper code execution and type safety while
the code runs. It prevents the source code to perform illegal operation such as
accessing invalid memory locations etc.
√ IL( Intermediate language )-to-native translators and optimizer’s :- CLR uses
JIT and compiles the IL code to machine code and then executes. CLR also
determines depending on platform what is optimized way of running the IL
code.
(B)What is a CTS?
In order that two language communicate smoothly CLR has CTS (Common Type System).Example
in VB you have “Integer” and in C++ you have “long” these datatypes are not compatible so the
interfacing between them is very complicated. In order to able that two different languages can
1. Basic .NET Framework
69
communicate Microsoft introduced Common Type System. So “Integer” datatype in VB6 and
“int” datatype in C++ will convert it to System.int32 which is datatype of CTS. CLS which is
covered in the coming question is subset of CTS.
Note: If you have undergone COM programming period interfacing VB6 application with
VC++ application was a real pain as the datatype of both languages did not have a
common ground where they can come and interface, by having CTS interfacing is smooth.
(B)What is a CLS(Common Language Specification)?
This is a subset of the CTS which all .NET languages are expected to support. It was always a
dream of Microsoft to unite all different languages in to one umbrella and CLS is one step
towards that. Microsoft has defined CLS which are nothing but guidelines that language to follow
so that it can communicate with other .NET languages in a seamless manner.
(B)What is a Managed Code?
Managed code runs inside the environment of CLR i.e. .NET runtime. In short all IL are managed
code. But if you are using some third party software example VB6 or VC++ component they are
unmanaged code as .NET runtime (CLR) does not have control over the source code execution
of the language.
(B)What is a Assembly?
√ Assembly is unit of deployment like EXE or a DLL.
√ An assembly consists of one or more files (dlls, exe’s, html files etc.), and
represents a group of resources, type definitions, and implementations of those
types. An assembly may also contain references to other assemblies. These
resources, types and references are described in a block of data called a manifest.
The manifest is part of the assembly, thus making the assembly self-describing.
√ An assembly is completely self-describing.An assembly contains metadata
information, which is used by the CLR for everything from type checking and
security to actually invoking the components methods. As all information is in the
assembly itself, it is independent of registry. This is the basic advantage as
compared to COM where the version was stored in registry.
√ Multiple versions can be deployed side by side in different folders. These
different versions can execute at the same time without interfering with each
other. Assemblies can be private or shared. For private assembly deployment, the
assembly is copied to the same directory as the client program that references
it. No registration is needed, and no fancy installation program is required.
70
When the component is removed, no registry cleanup is needed, and no uninstall
program is required. Just delete it from the hard drive.
√ In shared assembly deployment, an assembly is installed in the Global Assembly
Cache (or GAC). The GAC contains shared assemblies that are
globally accessible to all .NET applications on the machine.
(A) What are the different types of Assembly?
There are two types of assembly Private and Public assembly. A private assembly is normally used
by a single application, and is stored in the application's directory, or a sub-directory beneath. A
shared assembly is normally stored in the global assembly cache, which is a repository of assemblies
maintained by the .NET runtime. Shared assemblies are usually libraries of code which many
applications will find useful, e.g. Crystal report classes which will be used by all application for
Reports.
(B) What is NameSpace?
Namespace has two basic functionality :-
√ NameSpace Logically group types, example System.Web.UI logically groups
our UI related features.
√ In Object Oriented world many times its possible that programmers will use the
same class name.By qualifying NameSpace with classname this collision can be
avoided.
(B) What is Difference between NameSpace and Assembly?
Following are the differences between namespace and assembly :
√ Assembly is physical grouping of logical units. Namespace logically groups
classes.
√ Namespace can span multiple assembly.
(A)If you want to view a Assembly how do you go about it ?
Twist : What is ILDASM ?
When it comes to understanding of internals nothing can beat ILDASM. ILDASM basically converts
the whole exe or dll in to IL code. To run ILDASM you have to go to "C:\Program Files\Microsoft
71
Visual Studio .NET 2003\SDK\v1.1\Bin". Note that i had v1.1 you have to probably change it
depending on the type of framework version you have.
If you run IDASM.EXE from the path you will be popped with the IDASM exe program as
shown in figure ILDASM. Click on file and browse to the respective directory for the DLL
whose assembly you want to view. After you select the DLL you will be popped with a tree view
details of the DLL as shown in figure ILDASM. On double clicking on manifest you will be able
to view details of assembly, internal IL code etc as shown in Figure Manifest View.
Note : The version number are in the manifest itself which is defined with the DLL or
EXE thus making deployment much easier as compared to COM where the information
was stored in registry. Note the version information in Figure Manifest view.
You can expand the tree for detail information regarding the DLL like methods etc.
Figure:- 1.1 ILDASM
72
Figure :- 1.2 Manifest View
(A) What is Manifest?
Assembly metadata is stored in Manifest. Manifest contains all the metadata needed to do the
following things (See Figure Manifest View for more details):
√ Version of assembly
√ Security identity
√ Scope of the assembly
√ Resolve references to resources and classes.
√ The assembly manifest can be stored in either a PE file (an .exe or .dll) with
Microsoft intermediate language (MSIL) code or in a stand-alone PE file that
contains only assembly manifest information.
73
(B)Where is version information stored of an assembly ?
Version information is stored in assembly in manifest.
(I)Is versioning applicable to private assemblies?
Versioning concept is only applicable to global assembly cache (GAC) as private assembly lie in
their individual folders.
(B) What is GAC ?
Twist :- What are situations when you register .NET assembly in GAC ?
GAC (Global Assembly Cache) is used where shared .NET assembly reside. GAC is used in the
following situations :-
√ If the application has to be shared among several application.
√ If the assembly has some special security requirements like only administrators
can remove the assembly. If the assembly is private then a simple delete of
assembly the assembly file will remove the assembly.
Note :- Registering .NET assembly in GAC can lead to the old problem of DLL hell,
where COM version was stored in central registry. So GAC should be used when absolutely
necessary.
(I) What is the concept of strong names ?
Twist :- How do we generate strong names ?
Twist :- What is use the of SN.EXE ?
Twist :- How do we apply strong names to assembly?
Twist :- How do you sign an assembly?
Strong name is similar to GUID(It is supposed to be unique in space and time) in COM
components.Strong Name is only needed when we need to deploy assembly in GAC. Strong
Names helps GAC to differentiate between two versions. Strong names use public key cryptography
(PKC) to ensure that no one can spoof it.PKC use public key and private key concept.
Following are the step to generate a strong name and sign a assembly :-
74
√ Go to “Visual Studio Command Prompt”. See below figure “Visual studio
Command Prompt”. Note the samples are compiled in 2005 but 2003 users do
not have to worry about it. Same type of command prompt will be seen in
2003 also.
Figure :- 1.3 Visual Studio Command Prompt
√ After you are in command prompt type sn.exe -k “c:\test.snk”.
Figure :- 1.4 Running SN.EXE
75
Figure :- 1.5 Successful output of SN.EXE
76
Figure :- 1.6 Sample view of test.snk file
√ After generation of the file you can view the SNK file in a simple notepad.
√ After the SNK file is generated its time to sign the project with this SNK file.
77
Figure:- 1.7 Click on project and then click on “classlibrary1 properties” menu to sign the assembly
√ Click on project -- properties and the browse the SNK file to the respective
folder and compile the project.
78
Figure :- 1.8 Click on Use a key file to sign the assembly with strong name
(I)How to add and remove an assembly from GAC?
There are two ways to install .NET assembly in GAC:-
√ Using Microsoft Installer Package. You can get download of installer from
http://www.microsoft.com.
√ Using Gacutil. Goto “Visual Studio Command Prompt” and type “gacutil –i
(assembly_name)”, where (assembly_name) is the DLL name of the project.
79
(B) What is Delay signing ?
During development process you will need strong name keys to be exposed to developer which
is not a good practice from security aspect point of view.In such situations you can assign the key
later on and during development you an use delay signing
Following is process to delay sign an assembly:
√ First obtain your string name keys using SN.EXE.
√ Annotate the source code for the assembly with two custom attributes from
System.Reflection: AssemblyKeyFileAttribute, which passes the name of the file
containing the public key as a parameter to its constructor. AssemblyDelaySignAttribute,
which indicates that delay signing, is being used by passing true as a parameter to its
constructor. For example as shown below:
[Visual Basic]
<Assembly:AssemblyKeyFileAttribute("myKey.snk")>
<Assembly:AssemblyDelaySignAttribute(true)>
[C#]
[assembly:AssemblyKeyFileAttribute("myKey.snk")]
[assembly:AssemblyDelaySignAttribute(true)]
The compiler inserts the public key into the assembly manifest and reserves space in the PE file for
the full strong name signature. The real public key must be stored while the assembly is built so
that other assemblies that reference this assembly can obtain the key to store in their own assembly
reference.
√ Because the assembly does not have a valid strong name signature, the verification of
that signature must be turned off. You can do this by using the –Vr option with the
Strong Name tool.The following example turns off verification for an assembly called
myAssembly.dll.
Sn –Vr myAssembly.dll
80
√ Just before shipping, you submit the assembly to your organization's signing authority
for the actual strong name signing using the –R option with the Strong Name tool.
The following example signs an assembly called myAssembly.dll with a strong name
using the sgKey.snk key pair.
Sn -R myAssembly.dll sgKey.snk
(B)What is garbage collection?
Garbage collection is a CLR feature which automatically manages memory. Programmers forget
to release the objects while coding ..... Laziness (Remember in VB6 where one of the good
practices is to set object to nothing). CLR automatically releases objects when they are no longer in
use and refernced. CLR runs on non-deterministic to see the unused objects and cleans them. One
side effect of this non-deterministic feature is that we cannot assume an object is destroyed when
it goes out of the scope of a function.we should avoid using destructors because before GC
destroys the object it first executes destructor in that case it will have to wait for code to release
the umanaged resource. resultin in additional delays in GC. So its recommended to implement
IDisposable interface and write cleaup code in Dispose method and call GC.SuppressFinalize
method so instructing GC not to call your constructor. For more details read Why is it preferred
to not use finalize for clean up? in OOPS chapter..
(I) Can we force garbage collector to run ?
System.GC.Collect() forces garbage collector to run. This is not recommended but can be used if
situations arises.
(B)What is reflection?
All .NET assemblies have metadata information stored about the types defined in modules. This
metadata information can be accessed by mechanism called as “Reflection”.System. Reflection
can be used to browse through the metadata information.
Using reflection you can also dynamically invoke methods using System.Type.Invokemember.
Below is sample source code if needed you can also get this code from CD provided, go to
“Source code” folder in “Reflection Sample” folder.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim Pobjtype As Type
Dim PobjObject As Object
Dim PobjButtons As New Windows.Forms.Button()
Pobjtype = PobjButtons.GetType()
81
For Each PobjObject In Pobjtype.GetMembers
LstDisplay.Items.Add(PobjObject.ToString())
Next
End Sub
End Class
Note :- Sample source code are compiled using VB.NET 2005.
Figure:- 1.9 Sample reflection display
Sample source code uses reflection to browse through “Button” class of “Windows.Forms”. If
you compile and run the program following is output as shown in “Sample Reflection Display”.
Using reflection you can also dynamically invoke a method using “System.Type.InvokeMember”.
Note :- System.Type.InvokeMember is left as homework for readers. Believe me you will
enjoy doing it yourself and the concept of reflection will be clearer.
(P)What are different types of JIT ?
Note :- This question can only be asked when the interviewer does not know what he wants.
It was asked to me in one of interview and for 15 minutes he was roaming around the
82
same question in order to get answer from me (requirement was for a simple database
project). Beware of such companies and interviewers you can land up no where.
JIT compiler is a part of the runtime execution environment.
In Microsoft .NET there are three types of JIT compilers:
√ Pre-JIT :- Pre-JIT compiles complete source code into native code in a single
compilation cycle. This is done at the time of deployment of the application.
√ Econo-JIT :- Econo-JIT compiles only those methods that are called at runtime.
However, these compiled methods are removed when they are not required.
√ Normal-JIT :- Normal-JIT compiles only those methods that are called at runtime.
These methods are compiled the first time they are called, and then they are stored in
cache. When the same methods are called again, the compiled code from cache is
used for execution.
(B) What are Value types and Reference types ?
Value types directly contain their data which are either allocated on the stack or allocated in-line in
a structure.
Reference types store a reference to the value's memory address, and are allocated on the heap.
Reference types can be self-describing types, pointer types, or interface types.
Variables that are value types each have their own copy of the data, and therefore operations on
one variable do not affect other variables. Variables that are reference types can refer to the same
object; therefore, operations on one variable can affect the same object referred to by another
variable. All types derive from the System.Object base type.
(B) What is concept of Boxing and Unboxing ?
Boxing permits any value type to be implicitly converted to type object or to any interface type
implemented by value type. Boxing is a process in which object instances are created and copy
values in to that instance.
Unboxing is vice versa of boxing operation where the value is copied from the instance in to
appropriate storage location.
Below is sample code of boxing and unboxing where integer data type is converted in to object
and then vice versa.
Dim x As Integer
83
Dim y As Object
x = 10
‘ boxing process
y = x
‘ unboxing process
x = y
(B) What is the difference between VB.NET and C# ?
Well this is the most debatable issue in .NET community and people treat there languages like
religion. Its a subjective matter which language is best. Some like VB.NET’s natural style and some
like professional and terse C# syntaxes. Both use the same framework and speed is also very much
equivalents. But still let’s list down some major differences between them :-
Advantages VB.NET :-
√ Has support for optional parameters which makes COM interoperability much easy.
√ With Option Strict off late binding is supported.Legacy VB functionalities can be
used by using Microsoft.VisualBasic namespace.
√ Has the WITH construct which is not in C#.
√ The VB.NET part of Visual Studio .NET compiles your code in the background.
While this is considered an advantage for small projects, people creating very large
projects have found that the IDE slows down considerably as the project gets larger.
Advantages of C#
√ XML documentation is generated from source code but this is now been incorporated
in Whidbey.
√ Operator overloading which is not in current VB.NET but is been introduced in
Whidbey.
√ Use of this statement makes unmanaged resource disposal simple.
√ Access to Unsafe code. This allows pointer arithmetic etc, and can improve
performance in some situations. However, it is not to be used lightly, as a lot of the
normal safety of C# is lost (as the name implies).This is the major difference that you
can access unmanaged code in C# and not in VB.NET.
84
* How much ever this book tries it can not match the huge variations of questions that have
been asked in.NET interviews.But note there will be variations and they will map to some
question of this book.
(I)What is the difference between System exceptions and Application
exceptions?
All exception derives from Exception Base class. Exceptions can be generated programmatically
or can be generated by system. Application Exception serves as the base class for all applicationspecific
exception classes. It derives from Exception but does not provide any extended functionality.
You should derive your custom application exceptions from Application Exception.
Application exception is used when we want to define user defined exception, while system
exception is all which is defined by .NET.
Figure :- 1.10 Exception Hierarchy
85
Note:- Frankly I have always relied on using Microsoft exception application blocks. As
such I have never used application exception; I think most of the work is done using System
exception classes.
(I)What is CODE Access security?
CAS is part of .NET security model that determines whether or not a piece of code is allowed to
run and what resources it can use while running. Example CAS will allow an application to read
but not to write and delete a file or a resource from a folder..
(I)What is a satellite assembly?
Refer Localization chapter for more details
(A)How to prevent my .NET DLL to be decompiled?
By design .NET embeds rich Meta data inside the executable code using MSIL. Any one can easily
decompile your DLL back using tools like ILDASM (owned by Microsoft) or Reflector for
.NET which is a third party. Secondly there are many third party tools which make this decompiling
process a click away. So any one can easily look in to your assemblies and reverse engineer them
back in to actual source code and understand some real good logic which can make it easy to
crack your application.
The process by which you can stop this reverse engineering is using “obfuscation”. It’s a technique
which will foil the decompilers. There are many third parties (XenoCode, Demeanor for .NET)
which provide .NET obfuscation solution. Microsoft includes one that is Dotfuscator Community
Edition with Visual Studio.NET.
Note: - I leave this as homework to reader’s compile, a DLL obfuscate it using
“Dotfuscator Community Edition” which comes with Visual Studio.NET and try viewing
the same using ILDASM.
(I) What is the difference between Convert.toString and .toString()
method ?
Just to give an understanding of what the above question means seethe below code.
int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
86
We can convert the integer “i” using “i.ToString()” or “Convert.ToString” so what’s the difference.
The basic difference between them is “Convert” function handles NULLS while “i.ToString()”
does not it will throw a NULL reference exception error. So as good coding practice using
“convert” is always safe.
(A) What is Native Image Generator (Ngen.exe)?
The Native Image Generator utility (Ngen.exe) allows you to run the JIT compiler on your assembly's
MSIL and generate native machine code which is cached to disk. After the image is created .NET
runtime will use the image to run the code rather than from the hard disk. Running Ngen.exe on
an assembly potentially allows the assembly to load and execute faster, because it restores code
and data structures from the native image cache rather than generating them dynamically.
Below are some points to be remembered for Native Image Generator:-
√ Native images load faster than MSIL because JIT compilation and type-safety verification
is eliminated.
√ If you are sharing code between process Ngen.exe improves the performance
significantly. As Native image generated Windows PE file so a single DLL file can be
shared across applications. By contrast JIT produced code are private to an assembly
and can not be shared.
√ Native images enable code sharing between processes.
√ Native images require more storage space and more time to generate.
√ Startup time performance improves lot. We can get considerable gains when applications
share component assemblies because after the first application has been started the
shared components are already loaded for subsequent applications. If assemblies in
an application must be loaded from the hard disk, does not benefit as much from
native images because the hard disk access time shadows everything.
√ Assemblies in GAC do not benefit from Native image generator as the loader performs
extra validation on the strong named assemblies thus shadowing the benefits of Native
Image Generator.
√ If any of the assemblies change then Native image should also be updated.
√ You should have administrative privilege for running Ngen.exe.
√ While this can fasten your application startup times as the code is statically compiled
but it can be somewhat slower than the code generated dynamically by the JIT compiler.
So you need to compare how the whole application performance with Ngen.exe and
with out it.
87
To run Ngen.exe, use the following command line.
ngen.exe install <assemblyname>
This will synchronously precompile the specified assembly and all of its dependencies. The generated
native images are stored in the native image cache.
In .NET Framework 2.0 there is a service (.NET Runtime Optimization Service) which can
precompile managed assemblies in the background. You can schedule your assemblies to be
precompiled asynchronously by queueing them up with the NGEN Service. Use the following
command line.
ngen.exe install <assemblyname> /queue:<priority>
Assemblies which are critical to your application's start up time should either be precompiled
synchronously or asynchronously with priority 1. Priority 1 and 2 assemblies are precompiled
aggressively while Priority 3 assemblies are only precompiled during machine idle-time.
Synchronously precompiling your critical assemblies guarantees that the native images will be
available prior to the first time your end user launches the application but increases the time taken
to run your application's set up program.
You can uninstall an assembly and its dependencies (if no other assemblies are dependent on
them) from the native image cache by running the following command.
ngen.exe uninstall <assemblyname>
Native images created using Ngen.exe cannot be deployed; instead they need to be created on the
end user's machine. These commands therefore need to be issued as part of the application's
setup program. Visual Studio .NET can be used to implement this behavior by defining custom
actions in a Microsoft Installer (MSI) package.
Note: - One of the things the interviewer will expect to be answered is what scenario will
use a Native Image generator. Best is to say that we first need to test the application
performance with Native Image and with out it and then make a decision.
(A) If we have two version of same assembly in GAC how do we make a
choice ?
Note: - I really want to explain this in depth for two reasons. First I have seen this
question been frequently asked and second it’s of real practical importance. I have faced this
in every of my .NET projects...So let’s try to get this fundamental not in our brain but in
our heart.Thanks Zeeshan Khan ( it_zeeshanlko@yahoo.com) to correct me regarding some
corrections in this question.
88
OK first let’s try to understand what the interviewer is talking about. Let’s say you have made an
application and its using a DLL which is present in GAC. Now for some reason you make second
version of the same DLL and put it in GAC. Now which DLL does the application refer? Ok by
default it always uses the version by which you have compiled you application in IDE. But you
want that it should actually use the older version.
So first we answer in short. You need to specify “bindingRedirect” in your config file. For instance
in the below case “ClassLibraryVersion” has two versions “1.1.1830.10493” and “1.0.1830.10461”
from which “1.1.1830.10493” is the recent version. But using the bindingRedirect we can specify
saying “1.0.1830.10461” is the new version. So the client will not use “1.1.1830.10493”.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ClassLibraryVersion"
publicKeyToken="b035c4774706cc72"
culture="neutral"/>
<bindingRedirect oldVersion= "1.1.1830.10493"
newVersion= "1.0.1830.10461"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Ok now I will try to answer it in long way by doing a small sample project. Again this project will
be done using C#. So in CD you can find the “Versioning” project. Below is the solution display,
it has two projects one the windows client project ( “WindowsVersioningCSharp” ) and second
the class library project ( “ClassLibraryVersion” ) which will be installed in GAC with two versions.
89
Figure 1.11: - Solution files for the versioning project.
Our first primary goal is to put two different versions of the same DLL in GAC. So let’s make a
walk through of “ClassLibraryVersion” project. It’s a very simple class which has “Version” function
which just sends a string “This is old Version”. Second we will also just ensure that the assembly
version is “1.0” in the “AssemblyInfo.cs”.
90
Figure 1.12 : - Assembly Version 1.0
Second in order that we can put a DLL in GAC we need to create generate strong names and
assign the same to the class. For instance, in below figure I have generated the strong name in
“mykey.snk” and assigned the same to the DLL.
91
Figure 1.13 : - Strong naming your DLL
Finally we need to install the same in GAC using “gacutil” tool. Below is the figure which shows
the same. This installs one version of “ClassLibraryVersion.dll” in GAC.
Figure 1.14 : - Install the same in GAC
Now it is time to create a second version of the DLL. So here is what we will do first we will just
return a different string value for this new version DLL. You can see in the below figure I have
changed the string to return “This is New Version”. Secondly we also need to change the
AssemblyVersion to “1.1.*” in the “AssemblyInfo.cs” file. After that again compile the DLL and
run the “gacutil” to register this second version of the “ClasLibraryVersion.dll”.
92
Figure 1.15 : - Rename to Assembly Version 1.1
Now when we view the GAC we can see two version of “ClassLibraryVersion” i.e. “1.1.1832.2619”
and “1.0.1832.2172” (see figure below).
Figure 1.16 : - Two version of “ClassLibraryVersion” dll.
93
Now that we have created the environment of two version of the same DLL in GAC its time to
look at how client can make a choice between those versions. We need to generate “publicKeyToken”
in order to move ahead. Below is a sample print screen which shows how we can use “sn.exe” to
generated the public key token. Note the “-T” parameter.
Figure 1.17 : - Get the PublicKeyToken
Now let’s look at the client which will consume this DLL. I have just added windows form and
a button to the same. In the button click we will try to call the version function and display the
data. So below is the code in the first step we create the object of “ClassLibraryVersion.Class1”
and in the second step we call the “Version” function to display the data.
Figure 1.18 : - Client code calling the GAC class.
Now comes the most important part of the whole thing the “app.config” file which will decide
which version should be used. So add a new “app.config” file in the project and add the
“AssemblyBinding” section as show below. So you need to specify the following things:-
√ Assembly name in the “name” attribute of “assemblyIdentity” section.
√ Specify the “publicKeyToken” value in the “assemblyIndentity” section which was generated
using “sn.exe –T ‘dllname.dll’ “.
√ Specify the “oldVersion” and “newVersion” values in the “bindingRedirect” element. So
what ever version we want the client to use should be specified in the “newVersion” attribute.
94
You can see from the figure below I have specified that client should use “1.0.*” version. So
the client will display “This is old Version”.
Figure 1.19 : - App.config file using the BindingRedirect
If you run the source code with changing version numbers you can see the below two message
boxes on different version numbers.“This is old version” will be displayed when “newVersion”
value is “1.0.1832.5411” and “This is new Version” will be displayed when “newVersion” value is
“1.1.1832.5427”.
95
Figure 1.20 : - Different Display depending on version numbers
Note: - Source code is provided in “versioning” folder. But as you compile the DLL’s
different publicToken numbers are created so you need to run the sn.exe in your machine and
change the token number accordingly in the “App.config” file.
(A)What is CodeDom?
“CodeDom” is an object model which represents actually a source code. It is designed to be
language independent - once you create a “CodeDom” hierarchy for a program we can then
generate the source code in any .NET compliant language. So let’s try to do something real
practical and simple to just get a feel of how powerful “CodeDom” is.
Note :- You can get the source code in CD in “CodeDom” folder.
We will try to generate the following code below. The below code which will be generated does
not do anything special buy just displays a hello message and waits for the key to be pressed.
namespace InterviewQuestions
{
using System;
public class EntryPoint
{
public static void Main()
{
System.Console.WriteLine(“Hello from Interview Question series”);
System.Console.ReadLine();
96
}
}
}
The “Codedom” folder in the CD has one “GenerateCode” method which returns
“CodeCompileUnit” object. “CodeDom” is nothing but a full DOM model where every object
in the structure represents a code unit. I have put comments the code so that the code is self
understandable. I have commented the code below so that readers can follow what is exactly
happening. When you click the button it generates the “MyCode.cs” and also compiles the
“Mycode.exe” in the “bin” folder.
private CodeCompileUnit GenerateCode()
{
// Definition of the Main method which will be entry point
CodeEntryPointMethod objMainMethod = new CodeEntryPointMethod();
objMainMethod.Name = “Main”;
// generate this expression: Console
CodeTypeReferenceExpression consoleType = new CodeTypeReferenceExpression();
consoleType.Type = new CodeTypeReference(typeof(Console));
// Set up the argument list to pass to Console.WriteLine()
CodeExpression[] writeLineArgs = new CodeExpression[1];
CodePrimitiveExpression arg0 = new CodePrimitiveExpression(“Hello from Interview
Question series”);
writeLineArgs[0] = arg0;
// generate this statement: Console.WriteLine(message)
CodeMethodReferenceExpression writeLineRef = new
CodeMethodReferenceExpression(consoleType, “WriteLine”);
97
CodeMethodInvokeExpression writeLine = new
CodeMethodInvokeExpression(writeLineRef, writeLineArgs);
// generate this statement: Console.ReadLine()
CodeMethodReferenceExpression readLineRef = new
CodeMethodReferenceExpression(consoleType, “ReadLine”);
CodeMethodInvokeExpression readLine = new
CodeMethodInvokeExpression(readLineRef);
// Add Main() method to a class
CodeTypeDeclaration theClass = new CodeTypeDeclaration();
theClass.Members.Add(objMainMethod);
theClass.Name = “EntryPoint”;
// Add both the code of WriteLine and Readline
objMainMethod.Statements.Add(writeLine);
objMainMethod.Statements.Add(readLine);
// Add namespace and add class
CodeNamespace ns = new CodeNamespace(“InterviewQuestions”);
ns.Imports.Add(new CodeNamespaceImport(“System”));
ns.Types.Add(theClass);
// Generate the Compile Unit
CodeCompileUnit unit = new CodeCompileUnit();
unit.Namespaces.Add(ns);
98
Sample provided is very basic but in actual project using codedom can be very complicated.
Projects where you need auto code generation codedom can be a right choice. Beware of high
bulky architecture created due to codedom.
99
(I) How can we use COM Components in .NET?
Twist : What is RCW ?
.NET components communicate with COM using RCW (Runtime Callable Wrapper). Following
are the ways with which you can generate RCW :-
√ Adding reference in Visual Studio.net. See figure below (Adding reference using VS.NET
2005). Wrapper class is generated and placed in the “BIN” directory.
Figure :- 2.1 Adding Reference using VS.NET 2005
2..NET Interoperability
100
√ Using Type library import tool. Tlbimp.exe yourname.dll.
√ Using interopservices.System.runtime.Interopservices namespace contains class
TypeLib Converter which provides methods to convert COM classes and interface in
to assembly metadata.
√ Make your custom wrappe rs.If your COM component does not have type library
then the only way to communicate is writing custom wrappers. That means
communicating directly with COM components.
(I) Once I have developed the COM wrapper do I have to still register the
COM in registry?
Yes.
(A)How can we use .NET components in COM?
Twist :- What is CCW (COM callable wrapper) ?
Twist :- How do we ensure that .NET components is compatible with COM ?
.NET components can not be used in straight forward way with COM. You will need to create
CCW in order that COM components communicate with .NET assemblies. Following are the
different approaches to implement it :-
√ Explicitly declare interfaces..
Public Interface ICustomer
Property CustomerName() As String
Property CustomerCode() As String
Sub AddCustomer()
End Interface
Public Class Customer
Implements ICustomer
Private PstrCustomerName As String
Private PstrCustomerCode As String
Public Sub AddCustomer() Implements ICustomer.AddCustomer
Try
‘ addin of database code can go here
Catch ex As Exception
Throw ex
End Try
101
End Sub
Public Property CustomerCode() As String Implements
ICustomer.CustomerCode
Get
Return PstrCustomerCode
End Get
Set(ByVal value As String)
PstrCustomerCode = value
End Set
End Property
Public Property CustomerName() As String Implements
ICustomer.CustomerName
Get
Return PstrCustomerName
End Get
Set(ByVal value As String)
PstrCustomerName = value
End Set
End Property
Public Sub New()
End Sub
End Class
Note :- Source code of this is provided in CD in SOURCECODE folder in
COMCALLABLEWRAPPER
The above customer class is going to be used by COM components so all the properties and
methods are declared in interface and implemented in the customer class. Customer Name.Customer
Code and AddCustomer are first declared in ICustomer and then implemented in Customer
Class. Also note that the class must have a default constructor.
Note :- All source code in this book is provided in VB.NET that does not mean that
author of the book does not like C#. In fact the main programming language of author is
C#. In order to keep things small I have only used one language. But the conversion is so
seamless that it is of least matter.
102
√ The second way to create CCW is by using InteropServices attributes. Here interfaces
are created automatically.
Following are different type of class attributes :
None:-No class interface is generated for the class. This is default setting when you do not specify
anything.
AutoDispatch :- Interface that supports IDispatch is created for the class. However, no type
information is produced.
AutoDual :- A dual interface is created for the class. Type information is produced and made
available in the type library.
Below in the source code we have used the third attribute.
Imports System.Runtime.InteropServices
<ClassInterfaceAttribute(ClassInterfaceType.AutoDual)> _
Public Class ClsCompliant
End Class
Other than class attributes defined up there are other attributes with which you can govern other
part of assembly.Example “GuidAttribute” allows you to specify the GUID,
“ComVisibleAttribute” can be used to hide .NET types from COM etc. All attributes are not in
scope of the book as this is a interview questions book refer MSDN for more details.
√ Once .NET assembly is created using either interface or using interopservices method
we need to create a COM type library using Type library export tool.
Tlbexp (AssemblyName)
√ The final thing is registering the CCW in registry using regasm tool.
regasm AssemblyName [Options]
√ Finally refer the TLB in your COM IDE Below is figure showing VB6 IDE referencing
the DLL
Note :- DLL and TLB should be in same directory where the application is executed.
103
Figure :- 2.2 VB6 IDE referencing the CCW
(A)How can we make Windows API calls in .NET?
Windows API call are not COM based and they are invoked through Platform Invoke Services.
Declare StringConversionType (Function | Sub) MethodName Lib "DllName" ([Args])
As Type
√ StringConversionType is for what type of conversion should take place. Either we
can specify Unicode to convert all strings to Unicode values, or Auto to convert
strings according to the .NET runtime rules.
√ MethodName is the name of the API to call.
√ DllName is the name of the DLL.
√ Args are any arguments to the API call.
104
√ Type is the return type of the API call.
Below is a sample code for VB.NET which uses Sleep windows API for delaying.
Public Class Form1
Declare Auto Sub Sleep Lib “kernel32.dll” (ByVal dwMilliseconds
As Long)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
MessageBox.Show(“ start sleeping for 5000 Milli
seconds.....”)
Sleep(5000)
MessageBox.Show(“ end of sleeping.....”)
End Sub
End Class
Note:- Source code is provided in CD in “APICALL” folder
In VB.NET we use declare keyword but in C# it goes little bit different, we use DLLIMPORT
here.
Note :- We have interopservices in this and EXTERN keyword.
#region Using directives
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
#endregion
namespace CSharpCode
{
partial class Form1 : Form
{
[DllImport(“Kernel32.dll”)]
static extern int Sleep(long dwMilliseconds);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
105
{
MessageBox.Show(“Starting of 5000 ms...”);
Sleep(5000);
MessageBox.Show(“End of 5000 ms...”);
}
}
}
(B)When we use windows API in .NET is it managed or unmanaged code
?
Windows API in .NET is unmanaged code.
Note:- Even though VB6 and V C++ has gone off still many people do ask these old
questions again and again. Still there are decent old application which are working with
COM very much fine. So interviewer still asks you these questions so that those
application’s can be ported to .NET. So let’s play some old music... By the way my
favourite music is Kishore, what’s yours???
(I)What is COM ?
Microsoft’s COM is a technology for component software development. It is a binary standard
which is language independent. DCOM is a distributed extension of COM.
(A) What is Reference counting in COM ?
Reference counting is a memory management technique used to count how many times an object
has a pointer referring to it. The first time it is created, the reference count is set to one. When the
last reference to the object is nulled, the reference count is set to zero and the object is deleted.
Care must be exercised to prevent a context switch from changing the reference count at the time
of deletion. In the methods that follow, the syntax is shortened to keep the scope of the discussion
brief and manageable.
(A) Can you describe IUKNOWN interface in short ?
Every COM object supports at least one interface, the IUnknown interface. All interfaces are
classes derived from the base class IUnknown. Each interface supports methods access data and
perform operations transparently to the programmer. For example, IUnknown supports three
methods, AddRef, Release(), and QueryInterface(). Suppose that pinterf is a pointer to an IUnknown.
pinterf->AddRef() increments the reference count. pinterf->Release() decrements the reference
count, deleting the object when the reference count reaches zero. pinterf->QueryInterface( IDesired,
106
pDesired) checks to see if the current interface (IUnknown) supports another interface, IDesired,
creates an instance (via a call to CoCreateInstance()) of the object if the reference count is zero (the
object does not yet exist), and then calls pDesired->AddRef() to increment the reference count
(where pDesired is a pointer to IDesired) and returns the pointer to the caller.
(I)Can you explain what is DCOM ?
DCOM differs from COM in that it allows for creating objects distributed across a network, a
protocol for invoking that object’s methods, and secures access to the object. DCOM provides a
wrapper around COM, hence it is a backwards compatible extension. DCOM uses Remote
Procedural Calls (RPC) using Open Software Foundation’s Distributed Computing Environment.
These RPC are implemented over TCP/IP and named pipes. The protocol which is actually being
used is registered just prior to use, as opposed to being registered at initialization time. The reason
for this is that if a protocol is not being used, it will not be loaded.
In order to inform an object that the client is still alive, periodic pinging is used. Hence, when the
client has died and no ping has been received (to refresh it) before the expiration time, the server
object will perform some clean up tasks (including decrementing its reference count).
Since RPC across a network are typically slow (compared to processes residing on the same
machine), DCOM sends multiple requests in the same call. For example, in COM, the program
performs a QueryInterface, one interface at a time. In DCOM, multiple QueryInterfaces are all
clustered into one call.
This clustering optimization trick is also used when creating an instance of the object and serializing
it with data. Since these two operations usually occur together, DCOM allows one method which
will perform both operations in one call without waiting for an acknowledgment from the first
task before performing the second one.
Similarly, when a client pings its server object, he can do it in one call. Moreover, if there are
multiple clients sending pings to multiple servers, an optimization is made where the multiple
pings going to the same object are consolidated into just one ping. This is to cut down on the use
of precious bandwidth used only for pinging.
The client has the control to set the computer which will be responsible for the lifetime of the
object. That is to say, these objects are not created just somewhere where the system resources and
access privileges allow for it.
Call security is implemented in all four ways: authentication (to prevent false clients from
impersonating the true client), authorization (to insure that a client only does what it is authorized
to do), data integrity (to insure that data was not tampered with during transit) and data privacy (to
insure that only designated sources can read it). The security issues are handled as they are on
107
operating systems. The client gives the server various access privileges to access memory or disk
space
(B)How do we create DCOM object in VB6?
Using the CreateObject method you can create a DCOM object. You have to put the server
name in the registry.
(A)How to implement DTC in .NET ?
DTC is implemented using COM+.
Following are the steps to implement COM + in .NET :-
√ “EnterpriseService” namespace has all the classes by which we can implement DTC
in .NET. You have to add reference “EnterpriseService” namespace.
108
Figure :- 2.3 Add reference to EnterpriseServices.
√ You class must derive from “Serviced Component” object.
√ Then you have to define your class with the transaction attribute
(For all transaction attribute look the down question)
[ Transaction(TransactionOption.RequiresNew) ]
√ After the class level transaction type is defined. Its time to define at the method level
the AutoComplete attribute. Autocomplete attribute says that if no exception is thrown
then mark its part of the transaction as being okay. This helps cut down on the
amount of code required. If the implementation sets AutoComplete to false, or
109
omits it all together, then we would need to manage the transaction manually. To
manually control the transaction you will need to use the ContextUtil class and its static
members. Following is small snippet of ContextUtil: -
public void SampleFunction()
{
try
{
// Do something to a database
// ...
// Everything okay so far Commit the transaction
ContextUtil.SetComplete();
}
catch(Exception)
{
// Something went wrong Abort and Rollback the Transaction.
ContextUtil.SetAbort();
}
}
√ Component derived from “ServicedComponent” should be strong named as they
run under COM+.
√ Once the classes are compiled using the string name.Register the Component in COM+
services using
regsvcs c:\DllPath\TransactionComponent.dll
√ You can see that the component is registered using the COM+ explorer.
(A)How many types of Transactions are there in COM + .NET ?
110
There are 5 transactions types that can be used with COM+. Whenever an object is registered with
COM+ it has to abide either to these 5 transaction types.
Disabled: - There is no transaction. COM+ does not provide transaction support for this
component.
Not Supported: - Component does not support transactions. Hence even if the calling component
in the hierarchy is transaction enabled this component will not participate in the transaction.
Supported: - Components with transaction type support will be a part of the transaction. This will
be only if the calling component has an active transaction. If the calling component is not transaction
enabled this component will not start a new transaction.
Required: - Components with this attribute require a transaction i.e. either the calling should have
a transaction in place else this component will start a new transaction.
Required New: - Components enabled with this transaction type always require a new transaction.
Components with required new transaction type instantiate a new transaction for themselves every
time.
(A)How do you do object pooling in .NET ?
COM+ reduces overhead by creating object from scratch. So in COM+ when object is activated
its activated from pool and when its deactivated it’s pushed back to the pool. Object pooling is
configures by using the “ObjectPoolingAttribute” to the class.
Note:- When a class is marked with objectpooling attribute it can not be inherited.
ObjectPooling(MinPoolSize := 2, MaxPoolSize := 5, CreationTimeout := 20000)> _
Public Class testingclass
Inherits ServicedComponent
Public Sub DoWork()
' Method contents go here.
End Sub
End Class
Above is a sample code which has the “ObjectPooling” attribute defined. Below is a sample code
which uses the class.
111
Public Class App
Overloads Public Shared Sub Main(args() As String)
Dim xyz As New TestObjectPooling()
xyz.doWork()
ServicedComponent.DisposeObject (xyz)
End Sub
End Class
Above is a sample code which uses the object pooled object. Note the DisposeObject() This
ensures its safe return to the object pool.
(A)What are types of compatibility in VB6?
There are three possible project compatibility settings:
√ No Compatibility
√ Project Compatibility
√ Binary Compatibility
No Compatibility
With this setting, new class ID’s, new interface ID’s and a new type library ID will be generated by
VB each time the ActiveX component project is compiled. This will cause any compiled client
components to fail (with error 429!) and report a missing reference to the 'VB ActiveX Test
Component' when a client project is loaded in the VB IDE.
Note :- Use this setting to compile the initial release of a component to other developers.
Project Compatibility
With this setting, VB will generate new interface ID’s for classes whose interfaces have changed,
but will not change the class ID’s or the type library ID. This will still cause any compiled client
components to fail (with error 429!) but will not report a missing reference to the 'VB ActiveX
Test Component' when a client project is loaded in the VB IDE. Recompilation of client
components will restore them to working order again.
Note:- Use this setting during the initial development and testing of a component within
the IDE and before the component is released to other developers.
112
Binary Compatibility
VB makes it possible to extend an existing class or interface by adding new methods and properties
etc. and yet still retain binary compatibility. It can do this, because it silently creates a new interface
ID for the extended interface and adds registration code to register the original interface ID but
with a new Forward key containing the value of this new interface ID. COM will then substitute
calls having the old ID with the new ID and hence applications built against the old interface will
continue to work (assuming the inner workings of the component remain backward compatible!).
With this setting, VB will not change any of the existing class, interface or type library ID’s, however
in order that it can do so, VB requires the project to specify an existing compiled version that it can
compare against to ensure that existing interfaces have not been broken
(A)What is equivalent for regsvr32 exe in .NET ?
Regasm
113
(B)What is Multi-tasking ?
It’s a feature of modern operating systems with which we can run multiple programs at
same time example Word, Excel etc.
(B)What is Multi-threading ?
Multi-threading forms subset of Multi-tasking. Instead of having to switch between
programs this feature switches between different parts of the same program. Example
you are writing in word and at the same time word is doing a spell check in background.
(B)What is a Thread ?
A thread is the basic unit to which the operating system allocates processor time.
(B)Did VB6 support multi-threading ?
While VB6 supports multiple single-threaded apartments, it does not support a freethreading
model, which allows multiple threads to run against the same set of data.
(B)Can we have multiple threads in one App domain ?
One or more threads run in an AppDomain. An AppDomain is a runtime representation
of a logical process within a physical process. Each AppDomain is started with a single
thread, but can create additional threads from any of its threads.
Note :- All threading classes are defined in System.Threading namespace.
(B)Which namespace has threading ?
Systems.Threading has all the classes related to implement threading. Any .NET application
who wants to implement threading has to import this namespace.
Note :- .NET program always has at least two threads running one is the main program
and second is the garbage collector.
(I)Can you explain in brief how can we implement threading ?
3. Threading
114
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim pthread1 As New Thread(AddressOf Thread1)
Dim pthread2 As New Thread(AddressOf Thread2)
pthread1.Start()
pthread2.Start()
End Sub
Public Sub Thread1()
Dim pintcount As Integer
Dim pstr As String
pstr = “This is first thread”
Do Until pintcount > 5
lstThreadDisplay.Items.Add(pstr)
pintcount = pintcount + 1
Loop
End Sub
Public Sub Thread2()
Dim pintcount As Integer
Dim pstr As String
pstr = “This is second thread”
Do Until pintcount > 5
lstThreadDisplay.Items.Add(pstr)
pintcount = pintcount + 1
Loop
End Sub
Above is a sample code which shows simple sample code for threading. Above sample
code can be found in “Threading” folder in CD provided. Above sample has two methods
“Thread1()” and “Thread2()” which are started in multi-threaded mode in Form load
event of the sample.
Note :- If you run the sample you will see that sometimes the first thread runs first and
then the second thread.This happens because of thread priorities . The first thread is run
with highest priority.
(A)How can we change priority and what the levels of priority are
provided by .NET ?
115
Thread Priority can be changed by using Threadname.Priority = ThreadPriority.Highest.
In the sample provided look out for code where the second thread is ran with a high
priority.
Following are different levels of Priority provided by .NET :-
√ ThreadPriority.Highest
√ ThreadPriority.AboveNormal
√ ThreadPriority.Normal
√ ThreadPriority.BelowNormal
√ ThreadPriority.Lowest
(A)What does AddressOf operator do in background ?
The AddressOf operator creates a delegate object to the BackgroundProcess method. A
delegate within VB.NET is a type-safe, object-oriented function pointer. After the thread
has been instantiated, you begin the execution of the code by calling the Start() method
of the thread
(A)How can you reference current thread of the method ?
"Thread.CurrentThread" refers to the current thread running in the
method."CurrentThread" is a public static property.
(I) What's Thread.Sleep() in threading ?
Thread's execution can be paused by calling the Thread.Sleep method. This method takes
an integer value that determines how long the thread should sleep. Example
Thread.CurrentThread.Sleep(2000).
(A)How can we make a thread sleep for infinite period ?
You can also place a thread into the sleep state for an indeterminate amount of time by
calling Thread.Sleep (System.Threading.Timeout.Infinite). To interrupt this sleep you can
call the Thread.Interrupt method.
(A) What is Suspend and Resume in Threading ?
116
It is Similar to Sleep and Interrupt. Suspend allows you to block a thread until another
thread calls Thread.Resume. The difference between Sleep and Suspend is that the latter
does not immediately place a thread in the wait state. The thread does not suspend until
the .NET runtime determines that it is in a safe place to suspend it. Sleep will immediately
place a thread in a wait state.
Note :- In threading interviews most people get confused with Sleep and Suspend. They look
very similar.
(A)What the way to stop a long running thread ?
Thread.Abort() stops the thread execution at that moment itself.
(A) How do I debug thread ?
Figure :- 3.1 Debug thread window
This window is only seen when the program is running in debug mode. In windows one of
the window is “Threads”.
117
(A)What is Thread.Join() in threading ?
There are two versions of Thread.Join :-
√ Thread.join().
√ Thread.join(Integer) this returns a Boolean value.
The Thread.Join method is useful for determining if a thread has completed before starting
another task. The Join method waits a specified amount of time for a thread to end. If the
thread ends before the time-out, Join returns true; otherwise it returns False. Once you
call Join, the calling procedure stops and waits for the thread to signal that it is done.
Example you have "Thread1" and "Thread2" and while executing 'Thread1" you call
"Thread2.Join()".So "Thread1" will wait until "Thread2" has completed its execution
and the again invoke "Thread1".
Thread.Join(Integer) ensures that threads do not wait for a long time. If it exceeds a
specific time which is provided in integer the waiting thread will start.
(A)What are Daemon threads and how can a thread be created as
Daemon?
Daemon thread's run in background and stop automatically when nothing is running
program. Example of a Daemon thread is "Garbage collector". Garbage collector runs
until some .NET code is running or else its idle.
You can make a thread Daemon by
Thread.Isbackground=true
(A) When working with shared data in threading how do you implement
synchronization ?
There are certain situtations that you need to be careful with when using threads. If two
threads (e.g. the main and any worker threads) try to access the same variable at the same
time, you'll have a problem. This can be very difficult to debug because they may not
always do it at exactly the same time. To avoid the problem, you can lock a variable
118
before accessing it. However, if the two threads lock the same variable at the same time,
you'll have a deadlock problem.
SyncLock x
'Do something with x
End SyncLock
(I)Can we use events with threading ?
Yes, you can use events with thread; this is one of the techniques to synchronize one
thread with other.
(A)How can we know a state of a thread?
"ThreadState" property can be used to get detail of a thread. Thread can have one or a
combination of status.System.Threading. Threadstate enumeration has all the values to
detect a state of thread. Some sample states are Isrunning, IsAlive, suspended etc.
(A) What is use of Interlocked class ?
Interlocked class provides methods by which you can achieve following functionalities :-
√ Increment Values.
√ Decrement values.
√ Exchange values between variables.
√ Compare values from any thread.
in a synchronization mode.
Example :- System.Threading.Interlocked.Increment(IntA)
(A) What is a monitor object?
Monitor objects are used to ensure that a block of code runs without being interrupted by
code running on other threads. In other words, code in other threads cannot run until
code in the synchronized code block has finished.
SyncLock and End SyncLock statements are provided in order to simplify access to monitor
object.
119
(A) What are wait handles ?
Twist :- What is a mutex object ?
Wait handles sends signals of a thread status from one thread to other thread. There are
three kind of wait modes :-
√ WaitOne.
√ WaitAny.
√ WaitAll.
When a thread wants to release a Wait handle it can call Set method. You can use Mutex
(mutually exclusive) objects to avail for the following modes. Mutex objects are
synchronization objects that can only be owned by a single thread at a time. Threads
request ownership of the mutex object when they require exclusive access to a resource.
Because only one thread can own a mutex object at any time, other threads must wait for
ownership of a mutex object before using the resource.
The WaitOne method causes a calling thread to wait for ownership of a mutex object. If
a thread terminates normally while owning a mutex object, the state of the mutex object
is set to be signaled and the next waiting thread gets ownership
(A) What is ManualResetEvent and AutoResetEvent ?
Threads that call one of the wait methods of a synchronization event must wait until
another thread signals the event by calling the Set method. There are two synchronization
event classes. Threads set the status of ManualResetEvent instances to signaled using
the Set method. Threads set the status of ManualResetEvent instances to no signaled
using the Reset method or when control returns to a waiting WaitOne call. Instances of
the AutoResetEvent class can also be set to signaled using Set, but they automatically
return to nonsignaled as soon as a waiting thread is notified that the event became signaled.
(A) What is ReaderWriter Locks ?
You may want to lock a resource only when data is being written and permit multiple
clients to simultaneously read data when data is not being updated. The ReaderWriterLock
class enforces exclusive access to a resource while a thread is modifying the resource, but
it allows nonexclusive access when reading the resource. ReaderWriter locks are a useful
120
alternative to exclusive locks that cause other threads to wait, even when those threads
do not need to update data.
(I) How can you avoid deadlock in threading?
A good and careful planning can avoid deadlocks.There are so many ways Microsoft has
provided by which you can reduce deadlocks example Monitor, Interlocked classes, Wait
handles, Event raising from one thread to other thread, ThreadState property which you
can poll and act accordingly etc.
(B) What is the difference between thread and process?
A thread is a path of execution that run on CPU, a process is a collection of threads that
share the same virtual memory. A process has at least one thread of execution, and a
thread always run in a process context.
Note:- Its difficult to cover threading interview question in this small chapter. These
questions can take only to a basic level. If you are attending interviews where people are
looking for threading specialist, try to get deeper in to synchronization issues as that's the
important point they will stress.
121
(B)What is an application domain?
Previously “PROCESS” where used as security boundaries. One process has its own
virtual memory and does not over lap the other process virtual memory; due to this one
process can not crash the other process. So any problem or error in one process does not
affect the other process. In .NET they went one step ahead introducing application domains.
In application domains multiple applications can run in same process with out influencing
each other. If one of the application domains throws error it does not affect the other
application domains. To invoke method in a object running in different application domain
.NET remoting is used.
Figure :- 4.1 One process can have multiple Application domains
(B) What is .NET Remoting ?
.NET remoting is replacement of DCOM. Using .NET remoting you can make remote
object calls which lie in different Application Domains. As the remote objects run in
different process client calling the remote object can not call it directly. So the client uses
a proxy which looks like a real object.
When client wants to make method call on the remote object it uses proxy for it. These
method calls are called as “Messages”. Messages are serialized using “formatter” class
and sent to client “channel”. Client Channel communicates with Server Channel. Server
Channel uses as formatter to deserialize the message and sends to the remote object.
4. Remoting and Webservices
122
Figure :- 4.2 Channels, Formatters and Proxy in action.
(B) Which class does the remote object has to inherit ?
All remote objects should inherit from System.MarshalbyRefObject.
(I) What are two different types of remote object creation mode in .NET ?
There are two different ways in which object can be created using Remoting :-
√ SAO (Server Activated Objects) also called as Well-Known call mode.
√ CAO (Client Activated Objects)
SAO has two modes “Single Call” and “Singleton”. With Single Call object the object is
created with every method call thus making the object stateless. With Singleton the object
is created only once and the object is shared with all clients.
CAO are stateful as compared to SAO. In CAO the creation request is sent from client
side. Client holds a proxy to the server object created on server.
(A) Describe in detail Basic of SAO architecture of Remoting?
For these types of questions interviewer expects small and sweet answers. He is basically
looking at what you know about the specific subject. For these type of question this book
will provide detail code which is not necessary to be said during interview. Only the basic
steps and overall brief are enough to convince that you have knowledge about the subject.
Even though this question has detail code and answer say only what is needed in interview.
123
Remoting has at least three sections :-
√ Common Interface which will be shared between them.
√ Server.
√ Client.
Figure :- 4.3 Solution Explorer of Remoting Project
In CD “RemotingSample(SAO)” project is provided which gives a insight of remoting.
Above is the figure which shows the three important project sections needed to implement
remoting.
First important section is the common interface between Server and
Client.”InterFaceRemoting” project has the interface code. For sample project interface
is very simple with only two methods :- SetValue and GetValue.
Public Interface InterFaceRemoting
Sub SetValue(ByVal value As String)
Function GetValue() As String
End Interface
Second important section is the server.In this sample server is using HTTP channel and
the server object is singleton.
Imports System
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels.Http
Imports System.Runtime.Remoting.Channels
Imports InterFaceRemoting
Public Class RemotingServer
Inherits MarshalByRefObject
124
Implements InterFaceRemoting.InterFaceRemoting
Private strData As String
Public Function GetValue() As String Implements
InterFaceRemoting.InterFaceRemoting.GetValue
Return strData
End Function
Sub New()
strData = “testing..”
End Sub
Public Sub SetValue(ByVal value As String) Implements
InterFaceRemoting.InterFaceRemoting.SetValue
strData = value
End Sub
End Class
Module ModuleRemotingStartUp
Sub Main()
Dim objHttpChannel As HttpChannel
Console.WriteLine(“Server Started....”)
objHttpChannel = New HttpChannel(1234)
ChannelServices.RegisterChannel(objHttpChannel)
RemotingConfiguration.RegisterWellKnownServiceType(GetType(RemotingServer),
“RemoteObject”, WellKnownObjectMode.Singleton)
Console.WriteLine(“Server registered and listening waiting
for clients...”)
Console.ReadLine()
End Sub
End Module
Following is detail explanation :-
√ Channel object is created and registered.
Following is the code.
Dim objHttpChannel As HttpChannel
Console.WriteLine(“Server Started....”)
objHttpChannel = New HttpChannel(1234)
ChannelServices.RegisterChannel(objHttpChannel)
√ Server then hosts the object so that client can connect to it. This is the time
when we specify what mode the server object will be created i.e. Singleton or
SingleCall. This is done by the following below given code. Note in sample we
125
are hosting the server object in singleton mode that means that the same object
will be shared between all clients. Also note the server object is implementing
“InterFaceRemoting” and inheriting from “MarshalByRefObject”.
RemotingConfiguration.RegisterWellKnownServiceType(GetType(RemotingServer),
“RemoteObject”, WellKnownObjectMode.Singleton)
Now comes the final section that is third section the client which will connect to this
hosted remoting object.
Following is a detail explanation of client code :-
√ First we create the channel i.e. HTTP. Note whatever channel the server is
using same will be used by the client.
ChannelServices.RegisterChannel(objHttpChannel)
√ As said before the common interface i.e.“InterFaceRemoting” will be used
to communicate with client.
√ After that we can get the server object reference using following code
objRemoting = CType(Activator.GetObject(GetType(InterFaceRemoting.InterFaceRemoting),
“http://localhost:1234/RemoteObject”), InterFaceRemoting.InterFaceRemoting)
√ Then the client can make method call as if the object is local. But actually the
object is a proxy.
Console.WriteLine(“Value on server :- “ & objRemoting.GetValue.ToString())
Imports System
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels.Http
Imports System.Runtime.Remoting.Channels
Imports InterFaceRemoting
Module ModuleStartClient
Sub Main()
Dim objHttpChannel As New HttpChannel
Dim objRemoting As InterFaceRemoting.InterFaceRemoting
ChannelServices.RegisterChannel(objHttpChannel)
objRemoting =
CType(Activator.GetObject(GetType(InterFaceRemoting.InterFaceRemoting),
“http://localhost:1234/RemoteObject”),
126
InterFaceRemoting.InterFaceRemoting)
Console.WriteLine(“Referenced the main object.... Now
displaying Data”)
Console.WriteLine(“Value on server :- “ &
objRemoting.GetValue.ToString())
Console.WriteLine(“Press enter to Terminate”)
Console.ReadLine()
End Sub
End Module
You an run the program and see the output. For running the program run the server
program which is in server directory. Run “Server.exe” from BIN directory. If the EXE
runs properly following will be the screen as shown below.
Figure :- 4.4 Running Server Program of Remoting
Now run “Client.exe” from client folder in BIN directory.Following will be the output
seen.This means that the client connected to the server program and displayed the data in
the server object. In the server object we have initialized value “testing......”. In constructor
of class “RemotingServer” same value is displayed at the client side as shown in figure
below.
127
Figure :- 4.5 Client Program output of Remoting
(A) What are the situations you will use singleton architecture in
remoting ?
If all remoting clients have to share the same data singleton architecture will be used.
(A) What is fundamental of published or precreated objects in Remoting
?
In scenarios of singleton or single call the objects are created dynamically. But in situations
where you want to precreate object and publish it you will use published object scenarios.
Dim obj as new objRemote
obj.Initvalue = 100
RemotingServices.Marshal(obj,”RemoteObject”)
As shown in above sample following changes will be needed on server side.
RemotingConfiguration.RegisterWellKnownServiceType is replaced by
RemotingServices.Marshal(obj,”RemoteObject”) where “obj” is the precreated objected
on the server whose value is initialized to 100.
(A) What are the ways in which client can create object on server in CAO
model ?
There are two ways by which you can create Client objects on remoting server :-
128
√ Activator.CreateInstance().
√ By Keyword “New”.
(A) Are CAO stateful in nature ?
Yes. In CAO remoting model client creates a instance on server and instance variable set
by client on server can be retrieved again with correct value.
(A) In CAO model for client objects to be created by “NEW” keyword
what should we do?
Remoting Clients and Remoting Server can communicate because they share a common
contract by implementing Shared Interface or Base Class (As seen in previous examples).
But according to OOP’s concept we can not create a object of interface or Base Classes
(Abstract Class). Shipping the server object to client is not a good design practice. In
CAO model we can use SOAPSUDS utility to generate Metadata DLL from server which
can be shipped to client, clients can then use this DLL for creating object on server. Run
the SOAPSUDS utility from visual studio command prompt for syntax see below :-
soapsuds -ia:RemotingServer -nowp -oa:ClientMetaData.dll
Where RemotingServer is your server class name.
ClientMetaData.dll is the DLL name by which you will want to create the metadll.
Server code will change as follows :-
ChannelServices.RegisterChannel(objHttpChannel)
RemotingConfiguration.ApplicationName = “RemoteObject”
RemotingConfiguration.RegisterActivatedServiceType(GetType(InterFaceRemoting.InterFaceRemoting))
Note :- We have to provide applicationname and register the object as ActivatedServiceType.
On client side we have to reference the generated ClientMetaData.dll from SOAPSUDS
utility. Below are changes which are needed to be incorporated at the Remoting Client :-
RemotingConfiguration.RegisterActivatedClientType(typeof(RemoteObject),“http://
localhost:1234/MyServer”)
Dim objRemoteObject as new RemoteObject().
129
RemoteObject is class which is obtained from ClientMetaData.dll which we created using
SOAPSUDS utility. Now you can reference the object as normal object.
(I) Is it a good design practice to distribute the implementation to
Remoting Client ?
It’s never advisable to distribute complete implementation at client, due to following
reasons:-
√ Any one can use ILDASM and decrypt your logic.
√ It’s a bad architecture move to have full implementation as client side as any
changes in implementation on server side you have to redistribute it again.
So the best way is to have a interface or SOAPSUDS generated meta-data DLL at client
side rather than having full implementation.
(A) What are LeaseTime, SponsorshipTime, RenewonCallTime and
LeaseManagerPollTime?
This is a very important question from practical implementation point of view. Companies
who have specific requirement for Remoting projects will expect this question to be answered.
In normal .NET environment objects lifetime is managed by garbage collector. But in
remoting environment remote clients can access objects which are out of control of
garbage collector. Garbage collector boundary is limited to a single PC on which framework
is running; any remote client across physical PC is out of control of GC (Garbage
Collector).
This constraint of garbage collector leads to a new way of handling lifetime for remoting
objects, by using concept called as “LeaseTime”. Every server side object is assigned by
default a “LeaseTime” of five minutes. This leasetime is decreased at certain intervals.
Again for every method call a default of two minutes is assigned. When i say method call
means every call made from client. This is called as “RenewalOnCallTime”.
Let’s put the whole thing in equation to make the concept more clear.
Total Remoting object life time = LeaseTime + (Number of method calls) X
(RenewalTime).
If we take NumberOfMethodCalls as one.
130
Then default Remote Object Life Time = 5 + (1) X 2 = 10 minutes (Everything is in
minutes)
When total object lifetime is reduced to zero, it queries the sponsor that should the object
be destroyed. Sponsor is an object which decides should object Lifetime be renewed. So
it queries any registered sponsors with the object, if does not find any then the object is
marked for garbage collection. After this garbage collection has whole control on the
object lifetime. If we do not foresee how long a object will be needed specify the
“SponsorShipTimeOut” value. SponsorShipTimeOut is time unit a call to a sponsor is
timed out.
“LeaseManagerPollTime” defines the time the sponsor has to return a lease time extension.
(A) Which config file has all the supported channels/protocol ?
Machine.config file has all the supported channels and formatter supported by .NET
remoting.Machine.config file can be found at
“C:\WINDOWS\Microsoft.NET\Framework\vXXXXX\CONFIG” path. Find
<system.runtime.remoting> element in the Machine.config file which has the channels
and the formatters. Below is a figure shown which can give a clear idea of how the file
looks like.
Note :- Interviewer will not ask you to name all channels and formatters in machine.config
but will definitely like to know in which file are all the formatter and channels specified, one
sweet answer “Machine.config” can fetch you handsome job.
131
Figure :- 4.6 Channels and Formatter in machine.config file
(A) How can you specify remoting parameters using Config files ?
Both remoting server and remoting client parameters can be provided through config
files. Below is a sample of server config file which provides all remoting parameter values
which we where providing through code.
<configuration>
<system.runtime.remoting>
<application name=”Server”>
<service>
<wellknown
132
mode=”SingleCall”
type=”Server.ClsServer, Server”
objectUri=”RemoteObject” />
</service>
<channels>
<channel ref=”tcp server” port=”9000" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Later this config file can be loaded using the following code.
RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ApplicationBase
& “Server.config”)
Same way we also have client.config file for loading the client remoting parameters.
<configuration>
<system.runtime.remoting>
<application name=”Client”>
<client url=”tcp://localhost:9000/RemoteObject”>
<wellknown
type=”CommonInterface.Icommon, Icommon”
url = “tcp://localhost:9000/Server/RemoteObject”/>
</client>
<channels>
<channel ref=”tcp client” />
</channels>
</application>
</system.runtime.remoting>
</configuration>
client remoting can then load the configuration file by using :-
Dim IobjCommon As CommonInterFace.Icommon
Dim StrData As String
Dim objServiceEntries As WellKnownClientTypeEntry()
RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ApplicationBase
& “Client.config”)
objServiceEntries =
RemotingConfiguration.GetRegisteredWellKnownClientTypes()
IobjCommon = Activator.GetObject(GetType(Icommon),
objServiceEntries(0).ObjectUrl.ToString())
StrData = IobjCommon.GetValue()
133
Console.WriteLine(“ Serve side Data is “ & StrData)
Console.ReadLine()
Note :- Complete source is provided in CD in folder “RemotingObjectLifeTime”.If you run
Server and Client following output can be seen. All source is compiled using VS2005
BETA1
Figure : - 4.7 Output of Server and Client for RemotingObjectLifeTime project
(A) Can Non-Default constructors be used with Single Call SAO?
Twist :- What are the limitation of constructors for Single call SAO ?
134
Non-Default constructors can not be used with single call objects as object is created
with every method call, there is no way to define Non-default constructors in method
calls.
It’s possible to use Non-Default constructor with Client activated objects as both methods
:-
“NEW” keyword and “Activator.CreateInstance” provide a way to specify Non-Default
constructors.
(I) How can we call methods in remoting Asynchronously ?
All previous examples are a synchronous method calls that means client has to wait until
the method completes the process. By using Delegates we can make Asynchronous method
calls.
(A) What is Asynchronous One-Way Calls ?
One-way calls are a different from asynchronous calls from execution angle that the .NET
Framework does not guarantee their execution. In addition, the methods used in this kind
of call cannot have return values or out parameters. One-way calls are defined by using
[OneWay()] attribute in class.
(B) What is marshalling and what are different kinds of marshalling ?
Marshaling is used when an object is converted so that it can be sent across the network
or across application domains. Unmarshaling creates an object from the marshaled data.
There are two ways to do marshalling :-
√ Marshal-by-value (MBV) :- In this the object is serialized into the channel, and
a copy of the object is created on the other side of the network. The object to
marshal is stored into a stream, and the stream is used to build a copy of the
object on the other side with the unmarshalling sequence.
√ Marshaling-by-reference (MBR):- Here it creates a proxy on the client that is
used to communicate with the remote object. The marshaling sequence of a
remote object creates an ObjRef instance that itself can be serialized across
the network.
Objects that are derived from “MarshalByRefObject” are always marshaled by reference.
All our previous samples have classes inherited from “MarshalByRefObject”
135
To marshal a remote object the static method RemotingServices.Marshal() is
used.RemotingServices.Marshal() has following overloaded versions:-
public static ObjRef Marshal(MarshalByRefObject obj)
public static ObjRef Marshal(MarshalByRefObject obj, string objUri)
public static ObjRef Marshal(MarshalByRefObject obj, string objUri,Type
requestedType)
The first argument obj specifies the object to marshal. The objUri is the path that is
stored within the marshaled object reference; it can be used to access the remote object.
The requestedType can be used to pass a different type of the object to the object reference.
This is useful if the client using the remote object shouldn't use the object class but an
interface that the remote object class implements instead. In this scenario the interface is
the requestedType that should be used for marshaling.
(A) What is ObjRef object in remoting ?
All Marshal() methods return ObjRef object.The ObjRef is serializable because it
implements the interface ISerializable, and can be marshaled by value. The ObjRef knows
about :-
√ location of the remote object
√ host name
√ port number
√ object name.
(B) What is a Web Service ?
Web Services are business logic components which provide functionality via the Internet
using standard protocols such as HTTP.
Web Services uses Simple Object Access Protocol (SOAP) in order to expose the business
functionality.SOAP defines a standardized format in XML which can be exchanged
between two entities over standard protocols such as HTTP. SOAP is platform independent
so the consumer of a Web Service is therefore completely shielded from any
implementation details about the platform exposing the Web Service. For the consumer it
is simply a black box of send and receive XML over HTTP. So any web service hosted on
windows can also be consumed by UNIX and LINUX platform.
136
(B) What is UDDI ?
Full form of UDDI is Universal Description, Discovery and Integration. It is a directory
that can be used to publish and discover public Web Services. If you want to see more
details you can visit the http://www.UDDI.org .
(B) What is DISCO ?
DISCO is the abbreviated form of Discovery. It is basically used to club or group common
services together on a server and provides links to the schema documents of the services
it describes may require.
(B) What is WSDL?
Web Service Description Language (WSDL)is a W3C specification which defines XML
grammar for describing Web Services.XML grammar describes details such as:-
√ Where we can find the Web Service (its URI)?
√ What are the methods and properties that service supports?
√ Data type support.
√ Supported protocols
In short its a bible of what the webservice can do.Clients can consume this WSDL and
build proxy objects that clients use to communicate with the Web Services. Full WSDL
specification is available at http://www.w3.org/TR/wsdl.
(A) What the different phase/steps of acquiring a proxy object in
Webservice ?
Following are the different steps needed to get a proxy object of a webservice at
the client side :-
√ Client communicates to UDI node for WebService either through browser or
UDDI's public web service.
√ UDII responds with a list of webservice.
137
√ Every service listed by webservice has a URI pointing to DISCO or WSDL
document.
√ After parsing the DISCO document, we follow the URI for the WSDL document
related to the webservice which we need.
√ Client then parses the WSDL document and builds a proxy object which can
communicate with Webservice.
(B) What is file extension of Webservices ?
.ASMX is extension for Webservices.
Note :- After this we are going to deal with a sample of webservice. In VS2005 webproject
is created from the menu itself as compared to 2003 where it was present in the explorer.
138
Figure :- 4.8 Create Web project menu in VS2005
(B)Which attribute is used in order that the method can be used as
WebService ?
WebMethod attribute has to be specified in order that the method and property can be
treated as WebService.
(A) What are the steps to create a webservice and consume it ?
Note :- For this question this book will make a attempt by creating a simple webservice and
explaining steps to acheive it. A simple webservice will be created which takes two number
and gives addition result of the two number. In CD sample webservice project with folder
name “MathsWebService” is provided and same will be explained below. Definitely the
139
interviewer will not expect such a detail answer but this book will explain you in detail so
that you are on right track during interview.
This webservice will add two numbers and give to the calling client.All the below steps
are according to VS2005 beta editor :-
√ First create a website by clicking on File -- New WebSite.
√ From “Visual Studio Installed Templates” click on “Asp.NET Web Service”.
See figure below. Name the figure as “Maths Web Service”.
140
Figure :- 4.9 Create WebService Project
√ By default the .NET editor has made a default webservice method called as
"HelloWord" which returns a string datatype. Let's rename "Service.vb" to
"Maths.vb" and "Service.asmx" to "Maths.asmx". Let’s replace the
“HelloWorld” with following code below :-
<WebMethod()> _
Public Function AddTwoNumbers(ByVal Number1 As Integer, ByVal
Number2 As Integer) As Integer
Return Number1 + Number2
141
End Function
Figure :- 4.10 Rename all your default “Service” to “Maths”
√ After the webservice is done click on add Webreference. Normally for
components we do a “Add Reference” and for Webservices we do “Add Web
Reference”.
142
Figure :- 4.11 Click on Add Web Reference
√ You will be shown with a list of webservices which are known to the
solutions. As we are looking for our “Maths” webservice which exist in the
143
same solution, we click “Webservices in this solution”.
Figure :- 4.12 List of webservices for browsing
√ Your editor has located the “Maths” webservice.Select the webservice.
144
Figure :- 4.13 Solution showing the availability of Maths Webservice.
145
√ After you have clicked on “Maths” webservice you will see a search progress
bar as shown in figure below. This process will start the webservice, reference it
and create a proxy for the client, so that using it client can absorb the
webservice.
Figure :- 4.14 Starting the webservice and creating the proxy for your solution.
146
√ Finally you are able to see your webservice which is ready for use. Click on
Add Reference and you will see a “Localhost” reference in your .NET solution.
Figure :- 4.15 Starting the webservice and creating the proxy for your solution.
√ We need to make a client who will absorb this “Maths Webservice”. Add
“WebserviceClient.aspx” and create a UI as shown below. In the button click
put in the following code. “LocalHost.ClsMaths” is the proxy object by which
you can make calls to the webservice.
Sub cmdCalculate_Click(ByVal sender As Object, ByVal e As
147
System.EventArgs)
Dim pobjMaths As New localhost.ClsMaths
lblResultDisplay.Text =
Convert.ToString(pobjMaths.AddTwoNumbers(Convert.ToInt16(txtNumber1.Text),
Convert.ToInt16(txtNumber2.Text)))
End Sub
Figure :- 4.16 Complete Webservice in action.
Note :- The whole point of creating this “Maths Webservice” step by step was to have a
understanding of practical angle of how webservices are created. It’s very rare that you will
be asked to explain every step of how to write a webservice. But in case your interviewer is
too bend down to also know what are the actual steps in creating a Webservice.
(A) Do webservice have state ?
Twist :- How can we maintain State in Webservices ?
148
Webservices as such do not have any mechanism by which they can maintain state.
Webservices can access ASP.NET intrinsic objects like Session, application and so on if
they inherit from “WebService” base class.
<%@ Webservice class="TestWebServiceClass" %>
Imports System.Web.Services
Public class TestWebServiceClass
Inherits WebService
<WebMethod> Public Sub SetSession(value As String)
session("Val") = Value
End Sub
end class
Above is a sample code which sets as session object called as “val”. TestWebserviceClass
is inheriting from WebService to access the session and application objects.
149
(B) What is an application object ?
Application object can be used in situation where we want data to be shared across users
globally.
(I)What’s the difference between Cache object and application object ?
The main difference between the Cache and Application objects is that the Cache object
provides cache-specific features, such as dependencies and expiration policies.
(I)How can get access to cache object ?
The Cache object is defined in the System.Web.Caching namespace. You can get a reference
to the Cache object by using the Cache property of the HttpContext class in the
System.Web namespace or by using the Cache property of the Page object.
(A)What are dependencies in cache and types of dependencies ?
When you add an item to the cache, you can define dependency relationships that can
force that item to be removed from the cache under specific activities of dependenci
es.Example if the cache object is dependent on file and when the file data changes you
want the cache object to be update. Following are the supported dependency :-
√ File dependency :- Allows you to invalidate a specific cache item when a disk
based file or files change.
√ Time-based expiration :- Allows you to invalidate a specific cache item
depending on predefined time.
√ Key dependency :-Allows you to invalidate a specific cache item depending
when another cached item changes.
5. Caching Concepts
150
(P)Can you show a simple code showing file dependency in cache ?
Partial Class Default_aspx
Public Sub displayAnnouncement()
Dim announcement As String
If Cache(“announcement”) Is Nothing Then
Dim file As New _
System.IO.StreamReader _
(Server.MapPath(“announcement.txt”))
announcement = file.ReadToEnd
file.Close()
Dim depends As New _
System.Web.Caching.CacheDependency _
(Server.MapPath(“announcement.txt”))
Cache.Insert(“announcement”, announcement, depends)
End If
Response.Write(CType(Cache(“announcement”), String))
End Sub
Private Sub Page_Init(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Init
displayAnnouncement()
End Sub
End Class
Note :- Above source code can be obtained from CD in “CacheSample”
folder.”Announcement.txt” is in the same folder which you can play around to see the
results.
Above given method displayAnnouncement() displays banner text from Announcement.txt
file which is lying in application path of the web directory. Above method first checks
whether the Cache object is nothing, if the cache object is nothing then it moves further
to load the cache data from the file. Whenever the file data changes the cache object is
removed and set to nothing.
(A) What is Cache Callback in Cache ?
Cache object is dependent on its dependencies example file based, time based etc...Cache
items remove the object when cache dependencies change.ASP.NET provides capability
to execute a callback method when that item is removed from cache.
151
(A) What is scavenging ?
When server running your ASP.NET application runs low on memory resources, items
are removed from cache depending on cache item priority. Cache item priority is set when
you add item to cache. By setting the cache item priority controls the items scavenging
are removed first.
(B) What are different types of caching using cache object of ASP.NET?
You can use two types of output caching to cache information that is to be transmitted to
and displayed in a Web browser:
√ Page Output Caching
Page output caching adds the response of page to cache object. Later
when page is requested page is displayed from cache rather than
creating the page object and displaying it. Page output caching
is good if the site is fairly static.
√ Page Fragment Caching
If parts of the page are changing, you can wrap the static sections as user
controls and cache the user controls using page fragment caching.
(B) How can you cache different version of same page using ASP.NET
cache object ?
Output cache functionality is achieved by using “OutputCache” attribute on ASP.NET
page header. Below is the syntax
<%@ OutputCache Duration="20" Location="Server" VaryByParam="state"
VaryByCustom="minorversion" VaryByHeader="Accept-Language"%>
√ VaryByParam :- Caches different version depending on input parameters send
through HTTP POST/GET.
√ VaryByHeader:- Caches different version depending on the contents of the
page header.
152
√ VaryByCustom:-Lets you customize the way the cache handles page variations
by declaring the attribute and overriding the GetVaryByCustomString handler.
√ VaryByControl:-Caches different versions of a user control based on
the value of properties of ASP objects in the control.
(A) How will implement Page Fragment Caching ?
Page fragment caching involves the caching of a fragment of the page, rather than the
entire page. When portions of the page are need to be dynamically created for each user
request this is best method as compared to page caching. You can wrap Web Forms user
control and cache the control so that these portions of the page don’t need to be recreated
each time.
(B)Can you compare ASP.NET sessions with classic ASP?
ASP.NET session caches per user session state. It basically uses “HttpSessionState” class.
Following are the limitations in classic ASP sessions :-
√ ASP session state is dependent on IIS process very heavily. So if IIS restarts
ASP session variables are also recycled.ASP.NET session can be independent
of the hosting environment thus ASP.NET session can maintained even if IIS
reboots.
√ ASP session state has no inherent solution to work with Web Farms.ASP.NET
session can be stored in state server and SQL SERVER which can support
multiple server.
√ ASP session only functions when browser supports cookies.ASP.NET session
can be used with browser side cookies or independent of it.
(B) Which various modes of storing ASP.NET session ?
√ InProc:- In this mode Session state is stored in the memory space of the
Aspnet_wp.exe process. This is the default setting. If the IIS reboots or web
application restarts then session state is lost.
√ StateServer:-In this mode Session state is serialized and stored in a separate
process (Aspnet_state.exe); therefore, the state can be stored on a separate
computer(a state server).
153
√ SQL SERVER:- In this mode Session state is serialized and stored in a SQL
Server database.
Session state can be specified in <sessionState> element of application configuration
file. Using State Server and SQL SERVER session state can be shared across web farms
but note this comes at speed cost as ASP.NET needs to serialize and deserialize data over
network again and again.
(A) Is Session_End event supported in all session modes ?
Session_End event occurs only in “Inproc mode”.”State Server” and “SQL SERVER”
do not have Session_End event.
(A) What are the precautions you will take in order that StateServer Mode
work properly ?
Following are the things to remember so that StateServer Mode works properly :-
√ StateServer mode session data is stored in a different process so you must
ensure that your objects are serializable.
√ <machineKey> elements in Web.config should be identical across all
servers.So this ensures that encryption format is same across all computers.
√ IIS metabase (\LM\W3SVC\2) must be identical across all servers in that
farm.
(A) What are the precautions you will take in order that SQLSERVER
Mode work properly ?
Following are the things to remember so that SQLSERVER Mode works properly :-
√ SQLSERVER mode session data is stored in a different process so you must
ensure that your objects are serializable.
√ IIS metabase (\LM\W3SVC\2) must be identical across all servers in that
farm.
√ By default Session objects are stored in “Tempdb”, you can configure it store
outside “TempDB” by running Microsoft provided SQL script.
154
Note :- “TempDB” database is re-created after SQL SERVER computer reboot.If you
want to maintain session state with every reboot best is to run SQL Script and store session
objects outside “TempDB” database.
(A) Where do you specify session state mode in ASP.NET ?
<sessionState mode=”SQLServer”
stateConnectionString=”tcpip=192.168.1.1:42424"
sqlConnectionString=”data source=192.168.1.1; Integrated
Security=SSPI”
cookieless=”false”
timeout=”20"
/>
Above is sample session state mode specified for SQL SERVER.
(B) What are the other ways you can maintain state ?
Other than session variables you can use the following technique to store state :
√ Hidden fields
√ View state
√ Hidden frames
√ Cookies
√ Query strings
(B) What are benefits and Limitation of using Hidden fields ?
Following are the benefits of using Hidden fields :-
√ They are simple to implement.
√ As data is cached on client side they work with Web Farms.
√ All browsers support hidden field.
√ No server resources are required.
Following are limitations of Hidden field :-
√ They can be tampered creating a security hole.
155
√ Page performance decreases if you store large data, as the data are stored in
pages itself.
√ Hidden fields do not support rich structures as HTML hidden fields are only
single valued. Then you have to work around with delimiters etc to handle
complex structures.
Below is how you will actually implement hidden field in a project
<input id="HiddenValue" type="hidden" value="Initial Value"
runat="server"NAME="HiddenValue">
(B) What is ViewState ?
Viewstate is a built-in structure for automatically retaining values amongst the multiple
requests for the same page. The viewstate is internally maintained as a hidden field on the
page but is hashed, providing greater security than developer-implemented hidden fields
do.
(A) Does the performance for viewstate vary according to User controls
?
Performance of viewstate varies depending on the type of server control to which it is
applied. Label, TextBox, CheckBox, RadioButton, and HyperLink are server controls
that perform well with ViewState. DropDownList, ListBox, DataGrid, and DataList suffer
from poor performance because of their size and the large amounts of data making
roundtrips to the server.
(B) What are benefits and Limitation of using Viewstate for state
management?
Following are the benefits of using Viewstate :-
√ No server resources are required because state is in a structure in
the page code.
√ Simplicity.
√ States are retained automatically.
√ The values in view state are hashed, compressed, and encoded, thus representing
a higher state of security than hidden fields.
√ View state is good for caching data in Web frame configurations because the
data is cached on the client.
Following are limitation of using Viewstate:-
√ Page loading and posting performance decreases when large values are
stored because view state is stored in the page.
√ Although view state stores data in a hashed format, it can still be tampered
because it is stored in a hidden field on the page. The information in the
hidden field can also be seen if the page output source is viewed directly,
creating a potential security risk.
Below is sample of storing values in view state.
this.ViewState["EnterTime"] = DateTime.Now.ToString();
(B) How can you use Hidden frames to cache client data ?
This technique is implemented by creating a Hidden frame in page which will contain
your data to be cached.
<FRAMESET cols="100%,*,*">
<FRAMESET rows="100%">
<FRAME src="data_of_frame1.html"></FRAMESET>
<FRAME src="data_of_hidden_frame.html">
<FRAME src="data_of_hidden_frame.html" frameborder="0" noresize
scrolling="yes">
</FRAMESET>
Above is a sample of hidden frames where the first frame “data_of_frame1.html” is visible
and the remaining frames are hidden by giving whole col section to first frame. See allocation
where 100 % is allocated to first frame and remaining frames thus remain hidden.
(I) What are benefits and limitations of using Hidden frames?
Following are the benefits of using hidden frames:
√ You can cache more than one data field.
√ The ability to cache and access data items stored in different hidden forms.
√ The ability to access JScript® variable values stored in different frames if they
come from the same site.
The limitations of using hidden frames are:
√ Hidden frames are not supported on all browsers.
√ Hidden frames data can be tampered thus creating security hole.
(I) What are benefits and limitations of using Cookies?
Following are benefits of using cookies for state management :-
√ No server resources are required as they are stored in client.
√ They are light weight and simple to use
Following are limitation of using cookies :-
√ Most browsers place a 4096-byte limit on the size of a cookie, although support
for 8192-byte cookies is becoming more common in the new browser and
client-device versions available today.
√ Some users disable their browser or client device’s ability to receive cookies,
thereby limiting the use of cookies.
√ Cookies can be tampered and thus creating a security hole.
√ Cookies can expire thus leading to inconsistency.
Below is sample code of implementing cookies
Request.Cookies.Add(New HttpCookie(“name”, “user1”))
(I) What is Query String and What are benefits and limitations of using
Query Strings?
A query string is information sent to the server appended to the end of a page URL.
Following are the benefits of using query string for state management:-
158
√ No server resources are required. The query string containing in the HTTP
requests for a specific URL.
√ All browsers support query strings.
Following are limitations of query string :-
√ Query string data is directly visible to user thus leading to security problems.-
√ Most browsers and client devices impose a 255-character limit on URL length.
Below is a sample “Login” query string passed in URL http://www.querystring.com/
login.asp?login=testing. This query string data can then be requested later by using
Request.QueryString(“login”).
(I) What is Absolute and Sliding expiration?
Absolute Expiration allows you to specify the duration of the cache, starting from the
time the cache is activated. The following example shows that the cache has a cache
dependency specified, as well as an expiration time of one minute.
Cache.Insert("announcement", announcement, depends, _
DateTime.Now.AddMinutes(1), Nothing)
Sliding Expiration specifies that the cache will expire if a request is not made within a
specified duration. Sliding expiration policy is useful whenever you have a large number
of items that need to be cached, because this policy enables you to keep only the most
frequently accessed items in memory. For example, the following code specifies that the
cache will have a sliding duration of one minute. If a request is made 59 seconds after the
cache is accessed, the validity of the cache would be reset to another minute:
Cache.Insert("announcement", announcement, depends, _
DateTime.MaxValue, _
TimeSpan.FromMinutes(1))
(I)What is cross page posting?
159
Note :- This is a new feature in ASP.NET 2.0
By default, button controls in ASP.NET pages post back to the same page that contains
the button, where you can write an event handler for the post. In most cases this is the
desired behavior, but occasionaly you will also want to be able to post to another page in
your application. The Server.Transfer method can be used to move between pages, however
the URL doesn't change. Instead, the cross page posting feature in ASP.NET 2.0 allows
you to fire a normal post back to a different page in the application. In the target page,
you can then access the values of server controls in the source page that initiated the post
back.
To use cross page posting, you can set the PostBackUrl property of a Button, LinkButton
or ImageButton control, which specifies the target page. In the target page, you can then
access the PreviousPage property to retrieve values from the source page. By default, the
PreviousPage property is of type Page, so you must access controls using the FindControl
method. You can also enable strongly-typed access to the source page by setting the
@PreviousPageType directive in the target page to the virtual path or Type name of the
source page.
Here is a step-by-step guide for implementing the cross-page post back using controls
that implement the IButtonControl interface.
√ Create a Web Form and insert a Button control on it using the VS .NET designer.
√ Set the button's PostBackUrl property to the Web Form you want to post back. For
instance in this case it is "nextpage.aspx"
<asp:Button ID="Button1" runat="server"
PostBackUrl="~/nextpage.aspx" Text="Post to nextpage" />
When the PostBackUrl property of the IButtonControl is set, the ASP.NET framework
binds the corresponding HTML element to new JavaScript function named
WebForm_DoPostBackWithOptions. The corresponding HTML rendered by the ASP.NET
2.0 will look like this:
<input type="submit" name="Button1" value="Post to Page 2"
onclick="javascript:WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions("Button1", ",false”,"Page2.aspx", false, false))"
id="Button1" />
160
How do we access viewstate value of this page in the next page ?
View state is page specific; it contains information about controls embedded on the
particular page. ASP.NET 2.0 resolves this by embedding a hidden input field name,
__POSTBACK . This field is embedded only when there is an IButtonControl on the
page and its PostBackUrl property is set to a non-null value. This field contains the view
state information of the poster page. To access the view state of the poster page, you can
use the new PreviousPage property of the page:
Page poster = this.PreviousPage;
Then you can find any control from the previous page and read its state:
Label posterLabel = poster.findControl("myLabel");
string lbl = posterLabel.Text;
This cross-page post back feature also solves the problem of posting a Form to multiple
pages, because each control, in theory, can point to different post back URL.
Can we post and access view state in another application?
You can post back to any page and pages in another application, too. But if you are
posting pages to another application, the PreviousPage property will return null. This is a
significant restriction, as it means that if you want to use the view state, you are confined,
for example, posting to pages in the same virtual directory. Even so, this is a highly
acceptable addition to the functionality of ASP.NET.
What is SQL Cache Dependency in ASP.NET 2.0?
SQL cache dependencies is a new feature in ASP.NET 2.0 which can automatically
invalidate a cached data object (such as a Dataset) when the related data is modified in
the database. So for instance if you have a dataset which is tied up to a database tables
any changes in the database table will invalidate the cached data object which can be a
dataset or a data source.
How do we enable SQL Cache Dependency in ASP.NET 2.0?
Below are the broader steps to enable a SQL Cache Dependency:-
161
• Enable notifications for the database.
• Enable notifications for individual tables.
• Enable ASP.NET polling using “web.config” file
• Finally use the Cache dependency object in your ASP.NET code
Enable notifications for the database.
Before you can use SQL Server cache invalidation, you need to enable notifications for
the database. This task is performed with the aspnet_regsql.exe command-line utility,
which is located in the c:\[WinDir]\Microsoft.NET\Framework\[Version] directory.
aspnet_regsql -ed -E -d Northwind
-ed :- command-line switch
-E: - Use trusted connection
-S: - Specify server name it other than the current computer you are working on
-d: - Database Name
So now let’s try to understand what happens in the database because of
“aspnet_regsql.exe”. After we execute the “aspnet_regsql -ed -E -d Northwind” command
you will see one new table and four new stored procedures created.
Figure 5.1 : - SQL Cache table created for notification
Essentially, when a change takes place, a record is written in this table. The SQL Server
polling queries this table for changes.
162
Figure 5.2 : - New stored procedures created
Just to make brief run of what the stored procedures do.
“AspNet_SqlCacheRegisterTableStoredProcedure” :- This stored procedure sets a table
to support notifications. This process works by adding a notification trigger to the table,
which will fire when any row is inserted, deleted, or updated.
“AspNet_SqlCacheUnRegisterTableStoredProcedure”:- This stored procedure takes a
registered table and removes the notification trigger so that notifications won't be generated.
“AspNet_SqlCacheUpdateChangeIdStoredProcedure”:- The notification trigger calls this
stored procedure to update the AspNet_SqlCacheTablesForChangeNotification table,
thereby indicating that the table has changed.
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure :- This extracts just the table
names from the AspNet_SqlCacheTablesForChangeNotification table. It’s used to get a
quick look at all the registered tables.
163
AspNet_SqlCachePollingStoredProcedure :- This will get the list of changes from the
AspNet_SqlCacheTablesForChangeNotification table. It is used to perform polling.
Enabling notification for individual tables
Once the necessary stored procedure and tables are created then we have to notify saying
which table needs to be enabled for notifications.
That can be achieved by two ways:-
√ aspnet_regsql -et -E -d Northwind -t Products
√ Exec spNet_SqlCacheRegisterTableStoredProcedure 'TableName'
Registering tables for notification internally creates triggerfor the tables. For instance for
a “products” table the following trigger is created. So any modifications done to the
“Products” table will update the “AspNet_SqlCacheNotification’ table.
CREATE TRIGGER
dbo.[Products_AspNet_SqlCacheNotification_Trigger] ON
[Products]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
SET NOCOUNT ON
EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure
N'Products‘
END
“AspNet_SqlCacheTablesForChangeNotification” contains a single record for every table
you're monitoring. When you make a change in the table (such as inserting, deleting or
updating a record), the change Id column is incremented by 1.ASP.NET queries this table
repeatedly keeps track of the most recent changed values for every table. When this
value changes in a subsequent read, ASP.NET knows that the table has changed.
164
Figure 5.3 : - Entries in the Cache notification table
Enable ASP.NET polling using “web.config” file
Now that all our database side is configured in order to get the SQL Cache working in the
ASP.NET side we need to do some configuration in the web.config file.
We need to set two attributes in the “web.config” file:-
√ Set “Enabled” attribute to true to set the caching on.
√ Set the poll time attribute to the number of milliseconds between each poll
Below is the snapshot of the web.config file.
Figure 5.4 :- Web.config file modifications for SQL cache
165
Finally use the Cache dependency object in your ASP.NET code
Now comes the final step to use our cache dependency with programmatic data caching,
a data source control, and output caching.
For programmatic data caching, we need to create a new SqlCacheDependency and supply
that to the Cache.Insert() method. In the SqlCacheDependency constructor, you supply
two strings. The first is the name of the database you defined in the element in the section
of the web.config file e.g: Northwind. The second is the name of the linked table e.g:
Products.
private static void CacheProductsList(List<ClsProductItem> products)
{SqlCacheDependency sqlDependency = new SqlCacheDependency("Northwind",
"Products");
HttpContext.Current.Cache.Insert("ProductsList", products, sqlDependency,
DateTime.Now.AddDays(1), Cache.NoSlidingExpiration);}
private static List<ClsProductItem> GetCachedProductList()
{return HttpContext.Current.Cache["ProductsList"] as List<ClsProductItem>;}
ClsProductItem is business class, and here we are trying to cache a list of ClsProductItem
instead of DataSet or DataTable.
The following method is used by an ObjectDataSource Control to retrieve List of Products
public static List<ClsProductItem> GetProductsList(int catId, string sortBy)
{
//Try to Get Products List from the Cache
List<ClsProductItem> products = GetCachedProductList();
if (products == null)
{
//Products List not in the cache, so query the Database layer
ClsProductsDB db = new ClsProductsDB(_connectionString);
DbDataReader reader = null;
products = new List<ClsProductItem>(80);
166
if (catId > 0)
{
//Return Product List from the Data Layer
reader = db.GetProductsList(catId);
}
else
{
//Return Product List from the Data Layer
reader = db.GetProductsList();
}
//Create List of Products -List if ClsProductItemproducts
= BuildProductsList(reader);
reader.Close();
//Add entry to products list in the Cache
CacheProductsList(products);
}
products.Sort(new ClsProductItemComparer(sortBy));
if (sortBy.Contains("DESC")) products.Reverse();
return products;
}
167
To perform the same trick with output caching, you simply need to set the SqlDependency
property with the database dependency name and the table name, separated by a colon:
<%@ OutputCache Duration="600" SqlDependency="Northwind:Products"
VaryByParam="none" %>
The same technique works with the SqlDataSource and ObjectDataSource controls:
<asp:SqlDataSource EnableCaching="True"
SqlCacheDependency="Northwind:Products" ... />
Note :- ObjectDataSource doesn't support built in caching for Custom types such as the one
in our example. It only supports this feature for DataSets and DataTables.
Just to make a sample check run the SQL Server profiler and see that does the SQL
actually hit the database after the first run.
What is Post Cache substitution?
Post cache substitution is used when we want to cache the whole page but also need
some dynamic region inside that cached page. Some examples like QuoteoftheDay,
RandomPhotos, and AdRotator etc. are examples where we can implement Post Cache
Substitution.
Post-cache substitution can be achieved by two means:
√ Call the new Response.WriteSubstitution method, passing it a reference to the desired
substitution method callback.
√ Add a <asp:Substitution> control to the page at the desired location, and set its
methodName attribute to the name of the callback method.
168
Figure 5.5 : - “Writesubstitution” in action
You can see we have a static function here “GetDateToString()”. We pass the response
substitution callback to the “WriteSubstitution” method. So now when ASP.NET page
framework retrieves the cached page, it automatically triggers your callback method to
get the dynamic content. It then inserts your content into the cached HTML of the page.
Even if your page hasn't been cached yet (for example, it's being rendered for the first
time), ASP.NET still calls your callback in the same way to get the dynamic content. So
you create a method that generates some dynamic content, and by doing so you guarantee
that your method is always called, and it’s content is never cached.
Ok the above example was by using “WriteSubstitution” now lets try to see how we can
do by using “<asp:substitution>” control. You can get the “<asp:substitution>” control
from the editor toolbox.
169
Figure 5.6 : - Substitution Control
Figure 5.7 : - Substitution in Action.
170
Below is a sample code which shows how substitution control works. We have ASPX
code at the right hand side and class code at the behind code at the left hand side. We
need to provide the method name in the “methodname” attribute of the substitution
control.
Why do we need methods to be static for Post Cache substitution?
ASP.NET should be able to call this method even when there isn't an instance of your
page class available. When your page is served from the cache, the page object isn't
created. So ASP.NET skips the page life cycle when the page is coming from cache,
which means it won't create any control objects or raise any control events. If your dynamic
content depends on the values of other controls, you'll need to use a different technique,
because these control objects won't be available to your callback
171
(B) What is Object Oriented Programming ?
It is a problem solving technique to develop software systems. It is a technique to think
real world in terms of objects. Object maps the software model to real world concept.
These objects have responsibilities and provide services to application or other objects.
(B) What’s a Class ?
A class describes all the attributes of objects, as well as the methods that implement the
behavior of member objects. It’s a comprehensive data type which represents a blue print
of objects. It’s a template of object.
(B) What’s an Object ?
It is a basic unit of a system. An object is an entity that has attributes, behavior, and
identity. Objects are members of a class. Attributes and behavior of an object are defined
by the class definition.
(A) What is the relation between Classes and Objects ?
They look very much same but are not same. Class is a definition, while object is a
instance of the class created. Class is a blue print while objects are actual objects existing
in real world. Example we have class CAR which has attributes and methods like Speed,
Brakes, Type of Car etc. Class CAR is just a prototype, now we can create real time
objects which can be used to provide functionality. Example we can create a Maruti car
object with 100 km speed and urgent brakes.
(B) What are different properties provided by Objectoriented
systems ?
Twist :- Can you explain different properties of Object Oriented Systems?
Note:- Difference between abstraction and encapsulation is one of the favorite interview
question and quiet confusing as both the terminology look alike. Best is if you can
brainstorm with your friends or do a little reading.
Following are characteristic’s of Object Oriented System’s :-
6. OOPS
172
Abstraction
It allows complex real world to be represented in simplified manner. Example color is
abstracted to RGB. By just making the combination of these three colors we can achieve
any color in world.It’s a model of real world or concept.
Encapsulation
It is a process of hiding all the internal details of an object from the outside world.
Communication using messages
When application wants to achieve certain task it can only be done using combination of
objects. A single object can not do all the task. Example if we want to make order processing
form.We will use Customer object, Order object, Product object and Payment object to
achieve this functionality. In short these objects should communicate with each other.
This is achieved when objects send messages to each other.
Object lifetime
All objects have life time.Objects are created ,and initialized, necessary functionalities
are done and later the object is destroyed. Every object have there own state and identity
which differ from instance to instance.
Class hierarchies (Inheritance and aggregation)
Twist :- What is difference between Association, Aggregation and Inheritance relationships?
In object oriented world objects have relation and hierarchies in between them. There are
basically three kind of relationship in Object Oriented world :-
Association
This is the simplest relationship between objects. Example every customer has sales. So
Customer object and sales object have an association relation between them.
Aggregation
This is also called as composition model. Example in order to make a “Accounts” class it
has use other objects example “Voucher”, “Journal” and “Cash” objects. So accounts
class is aggregation of these three objects.
173
Inheritance
Hierarchy is used to define more specialized classes based on a preexisting generalized
class. Example we have VEHICLE class and we can inherit this class make more
specialized class like CAR, which will add new attributes and use some existing qualities
of the parent class. Its shows more of a parent-child relationship. This kind of hierarchy
is called inheritance.
Polymorphism
When inheritance is used to extend a generalized class to a more specialized class, it
includes behavior of the top class(Generalized class). The inheriting class often implement
a behavior that can be somewhat different than the generalized class, but the name of the
behavior can be same. It is important that a given instance of an object use the correct
behavior, and the property of polymorphism allows this to happen automatically.
(B) How can we acheive inheritance in VB.NET ?
Note:- The following explanation is for VB.NET
Inheritance is achieved by using “Inherits” keyword in VB.NET (For C# it is “:”). Simple
Sample is provided in CD for understanding inheritance in folder
“WindowsApplicationInheritance”. There are two classes one is the parent “ClsParent”
and second is the child “ClsChild”. Parent class has a string which has to parsed for junk
data “@” and “/”.ClsParent has the functionality which parses only cleans up
“@”.”ClsChild” then inherits from parent and adds extra functionality by parsing “/”.
Public Class ClsParent
Protected strData As String = “jksdhkj@dadad///ajkdhsjakd”
Public Function Parse() As String
Dim PstrData As String
PstrData = strData
PstrData = Replace(PstrData, “@”, “”)
Return PstrData
End Function
Public Function GetActualString() As String
Return strData
End Function
End Class
Above is the source which parses only “@” of strData variable.
174
Public Class ClsChild
Inherits ClsParent
‘ this is child and a special parse function is added which will
also parse “/”
Public Function ParseBackSlash()
Dim PstrData As String
PstrData = Me.Parse()
PstrData = Replace(PstrData, “/”, “”)
Return PstrData
End Function
End Class
Above is the source code for “ClsChild” which does the remaining work. It adds extra
functionality by parsing “/” junk character’s of the data.
Note:- Strdata was accessible only because it was defined as protected in the parent class.
Figure :- 6.1 Inheritance in action
(I) What are abstract classes ?
Following are features of a abstract class :-
√ You can not create a object of abstract class
175
√ Abstract class is designed to act as a base class (to be inherited by other classes).
Abstract class is a design concept in program development and provides a
base upon which other classes are built.
√ Abstract classes are similar to interfaces. After declaring an abstract class, it
cannot be instantiated on its own, it must be inherited.
√ In VB.NET abstract classes are created using “MustInherit” keyword.In C#
we have “Abstract” keyword.
√ Abstract classes can have implementation or pure abstract methods which
should be implemented in the child class.
Note:- In order to understand the concept simple sample of add and multiply functionality
is implemented in “WindowsAbstract” folder in CD.
From interview point of view just saying using “MustInherit” keyword is more than enough
to convince that you have used abstract classes. But to clear simple fundamental let’s try
to understand the sample code. There are two classes one is “ClsAbstract” class and
other is “ClsChild” class. “ClsAbstract” class is a abstract class as you can see the
mustinherit keyword. It has one implemented method “Add” and other is abstract method
which has to be implemented by child class “MultiplyNumber”. In the child class we
inherit the abstract class and implement the multiplynumber function.
Definitely this sample does not take out actually how things are implemented in live
projects. Basically you put all your common functionalities or half implemented
functionality in parent abstract class and later let child class define the full functionality
of the abstract class. Example i always use abstract class with all my SET GET properties
of object in abstract class and later make specialize classes for insert, update, delete for
the corresponding entity object.
Public MustInherit Class ClsAbstract
‘ use the mustinherit class to declare the class as abstract
Public Function Add(ByVal intnum1 As Integer, ByVal intnum2 As
Integer) As Integer
Return intnum1 + intnum2
End Function
‘ left this seconf function to be completed by the inheriting
class
Public MustOverride Function MultiplyNumber(ByVal intnum1 As
Integer, ByVal intnum2 As Integer) As Integer
End Class
176
Public Class ClsChild
Inherits ClsAbstract
‘ class child overrides the Multiplynumber function
Public Overrides Function MultiplyNumber(ByVal intnum1 As
Integer, ByVal intnum2 As Integer) As Integer
Return intnum1 * intnum2
End Function
End Class
Figure :- 6.2 Abstract classes in action
My attitude towards abstract class has been that i put all my common functionality in
abstract class.
(B) What is a Interface ?
Interface is a contract that defines the signature of the functionality. So if a class is
implementing a interface it says to the outer world, that it provides specific behavior.
Example if a class is implementing Idisposable interface that means it has a functionality
to release unmanaged resources. Now external objects using this class know that it has
contract by which it can dispose unused unmanaged objects.
√ Single Class can implement multiple interfaces.
√ If a class implements a interface then it has to provide implementation to all
its methods.
177
Note:- In CD sample “WindowsInterFace” is provided, which has a simple interface
implemented.
In sample there are two files.One has the interface definition and other class implements
the interface. Below is the source code “IInterface” is the interface and “ClsDosomething”
implements the “IInterface”. This sample just displays a simple message box.
Public Interface IInterFace
Sub DoSomething()
End Interface
Public Class ClsDoSomething
Implements IInterFace
Public Sub DoSomething() Implements
WindowsInterFace.IInterFace.DoSomething
MsgBox(“Interface implemented”)
End Sub
End Class
Figure:- 6.3 Interface in action
178
(A) What is difference between abstract classes and
interfaces?
Following are the differences between abstract and interfaces :-
√ Abstract classes can have concrete methods while interfaces have no methods
implemented.
√ Interfaces do not come in inheriting chain, while abstract classes come in
inheritance.
(B) What is a delegate ?
Delegate is a class that can hold a reference to a method or a function. Delegate class has
a signature and it can only reference those methods whose signature is compliant with the
class. Delegates are type-safe functions pointers or callbacks.
Below is a sample code which shows a example of how to implement delegates.
Public Class FrmDelegates
Inherits System.Windows.Forms.Form
Public Delegate Sub DelegateAddString()
Private Sub FrmDelegates_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub AddString()
lstDelegates.Items.Add(“Running AddString() method”)
End Sub
Private Sub cmdDelegates_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles cmdDelegates. Click
Dim objDelegateAddString As DelegateAddString
objDelegateAddString = AddressOf AddString
objDelegateAddString.Invoke()
End Sub
End Class
In the above there is a method called “AddString()” which adds a string to a listbox.You
can also see a delegate declared as :-
Public Delegate Sub DelegateAddString()
This delegate signature is compatible with the “AddString” method. When I mean
compatibility that means that there return types and passing parameter types are same.
179
Later in command click of the button object of the Delegate is created and the method
pointer is received from “AddressOf ” keyword. Then by using the “Invoke” method the
method is invoked.
Figure :- 6.4 Delegate in Action
(B) What are events ?
As compared to delegates events works with source and listener methodology. So listeners
who are interested in receiving some events they subscribe to the source. Once this
subscription is done the source raises events to its entire listener when needed. One
source can have multiple listeners.
In sample given below class “ClsWithEvents” is a event source class, which has a event
“EventAddString()”. Now the listeners who are interested in receiving this events they
can subscribe to this event. In class “FrmWithEvents” you can see they handle clause
which is associated with the “mobjClsWithEvents” objects.
Public Class ClsWithEvents
Event EventAddString(ByVal Value As String)
Public Sub AddString()
RaiseEvent EventAddString(“String added by Event”)
End Sub
End Class
180
Public Class FrmWithEvents
Inherits System.Windows.Forms.Form
Private WithEvents mobjClsWithEvents As New ClsWithEvents()
Private Sub FrmWithEvents_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub mobjClsWithEvents_EventAddString(ByVal Value As
String) Handles mobjClsWithEvents.EventAddString
LstData.Items.Add(Value)
End Sub
Private Sub CmdRunEvents_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles CmdRunEvents.Click
mobjClsWithEvents.AddString()
End Sub
End Class
Figure :- 6.5 Events in action
Nore:- Above source code is provided in “WindowsEvent”
181
(I) Do events have return type ?
No, events do not have return type.
(A) Can event’s have access modifiers ?
Event’s are always public as they are meant to serve every one register ing to it. But you
can access modifiers in events.You can have events with protected keyword which will
be accessible only to inherited classes.You can have private events only for object in that
class.
(A) Can we have shared events ?
Yes, you can have shared event’s note only shared methods can raise shared events.
(I) What is shadowing ?
When two elements in a program have same name, one of them can hide and shadow the
other one. So in such cases the element which shadowed the main element is referenced.
Below is a sample code, there are two classes “ClsParent” and “ClsShadowedParent”. In
“ClsParent” there is a variable “x” which is a integer. “ClsShadowedParent” overrides
“ClsParent” and shadows the “x” variable to a string.
Note:- In Sample CD “WindowsShadowing” is folder which has the sample code. If you
run the program you can have two output’s one which shows a integer and other which shows
a string.
Public Class ClsParent
Public x As Integer
End Class
Public Class ClsShadowedParent
Inherits ClsParent
Public Shadows x As String
End Class
182
Figure :- 6.6 Shadowing in Action
(A) What is the difference between Shadowing and
Overriding ?
Following are the differences between shadowing and overriding :-
√ Overriding redefines only the implementation while shadowing redefines the
whole element.
√ In overriding derived classes can refer the parent class element by using “ME”
keyword, but in shadowing you can access it by “MYBASE”.
(I) What is the difference between delegate and events?
√ Actually events use delegates in bottom. But they add an extra layer on the
delegates, thus forming the publisher and subscriber model.
√ As delegates are function to pointers they can move across any clients. So any
of the clients can add or remove events, which can be pretty confusing. But
events give the extra protection by adding the layer and making it a publisher
and subscriber model.
183
Just imagine one of your clients doing this
c.XyzCallback = null
This will reset all your delegates to nothing and you have to keep searching where the
error is.
(B) If we inherit a class do the private variables also get
inherited ?
Yes, the variables are inherited but can not be accessed directly by the class interface.
(B) What are the different accessibility levels defined in .NET
?
Following are the five levels of access modifiers :-
√ Private : Only members of class have access.
√ Protected :-All members in current class and in derived classes can access the
variables.
√ Friend (internal in C#) :- Only members in current project have access to the
elements.
√ Protected friend (protected internal in C#) :- All members in current project
and all members in derived class can access the variables.
√ Public :- All members have access in all classes and projects.
(I) Can you prevent a class from overriding ?
If you define a class as “Sealed” in C# and “NotInheritable” in VB.NET you can not
inherit the class any further.
(I) What is the use of “MustInherit” keyword in VB.NET ?
If you want to create a abstract class in VB.NET it’s done by using “MustInherit”
keyword.You can not create an object of a class which is marked as “MustInherit”. When
you define “MustInherit” keyword for class you can only use the class by inheriting.
184
Note :- There was huge typo in my previous versions for the above two questions. I hope
some one has not lost good oppurtunity because of the same. Thanks to all my readers for
pointing it out.
(I) Do interface have accessibility modifier?
All elements in Interface should be public. So by default all interface elements are public
by default.
(A) What are similarities between Class and structure ?
Following are the similarities between classes and structures :-
√ Both can have constructors, methods, properties, fields, constants,
enumerations, events, and event handlers.
√ Structures and classes can implement interface.
√ Both of them can have constructors with and without parameter.
√ Both can have delegates and events.
(A) What is the difference between Class and structure’s ?
Following are the key differences between them :-
√ Structure are value types and classes are reference types. So structures use
stack and classes use heap.
√ Structures members can not be declared as protected, but class members can
be. You can not do inheritance in structures.
√ Structures do not require constructors while classes require.
√ Objects created from classes are terminated using Garbage collector. Structures
are not destroyed using GC.
(B) What does virtual keyword mean ?
They signify that method and property can be overridden.
(B) What are shared (VB.NET)/Static(C#) variables?
185
Static/Shared classes are used when a class provides functionality which is not specific to
any instance. In short if you want an object to be shared between multiple instances you
will use a static/Shared class.
Following are features of Static/Shared classes :-
√ They can not be instantiated. By default a object is created on the first method
call to that object.
√ Static/Shared classes can not be inherited.
√ Static/Shared classes can have only static members.
√ Static/Shared classes can have only static constructor.
Note :- In CD there is a folder “WindowsShared” which has a sample code for shared
variables.Below is a snippet. It has a “AddCount” function which increments a static
“intCount” variable. In form there are two buttons which creates a new object and displays
the count of the static variable. Even though the object is created and destroyed, the variable
values does not change. It retains its old value.
Public Class ClsShared
Shared intCount As Integer
Public Function AddCount() As Integer
intCount = intCount + 1
Return intCount
End Function
End Class
Public Class FrmSharedClasses
Inherits System.Windows.Forms.Form
Private Sub CmdInstance1_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles CmdInstance1.Click
Dim pobjClsShared As New ClsShared()
MessageBox.Show(“The count at this moment is” &
pobjClsShared.AddCount.ToString())
End Sub
Private Sub CmdInstance2_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles CmdInstance2.Click
Dim pobjClsShared As New ClsShared()
MessageBox.Show(“The count at this moment is” &
pobjClsShared.AddCount.ToString())
186
End Sub
End Class
Figure :- 6.7 Shared/Static In Action
(B) What is Dispose method in .NET ?
.NET provides “Finalize” method in which we can clean up our resources. But relying on
this is not always good so the best is to implement “Idisposable” interface and implement
the “Dispose” method where you can put your clean up routines.
(B) What is the use of “OverRides” and “Overridable”
keywords ?
Overridable is used in parent class to indicate that a method can be overridden. Overrides
is used in the child class to indicate that you are overriding a method
(A) Where are all .NET Collection classes located ?
187
System.Collection namespace has all the collection classes available in .NET.
(A) What is ArrayList ?
Array is whose size can increase and decrease dynamically. Array list can hold item of
different types. As Array list can increase and decrease size dynamically you do not have
to use the REDIM keyword. You can access any item in array using the INDEX value of
the array position.
(A) What’s a HashTable ?
Twist :- What’s difference between HashTable and ArrayList ?
You can access array using INDEX value of array, but how many times you know the
real value of index. Hashtable provides way of accessing the index using a user identified
KEY value, thus removing the INDEX problem.
(A) What are queues and stacks ?
Queue is for first-in, first-out (FIFO) structures. Stack is for last-in, first-out (LIFO)
structures.
(B) What is ENUM ?
It’s used to define constants.
(A) What is nested Classes ?
Nested classes are classes within classes. In sample below “ClsNested” class has a
“ChildNested” class nested inside it.
Public Class ClsNested
Public Class ChildNested
Public Sub ShowMessage()
MessageBox.Show(“Hi this is nested class”)
End Sub
End Class
End Class
This is the way we can instantiate the nested class and make the method call.
Dim pobjChildNested As New ClsNested.ChildNested()
pobjChildNested.ShowMessage()
188
Note:-In CD the above sample is provided in “WindowsNestedClasses”.
(B)What is Operator Overloading in .NET?
It provides a way to define and use operators such as +, -, and / for user-defined classes
or structs. It allows us to define/redefine the way operators work with our classes and
structs. This allows programmers to make their custom types look and feel like simple
types such as int and string.
VB.NET till now does not support operator overloading. Operator overloading is done
by using the “Operator” keyword.
Note:- Operator overloading is supported in VB.NET 2005
(I) In below sample code if we create a object of class2
which constructor will fire first ?
Public Class Class1
Sub New()
End Sub
End Class
Public Class class2
Inherits Class1
Sub New()
End Sub
End Class
* I leave this to the readers......
(B)What is the significance of Finalize method in .NET?
.NET Garbage collector does almost all clean up activity for your objects. But unmanaged
resources (ex: - Windows API created objects, File, Database connection objects, COM
objects etc) is outside the scope of .NET framework we have to explicitly clean our
resources. For these types of objects .NET framework provides Object. Finalize method
189
which can be overridden and clean up code for unmanaged resources can be put in this
section.
(A)Why is it preferred to not use finalize for clean up?
Problem with finalize is that garbage collection has to make two rounds in order to remove
objects which have finalize methods.
Below figure will make things clear regarding the two rounds of garbage collection rounds
performed for the objects having finalized methods.
In this scenario there are three objects Object1, Object2 and Object3. Object2 has the
finalize method overridden and remaining objects do not have the finalize method
overridden.
Now when garbage collector runs for the first time it searches for objects whose memory
has to free. He can see three objects but only cleans the memory for Object1 and Object3.
Object2 it pushes to the finalization queue.
Now garbage collector runs for the second time. He see’s there are no objects to be
released and then checks for the finalization queue and at this moment it clears object2
from the memory.
So if you notice that object2 was released from memory in the second round and not first.
That’s why the best practice is not to write clean up Non.NET resources in Finalize
method rather use the DISPOSE.
190
Figure :- 6.8 Garbage collection in actions
(I)How can we suppress a finalize method?
GC.SuppressFinalize ()
(B)What is the use of DISPOSE method?
Dispose method belongs to IDisposable interface. We had seen in the previous section
how bad it can be to override the finalize method for writing the cleaning of unmanaged
resources. So if any object wants to release its unmanaged code best is to implement
191
IDisposable and override the Dispose method of IDisposable interface. Now once your
class has exposed the Dispose method it’s the responsibility of the client to call the
Dispose method to do the cleanup.
(A)How do I force the Dispose method to be called
automatically, as clients can forget to call Dispose method?
Note :- I admire this question.
Call the Dispose method in Finalize method and in Dispose method suppress the finalize
method using GC.SuppressFinalize. Below is the sample code of the pattern. This is the
best way we do clean our unallocated resources and yes not to forget we do not get the hit
of running the Garbage collector twice.
Note:- It will suppress the finalize method thus avoiding the two trip.
Public Class ClsTesting
Implements IDisposable
Public Overloads Sub Dispose()Implements IDisposable.Dispose
' write ytour clean up code here
GC.SuppressFinalize(Me)
End Sub
Protected Overrides Sub Finalize()
Dispose()
End Sub
End Class
(I)In what instances you will declare a constructor to be
private?
When we create a private constructor, we can not create object of the class directly from
a client. So you will use private constructors when you do not want instances of the class
to be created by any external client. Example UTILITY functions in project will have no
192
instance and be used with out creating instance, as creating instances of the class would
be waste of memory.
(I)Can we have different access modifiers on get/set
methods of a property ?
No we can not have different modifiers same property. The access modifier on a property
applies to both its get and set accessors.
(I)If we write a goto or a return statement in try and catch
block will the finally block execute ?
The code in then finally always run even if there are statements like goto or a return
statements.
(A)What is Indexer ?
An indexer is a member that enables an object to be indexed in the same way as an array.
(A)Can we have static indexer in C# ?
No.
(A)Can two catch blocks be executed?
No, once the proper catch section is executed the control goes finally to block. So there
will not be any scenarios in which multiple catch blocks will be executed.
(A) What is the difference between System.String and
System.StringBuilder classes?
System.String is immutable; System.StringBuilder can have mutable string where a variety
of operations can be performed.
193
7. ASP.NET
(B) What’ is the sequence in which ASP.NET events are
processed ?
Following is the sequence in which the events occur :-
√ Page_Init.
√ Page_Load.
√ Control events
√ Page_Unload event.
Page_init event only occurs when first time the page is started, but Page_Load occurs in
subsequent request of the page.
(B) In which event are the controls fully loaded ?
Page_load event guarantees that all controls are fully loaded. Controls are also accessed
in Page_Init events but you will see that viewstate is not fully loaded during this event.
(B) How can we identify that the Page is PostBack ?
Page object has a “IsPostBack” property which can be checked to know that is the page
posted back.
(B) How does ASP.NET maintain state in between
subsequent request ?
Refer caching chapter.
(A) What is event bubbling ?
Server controls like Datagrid, DataList, Repeater can have other child controls inside
them. Example DataGrid can have combo box inside datagrid. These child control do not
raise there events by themselves, rather they pass the event to the container parent (which
can be a datagrid, datalist, repeater), which passed to the page as “ItemCommand” event.
As the child control send there events to parent this is termed as event bubbling.
194
(B) How do we assign page specific attributes ?
Page attributes are specified using the @Page directive.
(A) If we want to make sure that no one has tampered with
ViewState, how do we ensure it?
Using the @Page directive EnableViewStateMac to True.
(B) What is the use of @ Register directives ?
@Register directive informs the compiler of any custom server control added to the
page.
(B) What’s the use of SmartNavigation property ?
It’s a feature provided by ASP.NET to prevent flickering and redrawing when the page is
posted back.
Note:- This is only supported for IE browser. Project’s who have browser compatibility as
requirements have to think some other ways of avoiding flickering.
(B) What is AppSetting Section in “Web.Config” file ?
Web.config file defines configuration for a webproject. Using “AppSetting” section we
can define user defined values. Example below defined is “ConnectionString” section
which will be used through out the project for database connection.
<configuration>
<appSettings>
<add key="ConnectionString" value="server=xyz;pwd=www;database=testing" />
</appSettings>
(B) Where is ViewState information stored ?
In HTML Hidden Fields.
195
(I) What is the use of @ OutputCache directive in ASP.NET?
It is basically used for caching. See more for Caching chapter.
(B) How can we create custom controls in ASP.NET ?
User controls are created using .ASCX in ASP.NET. After .ASCX file is created you need
to two things in order that the ASCX can be used in project:.
√ Register the ASCX control in page using the <%@ Register directive. Example
<%@ Register tagprefix="Accounting" Tagname="footer" Src="Footer.ascx" %>
√ Now to use the above accounting footer in page you can use the below directive.
<Accounting:footer runat="server" />
(B) How many types of validation controls are provided by
ASP.NET ?
There are six main types of validation controls :-
RequiredFieldValidator
It checks whether the control have any value. It's used when you want the control should
not be empty.
RangeValidator
It checks if the value in validated control is in that specific range. Example
TxtCustomerCode should not be more than eight length.
CompareValidator
It checks that the value in controls should match some specific value. Example Textbox
TxtPie should be equal to 3.14.
RegularExpressionValidator
When we want the control value should match with a specific regular expression.
196
CustomValidator
It is used to define UserDefined validation.
ValidationSummary
It displays summary of all current validation errors.
Note:- It's rare that some one will ask step by step all the validation controls. Rather they
will ask for what type of validation which validator will be used. Example in one of the
interviews i was asked how you display summary of all errors in the validation
control...just uttered one word Validation summary.
(B) Can you explain what is “AutoPostBack” feature in
ASP.NET ?
If we want the control to automatically postback in case of any event, we will need to
check this attribute as true. Example on a ComboBox change we need to send the event
immediately to the server side then set the “AutoPostBack” attribute to true.
(B) How can you enable automatic paging in DataGrid ?
Following are the points to be done in order to enable paging in Datagrid :-
√ Set the “AllowPaging” to true.
√ In PageIndexChanged event set the current pageindex clicked.
Note:- The answers are very short, if you have implemented practically its just a revision.
If you are fresher just make sample code using Datagrid and try to implement this
functionality.
(B) What’s the use of “GLOBAL.ASAX” file ?
It allows to executing ASP.NET application level events and setting application-level
variables.
(B) What is the difference between “Web.config” and
“Machine.Config” ?
197
“Web.config” files apply settings to each web application, while “Machine.config” file
apply settings to all ASP.NET applications.
(B) What is a SESSION and APPLICATION object ?
Session object store information between HTTP requests for a particular user, while
application object are global across users.
(A) What is the difference between Server.Transfer and
response.Redirect ?
Following are the major differences between them:-
√ Response.Redirect sends message to the browser saying it to move to some
different page, while server.transfer does not send any message to the browser
but rather redirects the user directly from the server itself. So in server.transfer
there is no round trip while response.redirect has a round trip and hence puts
a load on server.
√ Using Server.Transfer you can not redirect to a different from the server itself.
Example if your server is www.yahoo.com you can use server.transfer to move
to www.microsoft.com but yes you can move to www.yahoo.com/travels, i.e.
within websites. This cross server redirect is possible only using
Response.redirect.
√ With server.transfer you can preserve your information. It has a parameter
called as “preserveForm”. So the existing query string etc. will be able in the
calling page.
If you are navigating within the same website use “Server.transfer” or else go for
“response.redirect()”
(A)What is the difference between Authentication and
authorization?
This can be a tricky question. These two concepts seem altogether similar but there is
wide range of difference. Authentication is verifying the identity of a user and authorization
is process where we check does this identity have access rights to the system. In short we
can say the following authentication is the process of obtaining some sort of credentials
198
from the users and using those credentials to verify the user’s identity. Authorization is
the process of allowing an authenticated user access to resources. Authentication always
proceed to Authorization; even if your application lets anonymous users connect and use
the application, it still authenticates them as being anonymous.
(I) What is impersonation in ASP.NET ?
By default, ASP.NET executes in the security context of a restricted user account on the
local machine. Sometimes you need to access network resources such as a file on a shared
drive, which requires additional permissions. One way to overcome this restriction is to
use impersonation. With impersonation, ASP.NET can execute the request using the
identity of the client who is making the request, or ASP.NET can impersonate a specific
account you specify in web.config.
(B) Can you explain in brief how the ASP.NET authentication
process works?
ASP.NET does not run by itself, it runs inside the process of IIS. So there are two
authentication layers which exist in ASP.NET system. First authentication happens at
the IIS level and then at the ASP.NET level depending on the WEB.CONFIG file.
Below is how the whole process works:-
√ IIS first checks to make sure the incoming request comes from an IP address
that is allowed access to the domain. If not it denies the request.
√ Next IIS performs its own user authentication if it is configured to do so. By
default IIS allows anonymous access, so requests are automatically
authenticated, but you can change this default on a per – application basis
with in IIS.
√ If the request is passed to ASP.net with an authenticated user, ASP.net checks
to see whether impersonation is enabled. If impersonation is enabled, ASP.net
acts as though it were the authenticated user. If not ASP.net acts with its own
configured account.
√ Finally the identity from step 3 is used to request resources from the operating
system. If ASP.net authentication can obtain all the necessary resources it
grants the users request otherwise it is denied. Resources can include much
more than just the ASP.net page itself you can also use .Net’s code access
199
security features to extend this authorization step to disk files, Registry keys
and other resources.
(A) What are the various ways of authentication techniques
in ASP.NET?
Selecting an authentication provider is as simple as making an entry in the web.config file
for the application. You can use one of these entries to select the corresponding built in
authentication provider:
√ <authentication mode=”windows”>
√ <authentication mode=”passport”>
√ <authentication mode=”forms”>
√ Custom authentication where you might install an ISAPI filter in IIS that
compares incoming requests to list of source IP addresses, and considers
requests to be authenticated if they come from an acceptable address. In that
case, you would set the authentication mode to none to prevent any of the
.net authentication providers from being triggered.
Windows authentication and IIS
If you select windows authentication for your ASP.NET application, you also have to
configure authentication within IIS. This is because IIS provides Windows authentication.
IIS gives you a choice for four different authentication methods:
Anonymous,basic,digest and windows integrated
If you select anonymous authentication, IIS doesn’t perform any authentication, Any one
is allowed to access the ASP.NET application.
If you select basic authentication, users must provide a windows username and password
to connect. How ever this information is sent over the network in clear text, which makes
basic authentication very much insecure over the internet.
If you select digest authentication, users must still provide a windows user name and
password to connect. However the password is hashed before it is sent across the network.
Digest authentication requires that all users be running Internet Explorer 5 or later and
that windows accounts to stored in active directory.
200
If you select windows integrated authentication, passwords never cross the network.
Users must still have a username and password, but the application uses either the Kerberos
or challenge/response protocols authenticate the user. Windows-integrated authentication
requires that all users be running internet explorer 3.01 or later Kerberos is a network
authentication protocol. It is designed to provide strong authentication for client/server
applications by using secret-key cryptography. Kerberos is a solution to network security
problems. It provides the tools of authentication and strong cryptography over the network
to help to secure information in systems across entire enterprise
Passport authentication
Passport authentication lets you to use Microsoft’s passport service to authenticate users
of your application. If your users have signed up with passport, and you configure the
authentication mode of the application to the passport authentication, all authentication
duties are off-loaded to the passport servers.
Passport uses an encrypted cookie mechanism to indicate authenticated users. If users
have already signed into passport when they visit your site, they’ll be considered
authenticated by ASP.NET. Otherwise they’ll be redirected to the passport servers to log
in. When they are successfully log in, they’ll be redirected back to your site
To use passport authentication you have to download the Passport Software Development
Kit (SDK) and install it on your server. The SDK can be found at http://
msdn.microsoft.com/library/default.asp?url=/downloads/list/websrvpass.aps. It includes
full details of implementing passport authentication in your own applications.
Forms authentication
Forms authentication provides you with a way to handle authentication using your own
custom logic with in an ASP.NET application. The following applies if you choose forms
authentication.
√ When a user requests a page for the application, ASP.NET checks for the
presence of a special session cookie. If the cookie is present, ASP.NET assumes
the user is authenticated and processes the request.
√ If the cookie isn’t present, ASP.NET redirects the user to a web form you
provide
201
You can carry out whatever authentication, it check’s you like it checks your form. When
the user is authenticated, you indicate this to ASP.NET by setting a property, which
creates the special cookie to handle subsequent requests.
(A)How does authorization work in ASP.NET?
ASP.NET impersonation is controlled by entries in the applications web.config file. The
default setting is “no impersonation”. You can explicitly specify that ASP.NET shouldn’t
use impersonation by including the following code in the file
<identity impersonate=”false”/>
It means that ASP.NET will not perform any authentication and runs with its own
privileges. By default ASP.NET runs as an unprivileged account named ASPNET. You
can change this by making a setting in the processModel section of the machine.config
file. When you make this setting, it automatically applies to every site on the server. To
user a high-privileged system account instead of a low-privileged set the userName attribute
of the processModel element to SYSTEM. Using this setting is a definite security risk, as
it elevates the privileges of the ASP.NET process to a point where it can do bad things to
the operating system.
When you disable impersonation, all the request will run in the context of the account
running ASP.NET: either the ASPNET account or the system account. This is true when
you are using anonymous access or authenticating users in some fashion. After the user
has been authenticated, ASP.NET uses its own identity to request access to resources.
The second possible setting is to turn on impersonation.
<identity impersonate =”true”/>
In this case, ASP.NET takes on the identity IIS passes to it. If you are allowing anonymous
access in IIS, this means ASP.NET will impersonate the IUSR_ComputerName account
that IIS itself uses. If you aren’t allowing anonymous access,ASP.NET will take on the
credentials of the authenticated user and make requests for resources as if it were that
user. Thus by turning impersonation on and using a non-anonymous method of
authentication in IIS, you can let users log on and use their identities within your ASP.NET
application.
Finally, you can specify a particular identity to use for all authenticated requests
<identity impersonate=”true” username=”DOMAIN\username” password=”password”/
>
202
With this setting, all the requests are made as the specified user (Assuming the password
it correct in the configuration file). So, for example you could designate a user for a single
application, and use that user’s identity every time someone authenticates to the
application. The drawback to this technique is that you must embed the user’s password
in the web.config file in plain text. Although ASP.NET won’t allow anyone to download
this file, this is still a security risk if anyone can get the file by other means.
(B)What’s difference between Datagrid, Datalist and repeater
?
A Datagrid, Datalist and Repeater are all ASP.NET data Web controls.
They have many things in common like DataSource Property, DataBind Method
ItemDataBound and ItemCreated.
When you assign the DataSource Property of a Datagrid to a DataSet then each DataRow
present in the DataRow Collection of DataTable is assigned to a corresponding
DataGridItem and this is same for the rest of the two controls also. But The HTML code
generated for a Datagrid has an HTML TABLE <ROW> element created for the particular
DataRow and its a Table form representation with Columns and Rows.
For a Datalist its an Array of Rows and based on the Template Selected and the
RepeatColumn Property value We can specify how many DataSource records should
appear per HTML <table> row. In short in datagrid we have one record per row, but in
datalist we can have five or six rows per row.
For a Repeater Control, the Datarecords to be displayed depends upon the Templates
specified and the only HTML generated is the due to the Templates.
In addition to these, Datagrid has a in-built support for Sort, Filter and paging the Data,
which is not possible when using a DataList and for a Repeater Control we would require
to write an explicit code to do paging.
(A)From performance point of view how do they rate ?
Repeater is fastest followed by Datalist and finally datagrid.
203
(B)What is the method to customize columns in DataGrid?
Use the template column.
(B)How can we format data inside DataGrid?
Use the DataFormatString property.
(A) How to decide on the design consideration to take a
Datagrid, datalist or repeater ?
Many make a blind choice of choosing datagrid directly, but that's not the right way.
Datagrid provides ability to allow the end-user to sort, page, and edit its data. But it
comes at a cost of speed. Second the display format is simple that is in row and columns.
Real life scenarios can be more demanding that
With its templates, the DataList provides more control over the look and feel of the
displayed data than the DataGrid. It offers better performance than datagrid
Repeater control allows for complete and total control. With the Repeater, the only HTML
emitted are the values of the databinding statements in the templates along with the
HTML markup specified in the templates—no "extra" HTML is emitted, as with the
DataGrid and DataList. By requiring the developer to specify the complete generated
HTML markup, the Repeater often requires the longest development time. But repeater
does not provide editing features like datagrid so everything has to be coded by programmer.
However, the Repeater does boast the best performance of the three data Web controls.
Repeater is fastest followed by Datalist and finally datagrid.
(B) Difference between ASP and ASP.NET?
ASP.NET new feature supports are as follows :-
Better Language Support
√ New ADO.NET Concepts have been implemented.
√ ASP.NET supports full language (C#, VB.NET, C++) and not simple scripting
like VBSCRIPT..
204
Better controls than ASP
√ ASP.NET covers large set’s of HTML controls..
√ Better Display grid like Datagrid, Repeater and datalist.Many of the display
grids have paging support.
Controls have events support
√ All ASP.NET controls support events.
√ Load, Click and Change events handled by code makes coding much simpler
and much better organized.
Compiled Code
The first request for an ASP.NET page on the server will compile the ASP.NET code and
keep a cached copy in memory. The result of this is greatly increased performance.
Better Authentication Support
ASP.NET supports forms-based user authentication, including cookie management and
automatic redirecting of unauthorized logins. (You can still do your custom login page
and custom user checking).
User Accounts and Roles
ASP.NET allows for user accounts and roles, to give each user (with a given role) access
to different server code and executables.
High Scalability
√ Much has been done with ASP.NET to provide greater scalability.
√ Server to server communication has been greatly enhanced, making it possible
to scale an application over several servers. One example of this is the ability
to run XML parsers, XSL transformations and even resource hungry session
objects on other servers.
Easy Configuration
√ Configuration of ASP.NET is done with plain text files.
√ Configuration files can be uploaded or changed while the application is running.
No need to restart the server. No more metabase or registry puzzle.
205
Easy Deployment
No more server restart to deploy or replace compiled code. ASP.NET simply redirects all
new requests to the new code.
(A) What are major events in GLOBAL.ASAX file ?
The Global.asax file, which is derived from the HttpApplication class, maintains a pool
of HttpApplication objects, and assigns them to applications as needed. The Global.asax
file contains the following events:
Application_Init: Fired when an application initializes or is first called. It is invoked for
all HttpApplication object instances.
Application_Disposed: Fired just before an application is destroyed. This is the ideal
location for cleaning up previously used resources.
Application_Error: Fired when an unhandled exception is encountered within the
application.
Application_Start: Fired when the first instance of the HttpApplication class is created.
It allows you to create objects that are accessible by all HttpApplication instances.
Application_End: Fired when the last instance of an HttpApplication class is destroyed.
It is fired only once during an application's lifetime.
Application_BeginRequest: Fired when an application request is received. It is the first
event fired for a request, which is often a page request (URL) that a user enters.
Application_EndRequest: The last event fired for an application request.
Application_PreRequestHandlerExecute: Fired before the ASP.NET page framework
begins executing an event handler like a page or Web service.
Application_PostRequestHandlerExecute: Fired when the ASP.NET page framework has
finished executing an event handler.
Applcation_PreSendRequestHeaders: Fired before the ASP.NET page framework sends
HTTP headers to a requesting client (browser).
Application_PreSendContent: Fired before the ASP.NET page framework send content
to a requesting client (browser).
206
Application_AcquireRequestState: Fired when the ASP.NET page framework gets the
current state (Session state) related to the current request.
Application_ReleaseRequestState: Fired when the ASP.NET page framework completes
execution of all event handlers. This results in all state modules to save their current state
data.
Application_ResolveRequestCache: Fired when the ASP.NET page framework completes
an authorization request. It allows caching modules to serve the request from the cache,
thus bypassing handler execution.
Application_UpdateRequestCache: Fired when the ASP.NET page framework completes
handler execution to allow caching modules to store responses to be used to handle
subsequent requests.
Application_AuthenticateRequest: Fired when the security module has established the
current user's identity as valid. At this point, the user's credentials have been validated.
Application_AuthorizeRequest: Fired when the security module has verified that a user
can access resources.
Session_Start: Fired when a new user visits the application Web site.
Session_End: Fired when a user's session times out, ends, or they leave the application
Web site.
Note :- During interview you do not have to really cram all these events. But just keep the
basic events in mind
(A) What order they are triggered ?
They're triggered in the following order:
Application_BeginRequest
Application_AuthenticateRequest
Application_AuthorizeRequest
Application_ResolveRequestCache
Application_AcquireRequestState
Application_PreRequestHandlerExecute
207
Application_PreSendRequestHeaders
Application_PreSendRequestContent
<<code is executed>>
Application_PostRequestHandlerExecute
Application_ReleaseRequestState
Application_UpdateRequestCache
Application_EndRequest.
(I) Do session use cookies ?
Twist:- How can we make session to not to use cookies ?
Left to the user, you will enjoy to find this answer.
(I)How can we force all the validation control to run ?
Page.Validate
(B)How can we check if all the validation control are valid
and proper ?
Using the Page.IsValid() property you can check whether all the validation are done.
(A)If client side validation is enabled in your Web page, does
that mean server side code is not run?
When client side validation is enabled server emit’s JavaScript code for the custom
validators. But note that does not mean that server side checks on custom validators do
not execute. It does this redundant check two times as some of the validators do not
support client side scripting.
(A)Which JavaScript file is referenced for validating the
validators at the client side ?
208
WebUIValidation.js javascript file installed at “aspnet_client” root IIS directory is used
to validate the validation controls at the client side
(B)How to disable client side script in validators?
Set EnableClientScript to false.
(A)How can I show the entire validation error message in a
message box on the client side?
In validation summary set “ShowMessageBox” to true.
(B)You find that one of your validation is very complicated
and does not fit in any of the validators, what will you do ?
Best is to go for CustomValidators. Below is a sample code for a custom validator which
checks that a textbox should not have zero value
<asp:CustomValidator id="CustomValidator1" runat="server"
ErrorMessage="Number not divisible by Zero"
ControlToValidate="txtNumber"
OnServerValidate="ServerValidate"
ClientValidationFunction="CheckZero" /><br>
Input:
<asp:TextBox id="txtNumber" runat="server" />
<script language="javascript">
<!--
function CheckZero(source, args) {
int val = parseInt(args.Value, 10);
if (value==0) {
args.IsValid = false;
}
209
else {
args.IsValid = true;
}
}
// -->
</script>
(A)What is Tracing in ASP.NET ?
Tracing allows us to view how the code was executed in detail.
(A) How do we enable tracing ?
<%@ Page Trace="true" %>
(I)What exactly happens when ASPX page is requested from
Browser?
Note: - Here the interviewer is expecting complete flow of how an ASPX page is processed
with respect to IIS and ASP.NET engine.
Following are the steps which occur when we request a ASPX page :-
√ The browser sends the request to the webserver. Let us assume that the
webserver at the other end is IIS.
√ Once IIS receives the request he looks on which engine can serve this request.
When I mean engine means the DLL who can parse this page or compile and
send a response back to browser. Which request to map to is decided by file
extension of the page requested.
Depending on file extension following are some mapping
√ .aspx, for ASP.NET Web pages,
√ .asmx, for ASP.NET Web services,
√ .config, for ASP.NET configuration files,
√ .ashx, for custom ASP.NET HTTP handlers,
210
√ .rem, for remoting resources
√ Etc
You can also configure the extension mapping to which engine can route by using the IIS
engine.
Figure: - 7.1 Following screen shows some IIS mappings
Example an ASP page will be sent to old classic ASP.DLL to compile. While .ASPX
pages will be routed to ASP.NET engine for compilation.
211
√ As this book mainly will target ASP.NET we will look in to how ASP.NET
pages that is ASPX pages generation sequence occurs. Once IIS passes the
request to ASP.NET engine page has to go through two section HTTP module
section and HTTP handler section. Both these section have there own work
to be done in order that the page is properly compiled and sent to the IIS.
HTTP modules inspect the incoming request and depending on that they can
change the internal workflow of the request. HTTP handler actually compiles
the page and generates output. If you see your machine.config file you will see
following section of HTTP modules
<httpModules>
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" />
<add name="WindowsAuthentication"
type="System.Web.Security.WindowsAuthenticationModule" />
<add name="FormsAuthentication"
type="System.Web.Security.FormsAuthenticationModule" />
<add name="PassportAuthentication"
type="System.Web.Security.PassportAuthenticationModule" />
<add name="UrlAuthorization"
type="System.Web.Security.UrlAuthorizationModule" />
<add name="FileAuthorization"
type="System.Web.Security.FileAuthorizationModule" />
<add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule,
System.Web.Mobile, Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /
>
</httpModules>
The above mapping will show which functionality is handled by which Namespace.
Example FormsAthuentication is handled by “System.Web.
212
Security.FormsAuthenticationModule”. If you look at the web.config section HTTP module
is where authentication and authorization happens.
Ok now the HTTP handler is where the actual compilation takes place and the output is
generated. Following is a paste from HTTP handler section of WEB.CONFIG file.
<httpHandlers>
<add verb="*" path="*.vjsproj" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.java" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.jsl" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="trace.axd" type="System.Web.Handlers.TraceHandler" />
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory" />
...
</httpHandlers>
√ Depending on the File extension handler decides which Namespace will
generate the output. Example all .ASPX extension files will be compiled by
System.Web.UI.PageHandlerFactory
√ Once the file is compiled it will be send back again to the HTTP modules and
from there to IIS and then to the browser.
213
Figure :- 7.2 IIS flow from various sections.
(B)How can we kill a user session ?
Session.abandon
214
(I)How do you upload a file in ASP.NET ?
I will leave this to the readers … Just a hint we have to use System.Web.HttpPostedFile
class.
(I)How do I send email message from ASP.NET ?
ASP.NET provides two namespaces System.WEB.mailmessage classand
System.Web.Mail.Smtpmail class. Just a small homework create a Asp.NET project and
send a email at shiv_koirala@yahoo.com. Do not Spam.
(A)What are different IIS isolation levels?
IIS has three level of isolation:-
LOW (IIS process):- In this main IIS process and ASP.NET application run in same process.
So if any one crashes the other is also affected. Example let’s say (well this is not possible)
I have hosted yahoo, hotmail .amazon and google on a single PC. So all application and
the IIS process runs on the same process. In case any website crashes it affects every one.
Figure: - 7.3 LOW IIS process scenario
Medium (Pooled):- In Medium pooled scenario the IIS and web application run in different
process. So in this case there are two processes process1 and process2. In process1 the IIS
process is running and in process2 we have all Web application running.
215
Figure: - 7.4 Medium pooled scenario
High (Isolated):-In high isolated scenario every process is running is there own process. In
below figure there are five processes and every one handling individual application. This
consumes heavy memory but has highest reliability.
216
Figure: - 7.5 High isolation scenario
(A)ASP used STA threading model, what is the threading
model used for ASP.NET ?
ASP.NET uses MTA threading model.
(A)What is the use of <%@ page aspcompat=true %>
attribute ?
This attribute works like a compatibility option. As mentioned before ASP worked in
STA model and ASP.NET works in MTA model, but what if your ASP.NET application
is using a VB COM component. In order that VB COM runs properly in ASP.NET threading
model we have to set attribute. After defining the ASPCOMPAT directive attribute
ASP.NET pages runs in STA model thus building the compatibility between ASP.NET
and old COM components that does not support MTA model.
217
(B)Explain the differences between Server-side and Clientside
code?
Server side code is executed at the server side on IIS in ASP.NET framework, while
client side code is executed on the browser.
(I)Can you explain Forms authentication in detail ?
In old ASP if you where said to create a login page and do authentication you have to do
hell lot of custom coding. But now in ASP.NET that’s made easy by introducing Forms
authentication. So let’s see in detail what form authentication is.
Forms authentication uses a ticket cookie to see that user is authenticated or not. That
means when user is authenticated first time a cookie is set to tell that this user is
authenticated. If the cookies expire then Forms authentication mechanism sends the user
to the login page.
Following are the steps which defines steps for Forms authentication :-
√ Configure Web.config file with forms authentication. As shown below in the
config file you can see we have give the cookie name and loginurl page.
<configuration>
<system.web>
<!-- Other settings omitted. -->
<authentication mode="Forms">
<forms name="logincookies"
loginUrl="login.aspx"
protection="All"
timeout="30"
path="/" />
</authentication>
</system.web>
</configuration>
218
√ Remove anonymous access to the IIS web application, following are changes
done to web.config file.
<configuration>
<system.web>
<!-- Other settings omitted. -->
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
√ Create the login page which will accept user information. You will have create
your login page that is the Login.aspx which will actually take the user data.
√ Finally a Small coding in the login button.
Let us assume that the login page has two textboxes Txtname and txtapssword.
Also import System.Web.Security and put the following code in login button
of the page.
If Page.IsValid Then
If FormsAuthentication.Authenticate(txtName.Text, txtPassword.Text) Then
FormsAuthentication.RedirectFromLoginPage(txtName.Text, False)
Else
lblStatus.Text = "Error not proper user"
End If
End If
219
(A)How do I sign out in forms authentication ?
FormsAuthentication.Signout()
(A)If cookies are not enabled at browser end does form
Authentication work?
No, it does not work.
(A)How to use a checkbox in a datagrid?
Twist :- How can I track event in checkbox which is one of the columns of a datagrid ?
Note: - This is normally asked when the interviewer want to see that have you really
worked practically on a project.
Following are the steps to be done :-
√ In ASPX page you have to add Itemtemplate tag in datagrid.
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server" AutoPostBack="True"
OnCheckedChanged="Check_Clicked"></asp:CheckBox>
</ItemTemplate>
√ If you look at the Itemtemplate we have “OnCheckChanged” event. This
“OnCheckChanged” event has “Check_Clicked” subroutine is actually in
behind code. Note this method which is in behind code should either be
“protected” or “public”
√ Following below is the subroutine which defines the method
Protected Sub Check_Clicked(ByVal sender As Object, ByVal e As EventArgs)
‘ do something
End Sub
The above steps should be defined in short to the interviewer which will give a quick
feeling of your practical experience with ASP.NET
220
(I)What are the steps to create a windows service in VB.NET
?
Windows Services are long-running executable applications that run in its own Windows
session, which then has the ability to start automatically when the computer boots and
also can be manually paused, stopped or even restarted.
Following are the steps to create a service :-
√ Create a project of type “Windows Service”.
Figure 7.6 :- Create project for Windows Service
√ If you see the class created it is automatically inheriting from
“System.ServiceProcess.ServiceBase”.
221
√ You can override the following events provided by service and write your
custom code. All the three main events can be used that is Start, stop and
continue.
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
protected override void OnContinue()
{
}
√ Now to install the service you need to do run the install util exe.
InstallUtil <Project Path>\BIN\MyNewService.exe
(A) What is the difference between “Web farms” and “Web
garden”?
“Web farms” are used to have some redundancy to minimize failures. It consists of two or
more web server of the same configuration and they stream the same kind of contents.
When any request comes there is switching / routing logic which decides which web
server from the farm handles the request. For instance we have two servers “Server1”
and “Server2” which have the same configuration and content. So there is a special switch
which stands in between these two servers and the users and routes the request accordingly.
222
Figure 7.7 : - Web Farm in action
Above figure explains in detail how web farm work. You can see there is a router in
between which takes a request and sees which one of the server is least loaded and
forwards the request to that server. So for request1 it route’s server1, for request2 it
routes server2, for request3 it routes to server3 and final request4 is routed to server4. So
you can see because we have web farm at place server1 and server2 are loaded with two
request each rather than one server loading to full. One more advantage of using this
kind of architecture is if one of the servers goes down we can still run with the other
server thus having 24x7 uptime.
The routing logic can be a number of different options:-
√ Round-robin: Each node gets a request sent to it “in turn”. So, server1 gets a request,
then server2 again, then server1, then server2 again. As shown in the above figure.
223
√ Least Active: Whichever node show to have the lowest number of current connects
gets new connects sent to it. This is good to help keep the load balanced between
the server nodes.
√ Fastest Reply: Whichever node replies faster is the one that gets new requests. This
is also a good option - especially if there are nodes that might not be “equal” in
performance. If one performs better than the other, then send more requests
there rather than which is moving slowly?
Before we try to understand what a web garden is let’s try to understand how IIS handles
processes. All requests to IIS are routed to “aspnet_wp.exe” for IIS 5.0 and “w3wp.exe”
for IIS 6.0. In normal case i.e. with out web garden we have one worker process instance
(“aspnet_wp.exe” / “w3wp.exe”) across all requests. This one instance of worker process
uses the CPU processor as directed by the operating system.
Figure 7.8 : - With out Web Garden
224
But when we enable web garden for a web server it creates different instances of the
worker process and each of these worker process runs on different CPU. You can see in
the below diagram we have different worker process instances created which run on
different CPU’s.
Figure 7.9 : - With Web Garden
In short we can define a model in which multiple processes run on multiple CPUs in a
single server machine are known as a Web garden.
(A) How do we configure “WebGarden”?
“Web garden” can be configured by using process model settings in “machine.config” or
“Web.config” file. The configuration section is named <processModel> and is shown in
225
the following example. The process model is enabled by default (enable=”true”). Below
is the snippet from config file.
<processModel
enable=”true”
timeout=”infinite”
idleTimeout=”infinite”
shutdownTimeout=”0:00:05"
requestLimit=”infinite”
requestQueueLimit=”5000"
memoryLimit=”80"
webGarden=”false”
cpuMask=”12"
userName=””
password=””
logLevel=”errors”
clientConnectedCheck=”0:00:05"
/>
From the above processmodel section for web garden we are concerned with only two
attributes “webgarden” and “cpuMask”.
webGarden :- Controls CPU affinity. True indicates that processes should be affinitized
to the corresponding CPU. The default is False.
cpuMask:- Specifies which processors on a multiprocessor server are eligible to run
ASP.NET processes. The cpuMask value specifies a bit pattern that indicates the CPUs
eligible to run ASP.NET threads. ASP.NET launches one worker process for each eligible
CPU. If webGarden is set to false, cpuMask is ignored and only one worker process will
run regardless of the number of processors in the machine. If webGarden is set to true,
ASP.NET launches one worker process for each CPU that corresponds to a set bit in
cpuMask. The default value of cpuMask is 0xffffffff.
226
Below are detail steps of how to implement web garden
√ click Start and then click Run.
√ type calc.exe and then click OK.
√ Goto View menu, click Scientific.
√ Goto View menu, click Binary.
√ Use 0 and 1 to specify the processors ASP.NET can or cannot use.
Use 1 for the processor that you want to use for ASP.NET. Use 0 for the processor that
you do not want to use for ASP.NET. For example, if you want to use the first two
processors for ASP.NET of a four-processor computer, type 1100.
√ On the View menu, click Decimal. Note the decimal number.
√ Open the Web.config or machine.config file in a text editor such as Notepad. The
Web.config file is located in the folder where the application is saved.
√ In the Web.config file, add the processModel configuration element under the
System.web element. Before adding <processModel> to Web.config file, the user
has to make sure that the allowDefinition attribute in the <processModel> section o f
the Web.config file is set to everywhere.
√ Add and then set the webGarden attribute of the processModel element to True.
√ Add and then set the cpuMask attribute of the processModel element to the result
that is determined in your calculation.
Do not preface the number with 0x because the result of the calculation is a decimal
number. The following example demonstrates the processModel element that is configured
to enable only the first two processors of a four-processor computer.
<processModel
enable=”true”
webGarden=”true”
cpuMask=”12" />
Save the Web.config file. The ASP.NET application automatically restarts and uses only
the specified processors.
227
(B)What is the main difference between Gridlayout and
FlowLayout ?
GridLayout provides absolute positioning for controls placed on the page. Developers
that have their roots in rich-client development environments like Visual Basic will find
it easier to develop their pages using absolute positioning, because they can place items
exactly where they want them. On the other hand, FlowLayout positions items down the
page like traditional HTML. Experienced Web developers favor this approach because it
results in pages that are compatible with a wider range of browsers.
If you look in to the HTML code created by absolute positioning you can notice lot of
DIV tags. While in Flow layout you can see more of using HTML table to position elements
which is compatible with wide range of browsers.
228
(B) What are design patterns ?
Design patterns are recurring solution to recurring problems in software architecture.
(A) Can you list down all patterns and their classification ?
Note :- This is advanced question because anyone who asks to list down all patterns can
only be crazy for what he is asking. But it is always a win-win situation for the interviewer.
There are three basic classification of patterns Creational, Structural and Behavioral
patterns.
Creational Patterns
√ Abstract Factory:- Creates an instance of several families of classes
√ Builder :- Separates object construction from its representation
√ Factory Method:- Creates an instance of several derived classes
√ Prototype:- A fully initialized instance to be copied or cloned
√ Singleton:- A class in which only a single instance can exist
Note :- The best way to remember Creational pattern is by ABFPS (Abraham Became
First President of States).
Structural Patterns
√ Adapter:-Match interfaces of different classes.
√ Bridge:-Separates an object’s interface from its implementation.
√ Composite:-A tree structure of simple and composite objects.
√ Decorator :-Add responsibilities to objects dynamically.
√ Façade:-A single class that represents an entire subsystem.
√ Flyweight:-A fine-grained instance used for efficient sharing.
√ Proxy:-An object representing another object.
8..NET Architecture
229
Note : To remember structural pattern best is (ABCDFFP)
Behavioral Patterns
√ Mediator:-Defines simplified communication between classes.
√ Memento:-Capture and restore an object's internal state.
√ Interpreter:-A way to include language elements in a program.
√ Iterator:-Sequentially access the elements of a collection.
√ Chain of Resp:-A way of passing a request between a chain of objects.
√ Command:-Encapsulate a command request as an object.
√ State:-Alter an object's behavior when its state changes.
√ Strategy:-Encapsulates an algorithm inside a class.
√ Observer:-A way of notifying change to a number of classes.
√ Template Method:-Defer the exact steps of an algorithm to a subclass.
√ Visitor:-Defines a new operation to a class without change.
Note :- Just remember Music....... 2 MICS On TV (MMIICCSSOTV).
Note:- No source code is provided for architecture section as much of the things can be clear
from good UML diagrams.
(A)What is the difference between Factory and Abstract Factory
Patterns?
Note: - This is quiet a confusing architect question especially in design pattern section.
Interviewer can take you for a nice ride. So get the difference in your heart.
First read the definition provided in the first question about both these patterns. The
common thing they have is that they belong to creational patterns. In short they hide the
complexity of creating objects.
The main difference between factory and Abstract factory is factory method uses
inheritance to decide which object has to be instantiated while abstract factory uses
delegation to decide instantiation of object. We can say Abstract factory uses factory
230
method to complete the architecture. Abstract Factory is one level higher in abstraction
over Factory.
The two class diagrams below will provide overview of what is the actual difference.
First figure shows a sample implementation of Factory Patterns. In this figure there are
two basic sections:-
√ The actual product section i.e. Class “Product” it inherits from an abstract
class “AbstractProduct”.
√ The creational aspect section i.e. “ConcreteCreator” class which inherits
from class “Creator”.
√ Now there are some rules the client will have to follow who
will need the “Product” object. He will never refer directly to the actual “Product” object
he will refer the “Product” object using “AbstractProduct”.
√ Second client will never use “New” keyword to create the “Product” object
but will use the “Creator” class which in turn will use the “ConcreteCreator”
class to create the actual “Product” object.
Figure: - 8.1 Class diagram of a factory Pattern
So what are the benefits from this architecture? All creational and initializing aspects are
now detached from the actual client. As your creational aspect is now been handled in
“ConcreteCreator” and the client has reference to only “Creator”, so any implementation
change in “CreateProduct” will not affect the client code. In short now your creational
aspect of object is completely encapsulated from the client’s logic.
231
Now let’s look at the second class diagram which provides an overview of what actually
“Abstract factory” pattern is. It creates objects for families of classes. In short it describes
collection of factor methods from various different families. In short it groups related
factory methods. Example in this the class “Creator” is implemented using the “Abstract”
factory pattern. It now creates objects from multiple families rather one product.
Note :- Just stick up to this definition that Abstract factory classifies factory methods or
groups logically related factory method together.
232
Figure:- 8.2 Class Diagram of Abstract Factory
(I)What is MVC pattern?
Twist: - How can you implement MVC pattern in ASP.NET?
The main purpose using MVC pattern is to decouple the GUI from the Data. It also gives
the ability to provide multiple views for the same Data. MVC pattern separates objects in
to three important sections:-
233
√ Model: - This section is specially for maintaining data. It is actually where your
business logic, querying database, database connection etc. is actually
implemented.
√ Views: - Displaying all or some portion of data, or probably different view of
data. View is responsible for look and feel, Sorting, formatting etc.
√ Controller: - They are event handling section which affects either the model or
the view. Controller responds to the mouse or keyboard input to command
model and view to change. Controllers are associated with views. User
interaction triggers the events to change the model, which in turn calls some
methods of model to update its state to notify other registered views to refresh
their display.
Ok now this was all in theory. Let us look at how in actually ASP.NET we can implement
MVC pattern. During interview with theory question they will be looking at have you
really implemented MVC or its just talks. Following are the various sections of ASP.NET
which maps to MVC sections:-
√ Model: - This section is represented by Data view, Dataset, Typed Dataset,
Business components, business entity models etc. Now this section can then
be tied up to either windows application or web UI.
√ View: - ASPX, ASCX, or windows application UI like data grid etc. form the
view part of it.
√ Controller: - In ASP.NET the behind code is the controller as the events are
handled by that part. Controller communicates both with Model as well as
view.
I hope I was able to map you imagination of ASP.NET with the diagram given below.
234
Figure: - 8. 3 Data flow between MVC architectures.
(A)How can we implement singleton pattern in .NET?
Singleton pattern mainly focuses on having one and only one instance of the object running.
Example a windows directory service which has multiple entries but you can only have
single instance of it through out the network.
Note:- May of developers would jump to a conclusion saying using the “STATIC” keyword
we can have a single instance of object. But that’s not the real case there is something more
that has to be done. But please note we can not define a class as STATIC, so this will not
serve our actual purpose of implementing singleton pattern.
Following are the three steps needed to implement singleton pattern in .NET:-
235
√ First create your class with static members.
Public class ClsStaticClass
Private shared objCustomer as clsCustomer
End class
This ensures that there is actually only one Customer object throughout the project.
√ Second define a private constructor to your class.
Note: - defining a private constructor to class does not allow a client to create objects directly.
√ Finally provide a static method to get access to your singleton object.
(A)How do you implement prototype pattern in .NET?
Twist: - How to implement cloning in .NET ? What is shallow copy and deep copy ?
Cloning is achieved by using ICloneable of the System namespace. It has a “Clone” method
which actually returns the reference of the same copy. Clone method allows a Shallow
copy and not a deep copy. In Shallow copy if you make changes to the cloned object it
actually changes on the main object itself. So how is deep copy achieved, by using
“ISerializable” interface? So what you do is first serialize the object then deserialize back
to a complete new copy. Now any changes to this new copy do not reflect on the original
copy of the object, this is called as Deep copy.
(I)What are the situations you will use a Web Service and Remoting in
projects?
Well “Web services” uses “remoting” concepts internally. But the major difference between
“web service” and “remoting” is that “web service” can be consumed by clients who are
not .NET platform. While remoting you need the client to be .NET compliant. Regarding
the speed issue “Remoting” is faster than “Web Services”. So I think when deciding the
architecture side of choosing between “Web services” and “Remoting” keep the cross
platform issue and the speed issue in mind.
(A)Can you give a practical implementation of FAÇADE patterns?
236
Façade pattern sits on the top of lot of subsystems and makes access easy to interfaces
of these subsystems. Basic purpose of Façade is to make interfacing between many
modules and classes manageable.
Figure: - 8.4 Façade in action
Above is a simple live application of a Façade class. In this we have four subsystems :-
√ Customer
√ Product
237
√ Payment
√ Invoicing
All the four modules when built at initial stage where built completely independent. The
main interaction between all these subsystems is customer placing order. This functionality
can be attained by using all these subsystems, which involves complex interaction between
them.
That is where FAÇADE comes in to action. We have built a FAÇADE called as
“FACADEORDER” which sits on the top of all these subsystem and fulfill our
functionality.
(I) How can we implement observer pattern in .NET?
Observer patterns can be implemented using “Delegates” and “Events”. I leave this to
the readers to implement one sample code for observer patterns.
(B)What is three tier architecture?
The three tier software architecture emerged in the 1990s to overcome the limitations of
the two tier architecture.
There are three layers when we talk about three tier architecture:-
User Interface (Client) :- This is mostly the windows user interface or the Web interface
but this has only the UI part.
Mid layer: - Middle tier provides process management where business logic and rules are
executed and can accommodate hundreds of users (as compared to only 100 users with
the two tier architecture) by providing functions such as queuing, application execution,
and database staging.
Data Access Layer: - This is also called by the famous acronym "DAL" component. It has
mainly the SQL statement which do the database operation part of the job.
The three tier architecture is used when an effective distributed client/server design is
needed that provides (when compared to the two tier) increased performance, flexibility,
maintainability, reusability, and scalability, while hiding the complexity of distributed
processing from the user.
238
(I)Have you ever worked with Microsoft Application Blocks, if yes then
which?
Application Blocks are C# and VB.NET classes distributed as Visual Studio projects
that can be downloaded from Microsoft's Web site and used in any .NET application,
including ASP.NET Web applications. They are useful and powerful tools that can make
applications more maintainable, scalable and efficient
Secondly which application blocks has been used depends on really what you have
implemented. But there are two famous MAB which is making buzz around the industry:-
√ data access block
The Data Access Block provides static methods located in the SqlHelper class
that encapsulates the most common data access tasks performed with Microsoft
SQL server. If the term "static method" is new to you, it means that the class
methods can be called without instantiating an instance of the class. For
example, the method ExecuteReader () within the SqlHelper class can be called
by simply using the statement SqlHelper.ExecuteReader () -- no object
instantiation of the SqlHelper class is required.
√ Exception management block.
The Exception Management Application Block provides a simple yet extensible
framework for handling exceptions. With a single line of application code you
can easily log exception information to the Event Log or extend it by creating
your own components that log exception details to other data sources or notify
operators, without affecting your application code. The Exception Management
Application Block can easily be used as a building block in your own .NET
application
Note: - It’s beyond the scope the book to look into details of application block. Best is go to
www.microsoft.com and search for these application block. Try to compile one or two
programs using their given classes and documentation.
(A)What is Service Oriented architecture?
“Services” are components which expose well defined interfaces and these interfaces
communicate through XML messages. Using SOA you can build workflow, which uses
239
interfaces of these components. SOA is typically useful when you are crossing
heterogeneous technical boundaries, organizations, domain etc.
In .NET SOA technically uses Web services to communicate with each service which is
crossing boundaries. You can look SOA which sits on top of web services and provides a
workflow.
SOA uses service components which operate in their own domain boundary. Let us note
some points of service :-
√ They are independent components and operate in their own boundary and
own technology.
√ They have well defined interfaces which use XML and WSDL to describe
themselves.
√ Services have URL where anyone can find them and clients can bind to these
URL to avail for the service.
√ Services have very loosely coupled architecture. In order to communicate to
service you only have to know the WSDL. Your client can then generate proxy
from the WSDL of the service.
240
Figure: - 8.5 SOA basic architecture
Above figure describes a broader picture of what service oriented architecture will look
like. The basic fundamental of SOA is a web service. In above diagram you can see there
are two services available. One is the “Credit Card” service and other is “Address Check”
241
web service. Both these services are provided by different company. Now we want to
build a functionality which needs to validate a credit card and also check that addresses
are proper. In short we will need functionalities of both the “CreditCard” and
“AddressCheck” service. Also note the “CreditCard” service has its own business layer
and DAL components, which can be in a proprietary language. It’s very much possible
that the whole Credit card service is made in .NET and the Address check is SAP
implementation or JAVA implementation. But because both the systems provide there
functionality using Web services which is nothing but basically XML message
communication. So we have made new service which sits like a FAÇADE on top of both
the web service and performs both functionalities in one common service. You will see I
have made a third service which sits on top of both the webservice and consumes them.
Also you can see that the UI part of the systems have access to Business layer and Web
service of there system. But the service which does both these check has only access to
the Web service.
Note:- It’s beyond the scope of this book to discuss about SOA. But just to keep you safe
during interview this book has tried to clear some basics of SOA. I will really stress you to
read WCF chapter of this book which talks in detail of how microsoft has visualized
SOA.
(I)What are different ways you can pass data between tiers?
There are many ways you can pass data between tiers :-
√ Dataset the most preferred one as they maintain data in XML format.
√ Datareader
√ Custom classes.
√ XML
(A)What is Windows DNA architecture?
Note :- If you have worked with classic ASP this question can come to you.
242
The Windows Distributed interNet Applications Architecture (DNA) is a Microsoft
blueprint for robust, scalable, distributed business software. Windows DNA has evolved
over time and was not preplanned. It gives all combined advantages of Centralized
mainframe, application servers, internet technologies and Personal computers. Windows
DNA is an evolution which started from mainframes (where all logic was centralized),
Fox pro ages ( where we talked in terms of two tier systems), VB6 / SQL SERVER (three
tier where we talked in terms of having one more tier which was mainly COM where
business logic resided), COM+ ( looking in terms of transactions and fulfilling ACID
rules) and finally the DNA.
Figure :- 8.6 Windows DNA sections
243
Above shown is a Windows DNA model which is a blue print which Microsoft has
proposed. So if interviewer is asking you have you worked with Windows DNA, then
answer is yes. You will see that you always use these sections in project. Do not get
confused with the terminology DNA.
(A)What is aspect oriented programming?
Note :- This is something which is catching up the market so interviewer can ask you to see
how you are in touch with the market. So probably this explanation can be quiet long but
bear with me it is worth of it
I will try and make it as short as possible as this book is not a reference book. Just to save
you from interviewer I will give a short description of aspect oriented programming in
.NET.
First let us try and define it which can probably save you during interview
Aspect-oriented software development is a new technology for separation of concerns (SOC)
in software development. The techniques of AOSD make it possible to modularize
crosscutting aspects of a system.
Ok that statement can save you for the first stage let us get down actually what is it. Let’s
revisit back how software development cycle evolved.
When we look back at times of COBOL where we used to break the modules in small
functionalities and use reusability to its maximum.
Then came the time when we talked in terms of Objects where things were clearer as
software was modeled in terms of real life examples. It worked fine and till today is the
most accepted way of implementing and organizing project. So why AOP ??
Aspect oriented programming does not oppose OOP’s but rather supports it and make’s
it more maintainable. So remove the logic from head the AOP is replacement of OOP.
No its brother of OOP helping him to be better.
When we talk in terms of objects it is an entity which maps to real world domain. Object
has attributes which represent the state of object and also define its behavior. By rule of
object oriented programming object should be stand alone and communicate with other
objects using messages or defined interface.
One object should not communicate with other object directly rather communicate through
defined interfaces. Every object satisfies some “Concern” in relation to the system.
244
Twist: - What is Concern in AOP?
“A concern is a particular goal, concept, or area of interest”
There are mainly two types of concern from an object perspective:-
√ Core / Main concerns which it should satisfy and is his work.
√ System concerns which are not related to business functionalities but software
related concerns example audit trail, Error handling, Security etc.
Ok let us try to understand this principle by some actual example.
Figure :- 8.7 Customer and Audit trail relationships
Above is a class diagram which shows relationshipbetween two classes “ClsCustomer”
and “ClsAuditTrail”. “ClsCustomer” class does inserting of new customers in to database
and “ClsAuditTrail” does the auditing of what is changed in the customer class.
Now there are two concerns in this project :-
√ Customer code should not exceed than 10 lengths (Business level
concern) greater
√ All customer data which is updated should be audited. (System level concern)
245
Here goes the class code. If you see the ClsCustomer implementation in the update method
I have called the Audit trail implementation. If you really look from object oriented point
of view we are doing something in customer class which is supposed to be not his
implementation: - Audit Trail logging. Thus we have also broken down the rule of
encapsulation. In short the class not only handles his work but also some other work
which is not his concern.
Ok now let us define crosscutting which is one of important aspects of AOP.
Twist :- What is cross cutting in AOP ?
When one or many concerns span across module it is called as cross cutting. Example in
our audit trail example we will probably need to audit trail for customer as well as supplier.
So Audit trail can span across other objects also that is termed as cross cutting.
Below are both the classes actually implemented as per class diagram 8.7. If you see the
“Update” method of the customer class, its doing both of the concerns that is checking
for customer code length and also maintaining the audit trail using the audit trail class.
Public Class ClsCustomer
Private pstrCustcode As String
Private pstrCustName As String
Public Property Code() As String
Get
Return pstrCustcode
End Get
Set(ByVal Value As String)
pstrCustcode = Value
End Set
End Property
Public Property CustomerName() As String
Get
Return pstrCustName
246
End Get
Set(ByVal Value As String)
pstrCustName = Value
End Set
End Property
Public Function Update() As Boolean
‘ first / core concern
If pstrCustcode.Length() > 10 Then
Throw New Exception("Value can not be greater than 10")
End If
' usingthe customer audit trail to do auditing
‘ second concern / system concern
Dim pobjClsAuditTrail As New ClsAuditTrail
With pobjClsAuditTrail
.NewValue = "1001"
.OldValue = "1003"
.UserName = "shiv"
.Update()
End With
' then inserting the customer in database
End Function
End Class
Public Class ClsAuditTrail
Private pstrUserName As String
247
Private pstrOldValue As String
Private pstrNewValue As String
Private pdblLogTime As Double
Public Property UserName() As String
Get
Return pstrUserName
End Get
Set(ByVal Value As String)
pstrUserName = Value
End Set
End Property
Public Property OldValue() As String
Get
Return pstrOldValue
End Get
Set(ByVal Value As String)
pstrOldValue = Value
End Set
End Property
Public Property NewValue() As String
Get
Return pstrNewValue
End Get
Set(ByVal Value As String)
pstrNewValue = Value
248
End Set
End Property
Public Property LogTime() As Double
Get
Return pdblLogTime
End Get
Set(ByVal Value As Double)
pdblLogTime = Value
End Set
End Property
Public Sub Update()
' do the logging activity here
End Sub
End Class
In short the customer class is doing many activity. There is lot of tangling of code. So
how do we overcome this problem...? Simple, separate the System level concern (Audit
Trail) from the core level concern ( Customer code check). This is achieved at this
moment in .NET using attribute programming.
Here is the change to the customer class
Imports System.Reflection
Public Class ClsCustomer
Private pstrCustcode As String
Private pstrCustName As String
Public Property Code() As String
Get
Return pstrCustcode
249
End Get
Set(ByVal Value As String)
pstrCustcode = Value
End Set
End Property
Public Property CustomerName() As String
Get
Return pstrCustName
End Get
Set(ByVal Value As String)
pstrCustName = Value
End Set
End Property
<ClsAuditTrail("Shiv", "1001", "1003", 12)> _
Public Function Update() As Boolean
If pstrCustcode.Length() > 10 Then
Throw New Exception("Value can not be greater than 10")
End If
' usingthe customer audit trail to do auditing
' then inserting the customer in database
250
End Function
End Class
And here is the change to the audit trail class
Imports System.Reflection
<AttributeUsage(AttributeTargets.All)> _
Public Class ClsAuditTrail
Inherits Attribute
Private pstrUserName As String
Private pstrOldValue As String
Private pstrNewValue As String
Private pdblLogTime As Double
Public Property UserName() As String
Get
Return pstrUserName
End Get
Set(ByVal Value As String)
pstrUserName = Value
End Set
End Property
Public Property OldValue() As String
Get
Return pstrOldValue
End Get
251
Set(ByVal Value As String)
pstrOldValue = Value
End Set
End Property
Public Property NewValue() As String
Get
Return pstrNewValue
End Get
Set(ByVal Value As String)
pstrNewValue = Value
End Set
End Property
Public Property LogTime() As Double
Get
Return pdblLogTime
End Get
Set(ByVal Value As Double)
pdblLogTime = Value
End Set
End Property
Public Sub New(ByVal pstrUserName As String, _
ByVal pstrOldValue As String, _
ByVal pstrnewValue As String, _
ByVal plng As Long)
Update()
End Sub
Public Sub Update()
252
(B)What is the namespace in which .NET has the data
functionality classes ?
Following are the namespaces provided by .NET for data management :-
System.data
This contains the basic objects used for accessing and storing relational data, such as
DataSet,DataTable, and DataRelation. Each of these is independent of the type of data
source and the way we connect to it.
System.Data.OleDB
It contains the objects that we use to connect to a data source via an OLE-DB provider,
such as OleDbConnection, OleDbCommand, etc. These objects inherit from the common
base classes, and so have the same properties, methods, and events as the SqlClient
equivalents.
System.Data.SqlClient:
This contains the objects that we use to connect to a data source via the Tabular Data
Stream (TDS) interface of Microsoft SQL Server (only). This can generally provide better
performance as it removes some of the intermediate layers required by an OLE-DB
connection.
System.XML
This Contains the basic objects required to create, read, store, write, and manipulate
XML documents according to W3C recommendations.
(B) Can you give a overview of ADO.NET architecture ?
The most important section in ADO.NET architecture is “Data Provider”. Data Provider
provides access to datasource (SQL SERVER, ACCESS, ORACLE).In short it provides
object to achieve functionalities like opening and closing connection, retrieve data and
update data. In the below figure you can see the four main sections of a data provider :-
√ Connection.
9. ADO.NET
253
√ Command object (This is the responsible object to use stored procedures)
√ Data Adapter (This object acts as a bridge between datastore and dataset).
√ Datareader (This object reads data from data store in forward only mode).
Dataset object represents disconnected and cached data. If you see the diagram it is not
in direct connection with the data store (SQL SERVER, ORACLE etc) rather it talks
with Data adapter, who is responsible for filling the dataset. Dataset can have one or
more Datatable and relations.
Figure :- 9.1 ADO.NET Architecture
254
“DataView” object is used to sort and filter data in Datatable.
Note:- This is one of the favorite questions in .NET. Just paste the picture in your mind
and during interview try to refer that image.
(B)What are the two fundamental objects in ADO.NET ?
Datareader and Dataset are the two fundamental objects in ADO.NET.
(B)What is difference between dataset and datareader ?
Following are some major differences between dataset and datareader :-
√ DataReader provides forward-only and read-only access to data, while the
DataSet object can hold more than one table (in other words more than one
rowset) from the same data source as well as the relationships between them.
√ Dataset is a disconnected architecture while datareader is connected
architecture.
√ Dataset can persist contents while datareader can not persist contents, they
are forward only.
(I)What are major difference between classic ADO and
ADO.NET ?
Following are some major differences between both
√ As in classic ADO we had client and server side cursors they are no more
present in ADO.NET. Note it's a disconnected model so they are no more
applicable.
√ Locking is not supported due to disconnected model.
√ All data persist in XML as compared to classic ADO where data
persisted in Binary format also.
(B)What is the use of connection object ?
They are used to connect a data to a Command object.
√ An OleDbConnection object is used with an OLE-DB provider
255
√ A SqlConnection object uses Tabular Data Services (TDS) with MS SQL Server
(B)What is the use of command objects ?
They are used to connect connection object to Datareader or dataset. Following are the
methods provided by command object :-
√ ExecuteNonQuery :- Executes the command defined in the CommandText
property against the connection defined in the Connection property for a query
that does not return any row (an UPDATE, DELETE or INSERT). Returns
an Integer indicating the number of rows affected by the query.
√ ExecuteReader :- Executes the command defined in the CommandText property
against the connection defined in the Connection property. Returns a "reader"
object that is connected to the resulting rowset within the database, allowing
the rows to be retrieved.
√ ExecuteScalar :- Executes the command defined in the CommandText property
against the connection defined in the Connection property. Returns only
single value (effectively the first column of the first row of the resulting rowset)
any other returned columns and rows are discarded. It is fast and efficient
when only a "singleton" value is required
(B)What is the use of dataadapter ?
These are objects that connect one or more Command objects to a Dataset object. They
provide logic that would get data from the data store and populates the tables in the
DataSet, or pushes the changes in the DataSet back into the data store.
√ An OleDbDataAdapter object is used with an OLE-DB provider
√ A SqlDataAdapter object uses Tabular Data Services with MS SQL Server.
(B)What are basic methods of Dataadapter ?
There are three most commonly used methods of Dataadapter :-
Fill :- Executes the SelectCommand to fill the DataSet object with data from the data
source. It an also be used to update (refresh) an existing table in a DataSet with changes
made to the data in the original datasource if there is a primary key in the table in the
DataSet.
256
FillSchema :- Uses the SelectCommand to extract just the schema for a table from the
data source, and creates an empty table in the DataSet object with all the corresponding
constraints.
Update:- Calls the respective InsertCommand, UpdateCommand, or DeleteCommand for
each inserted, updated,or deleted row in the DataSet so as to update the original data
source with the changes made to the content of the DataSet. This is a little like the
UpdateBatch method provided by the ADO Recordset object, but in the DataSet it can
be used to update more than one table.
(B)What is Dataset object?
The DataSet provides the basis for disconnected storage and manipulation of relational
data. We fill it from a data store,work with it while disconnected from that data store,
then reconnect and flush changes back to the data store if required.
(B)What are the various objects in Dataset ?
Dataset has a collection of DataTable object within the Tables collection. Each DataTable
object contains a collection of DataRow objects and a collection of DataColumn objects.
There are also collections for the primary keys, constraints, and default values used in
this table which is called as constraint collection, and the parent and child relationships
between the tables. Finally, there is a DefaultView object for each table. This is used to
create a DataView object based on the table, so that the data can be searched, filtered or
otherwise manipulated while displaying the data.
Note :- Look back again to the main diagram for ADO.NET architecture for visualizing
this answer in pictorial form.
(B) How can we connect to Microsoft Access , Foxpro ,
Oracle etc ?
Microsoft provides System.Data.OleDb namespace to communicate with databases like
scess , Oracle etc. In short any OLE DB-Compliant database can be connected using
System.Data.OldDb namespace.
Note :- Small sample of OLEDB is provided in “WindowsAppOleDb” which uses
“Nwind.mdb” in bin directory to display data in Listbox.
Private Sub loadData()
257
Dim strPath As String
strPath = AppDomain.CurrentDomain.BaseDirectory
Dim objOLEDBCon As New
OleDbConnection(“Provider=Microsoft.Jet.OLEDB.4.0;Data Source =” &
strPath & “Nwind.mdb”)
Dim objOLEDBCommand As OleDbCommand
Dim objOLEDBReader As OleDbDataReader
Try
objOLEDBCommand = New OleDbCommand(“Select FirstName
from Employees”)
objOLEDBCon.Open()
objOLEDBCommand.Connection = objOLEDBCon
objOLEDBReader = objOLEDBCommand.ExecuteReader()
Do While objOLEDBReader.Read()
lstNorthwinds.Items.Add(objOLEDBReader.GetString(0))
Loop
Catch ex As Exception
Throw ex
Finally
objOLEDBCon.Close()
End Try
End Sub
The main heart is the “Loaddata()” method which actually loads the data in listbox.
Note:- This source code has the connectionstring hard coded in the program itself which is
not a good programming practice. For windows application the best place to store
connectionstring is “App.config”. Also note that
“AppDomain.CurrentDomain.BaseDirectory” function gives the current path of the
running exe which is “BIN” and the MDB file is in that directory. Also note that the
final block which executes irrespective that there is error or not. Thus ensuring that all the
connection to the datastore is freed. Its best practice to put all clean up statements in finally
block thus ensuring that the resources are deallocated properly.
(B) How do we connect to SQL SERVER, which namespace
do we use ?
Below is the code, after the code I have given the explanation for it. For this sample we
will also need a SQL Table setup which I have imported using the DTS wizard.
258
Private Sub LoadData()
‘ note :- with and end with makes your code more readable
Dim strConnectionString As String
Dim objConnection As New SqlConnection
Dim objCommand As New SqlCommand
Dim objReader As SqlDataReader
Try
‘ this gets the connectionstring from the app.config
file.
‘ note if this gives error see where the MDB file is
stored in your pc and point to that
strConnectionString =
AppSettings.Item(“ConnectionString”)
‘ take the connectiostring and initialize the connection
object
With objConnection
.ConnectionString = strConnectionString
.Open()
End With
objCommand = New SqlCommand(“Select FirstName from
Employees”)
With objCommand
.Connection = objConnection
objReader = .ExecuteReader()
End With
‘ looping through the reader to fill the list box
Do While objReader.Read()
lstData.Items.Add(objReader.Item(“FirstName”))
Loop
Catch ex As Exception
Throw ex
Finally
objConnection.Close()
End Try
<appSettings>
<add key=”Connectionstring” value=”Server=ERMBOM1-IT2;User
ID=sa;Database=Employees”/>
</appSettings>
Note:- The above code is provided in CD in folder WindowsAppSqlClient”. Comments in
the code do explain a lot but we will again iterate through the whole code later.
“LoadData” is the main method which loads the data from SQL SERVER. Before
running this code you have to install SQL SERVER in your machine. As we are dealing
259
with SQLCLIENT we need to setup database in SQL SERVER. For this sample I
have imported access “Nwind.mdb” in “SampleAccessDatabase” folder in CD in to
SQlSERVER. Depending on computer you will also have to change the connectionstring in
Web.config file.
For setting up the sample SQL table we can use the DTS import wizard to import the
table. See the below figure which is using data source as Microsoft Access.While importing
the database author had give the database name as “Employees”.
Figure:- 9.2 Loading “Nwind.mdb” in SQL SERVER for the sample
260
Figure :- 9.3 Load only the Employee table.
To make it simple we will only import the employee table as that is the only thing needed
in our sample code.
261
Figure :- 9.4 View of loaded Employee table
Now from interview point of view definitely you are not going to say the whole source
code which is given in the book. Interviewer expects only the broader answer of what are
the steps needed to connect to SQL SERVER. For fundamental sake author has explained
the whole source code. In short you have to explain the “LoadData” method in broader
way. Following are the steps to connect to SQL SERVER :-
√ First import the namespace “System.Data.SqlClient”.
√ Create a connection object as shown in “LoadData” method.
With objConnection
.ConnectionString = strConnectionString
.Open()
End With
√ Create the command object with the SQL. Also assign the created connection
object to command object and execute the reader.
262
objCommand = New SqlCommand(“Select FirstName from Employees”)
With objCommand
.Connection = objConnection
objReader = .ExecuteReader()
End With
√ Finally loop through the reader and fill the list box. If old VB programmers are
expecting the movenext command it’s replaced by Read() which returns true
if there is any data to be read. If the .Read() return’s false that means that it’s
end of datareader and there is no more data to be read.
Do While objReader.Read()
lstData.Items.Add(objReader.Item(“FirstName”))
Loop
√ Do not forget to close the connection object.
Note:- In “LoadData” you will see that connectionstring is stored in Web.config file and is
loaded using “AppSettings.Item(“ConnectionString”)”. While running this sample live on
your database do not forget to change this connectionstring accordingly to your machine name
and SQL SERVER or else the source code will not run.
(B) How do we use stored procedure in ADO.NET and how
do we provide parameters to the stored procedures?
ADO.NET provides the SqlCommand object which provides the functionality of executing
stored procedures.
Note :- Sample code is provided in folder “WindowsSqlClientCommand”. There are two
stored procedures created in same database “Employees” which was created for the previous
question.
CREATE PROCEDURE SelectByEmployee @FirstName nvarchar(200) AS
Select FirstName from Employees where FirstName like @FirstName + '%'
CREATE PROCEDURE SelectEmployee AS
Select FirstName from Employees
If txtEmployeeName.Text.Length = 0 Then
objCommand = New SqlCommand(“SelectEmployee”)
Else
objCommand = New SqlCommand(“SelectByEmployee”)
263
objCommand.Parameters.Add(“@FirstName”,
Data.SqlDbType.NVarChar, 200)
objCommand.Parameters.Item(“@FirstName”).Value =
txtEmployeeName.Text.Trim()
End If
In the above sample not much has been changed only that the SQL is moved to the
stored procedures. There are two stored procedures one is “SelectEmployee” which selects
all the employees and the other is “SelectByEmployee” which returns employee name
starting with a specific character. As you can see to provide parameters to the stored
procedures we are using the parameter object of the command object. In such question
interviewer expects two simple answers one is that we use command object to execute
stored procedures and the parameter object to provide parameter to the stored procedure.
Above sample is provided only for getting the actual feel of it. Be short be nice and get a
job.
(B) How can we force the connection object to close after
my datareader is closed ?
Command method Executereader takes a parameter called as CommandBehavior where
in we can specify saying close connection automatically after the Datareader is close.
pobjDataReader = pobjCommand.ExecuteReader(CommandBehavior.CloseConnection)
(B) I want to force the datareader to return only schema of
the datastore rather than data ?
pobjDataReader = pobjCommand.ExecuteReader(CommandBehavior.SchemaOnly)
(B) How can we fine tune the command object when we are
expecting a single row ?
Again CommandBehaviour enumeration provides two values SingleResult and SingleRow.
If you are expecting a single value then pass “CommandBehaviour.SingleResult” and the
query is optimized accordingly, if you are expecting single row then pass
“CommandBehaviour.SingleRow” and query is optimized according to single row.
(B) Which is the best place to store connectionstring in .NET
projects ?
264
Config files are the best places to store connectionstrings. If it is a web-based application
“Web.config” file will be used and if it is a windows application “App.config” files will be
used.
(B) What are the steps involved to fill a dataset ?
Twist :- How can we use dataadapter to fill a dataset ?
Sample code is provided in “WindowsDataSetSample” folder in CD.”LoadData” has all
the implementation of connecting and loading to dataset. This dataset is finally bind to a
ListBox. Below is the sample code.
Private Sub LoadData()
Dim strConnectionString As String
strConnectionString = AppSettings.Item(“ConnectionString”)
Dim objConn As New SqlConnection(strConnectionString)
objConn.Open()
Dim objCommand As New SqlCommand(“Select FirstName from
Employees”)
objCommand.Connection = objConn
Dim objDataAdapter As New SqlDataAdapter()
objDataAdapter.SelectCommand = objCommand
Dim objDataSet As New DataSet
End Sub
In such type of questions interviewer is looking from practical angle, that have you worked
with dataset and datadapters. Let me try to explain the above code first and then we move
to what steps should be told during interview.
Dim objConn As New SqlConnection(strConnectionString)
objConn.Open()
First step is to open the connection.Again note the connection string is loaded from
config file.
Dim objCommand As New SqlCommand(“Select FirstName from Employees”)
objCommand.Connection = objConn
Second step is to create a command object with appropriate SQL and set the connection
object to this command.
Dim objDataAdapter As New SqlDataAdapter()
265
objDataAdapter.SelectCommand = objCommand
Third steps is to create the Adapter object and pass the command object to the adapter
object.
objDataAdapter.Fill(objDataSet)
Fourth step is to load the dataset using the “Fill” method of the dataadapter.
lstData.DataSource = objDataSet.Tables(0).DefaultView
lstData.DisplayMember = “FirstName”
lstData.ValueMember = “FirstName”
Fifth step is to bind to the loaded dataset with the GUI. At this moment sample has
listbox as the UI. Binding of the UI is done by using DefaultView of the dataset. Just to
revise every dataset has tables and every table has views. In this sample we have only
loaded one table i.e. Employees table so we are referring that with an index of zero.
Just say all the five steps during interview and you will see the smile on the interviewer’s
face and appointment letter in your hand.
(B)What are the various methods provided by the dataset
object to generate XML?
Note:- XML is one of the most important leap between classic ADO and ADO.NET.
So this question is normally asked more generally how can we convert any data to XML
format. Best answer is convert in to dataset and use the below methods.
√ ReadXML
Read’s a XML document in to Dataset.
√ GetXML
This is a function which returns the string containing XML document.
√ WriteXML
This writes a XML data to disk.
(B) How can we save all data from dataset ?
266
Dataset has “AcceptChanges” method which commits all the changes since last time
“Acceptchanges” has been executed.
Note :- This book does not have any sample of Acceptchanges. I leave that to readers as
homework sample. But yes from interview aspect that will be enough.
(B) How can we check that some changes have been made
to dataset since it was loaded ?
Twist :- How can we cancel all changes done in dataset ?
Twist :- How do we get values which are changed in a dataset ?
For tracking down changes Dataset has two methods which comes as rescue “GetChanges
“and “HasChanges”.
GetChanges
Returns dataset which are changed since it was loaded or since Acceptchanges was
executed.
HasChanges
This property indicates that has any changes been made since the dataset was loaded or
acceptchanges method was executed.
If we want to revert or abandon all changes since the dataset was loaded use
“RejectChanges”.
Note:- One of the most misunderstood things about these properties is that it tracks the
changes of actual database. That is a fundamental mistake; actually the changes are related
to only changes with dataset and have nothing to with changes happening in actual database.
As dataset are disconnected and do not know anything about the changes happening in
actual database.
(B) How can we add/remove row’s in “DataTable” object of
“DataSet” ?
267
“Datatable” provides “NewRow” method to add new row to “DataTable”. “DataTable”
has “DataRowCollection” object which has all rows in a “DataTable” object. Following
are the methods provided by “DataRowCollection” object :-
Add
Adds a new row in DataTable
Remove
It removes a “DataRow” object from “DataTable”
RemoveAt
It removes a “DataRow” object from “DataTable” depending on index position of the
“DataTable”.
(B) What is basic use of “DataView” ?
“DataView” represents a complete table or can be small section of rows depending on
some criteria. It is best used for sorting and finding data with in “datatable”.
Dataview has the following method’s :-
Find
It takes a array of values and returns the index of the row.
FindRow
This also takes array of values but returns a collection of “DataRow”.
268
If we want to manipulate data of “DataTable” object create “DataView” (Using the
“DefaultView” we can create “DataView” object) of the “DataTable” object and use the
following functionalities :-
AddNew
Adds a new row to the “DataView” object.
Delete
Deletes the specified row from “DataView” object.
(B) What is the difference between “DataSet” and
“DataReader” ?
Twist :- Why is DataSet slower than DataReader ?
Fourth point is the answer to the twist.
Note:- This is my best question and I expect everyone to answer it. It is asked almost 99%
in all companies....Basic very Basic cram it.
Following are the major differences between “DataSet” and “DataReader” :-
√ “DataSet” is a disconnected architecture, while “DataReader” has live
connection while reading data. If we want to cache data and pass to a
different tier “DataSet” forms the best choice and it has decent XML support.
√ When application needs to access data from more than one table “DataSet”
forms the best choice.
√ If we need to move back while reading records, “datareader” does not support
this functionality.
√ But one of the biggest drawbacks of DataSet is speed. As “DataSet” carry
considerable overhead because of relations, multiple tables etc speed is slower
than “DataReader”. Always try to use “DataReader” wherever possible, as
it’s meant specially for speed performance.
(B) How can we load multiple tables in a DataSet ?
objCommand.CommandText = "Table1"
269
objDataAdapter.Fill(objDataSet, "Table1")
objCommand.CommandText = "Table2"
objDataAdapter.Fill(objDataSet, "Table2")
Above is a sample code which shows how to load multiple “DataTable” objects in one
“DataSet” object. Sample code shows two tables “Table1” and “Table2” in object
ObjDataSet.
lstdata.DataSource = objDataSet.Tables("Table1").DefaultView
In order to refer “Table1” DataTable, use Tables collection of DataSet and the Defaultview
object will give you the necessary output.
(B) How can we add relation’s between table in a DataSet ?
Dim objRelation As DataRelation
objRelation=New
DataRelation("CustomerAddresses",objDataSet.Tables("Customer").Columns("Custid")
,objDataSet.Tables("Addresses").Columns("Custid_fk"))
objDataSet.Relations.Add(objRelation)
Relations can be added between “DataTable” objects using the “DataRelation” object.
Above sample code is trying to build a relationship between “Customer” and “Addresses”
“Datatable” using “CustomerAddresses” “DataRelation” object.
(B) What is the use of CommandBuilder ?
CommandBuilder builds “Parameter” objects automatically. Below is a simple code which
uses commandbuilder to load its parameter objects.
Dim pobjCommandBuilder As New OleDbCommandBuilder(pobjDataAdapter)
pobjCommandBuilder.DeriveParameters(pobjCommand)
Be careful while using “DeriveParameters” method as it needs an extra trip to the Datastore
which can be very inefficient.
270
(B) What’s difference between “Optimistic” and
“Pessimistic” locking ?
In pessimistic locking when user wants to update data it locks the record and till then no
one can update data. Other user’s can only view the data when there is pessimistic locking.
In optimistic locking multiple users can open the same record for updating, thus increase
maximum concurrency. Record is only locked when updating the record. This is the most
preferred way of locking practically. Now a days browser based application is very common
and having pessimistic locking is not a practical solution.
(A) How many ways are there to implement locking in
ADO.NET ?
Following are the ways to implement locking using ADO.NET :-
√ When we call “Update” method of DataAdapter it handles locking internally.
If the DataSet values are not matching with current data in Database it raises
concurrency exception error. We can easily trap this error using Try..Catch
block and raise appropriate error message to the user.
√ Define a Datetime stamp field in the table.When actually you are firing the
UPDATE SQL statements compare the current timestamp with one existing
in the database. Below is a sample SQL which checks for timestamp before
updating and any mismatch in timestamp it will not update the records. This is
the best practice used by industries for locking.
Update table1 set field1=@test where LastTimeStamp=@CurrentTimeStamp
√ Check for original values stored in SQL SERVER and actual changed values.
In stored procedure check before updating that the old data is same as the
current. Example in the below shown SQL before updating field1 we check
that is the old field1 value same. If not then some one else has updated and
necessary action has to be taken.
Update table1 set field1=@test where field1 = @oldfield1value
Locking can be handled at ADO.NET side or at SQL SERVER side i.e. in stored
procedures. For more details of how to implementing locking in SQL SERVER read
“What are different locks in SQL SERVER ?” in SQL SERVER chapter.
271
Note:- This is one of the favorite questions of interviewer, so cram it....When I say cram
itI do not mean it.... I mean understand it. This book has tried to cover ADO.NET as
much as possible, but indeterminist nature of ADO.NET interview questions makes it
difficult to make full justice. But hope so that the above questions will make you quiet
confident during interviews.
(A)How can we perform transactions in .NET?
The most common sequence of steps that would be performed while developing a
transactional application is as follows:
√ Open a database connection using the Open method of the connection object.
√ Begin a transaction using the Begin Transaction method of the connection
object. This method provides us with a transaction object that we will use
later to commit or rollback the transaction. Note that changes caused by any
queries executed before calling the Begin Transaction method will be committed
to the database immediately after they execute. Set the Transaction property
of the command object to the above mentioned transaction object.
√ Execute the SQL commands using the command object. We may use one or
more command objects for this purpose, as long as the Transaction property
of all the objects is set to a valid transaction object.
√ Commit or roll back the transaction using the Commit or Rollback method of
the transaction object.
√ Close the database connection.
(I)What is difference between Dataset. clone and Dataset.
copy ?
Clone: - It only copies structure, does not copy data.
Copy: - Copies both structure and data.
(A)Can you explain the difference between an ADO.NET
Dataset and an ADO Recordset?
There two main basic differences between recordset and dataset :-
272
√ With dataset you an retrieve data from two databases like oracle and sql
server and merge them in one dataset , with recordset this is not possible
√ All representation of Dataset is using XML while recordset uses COM.
√ Recordset can not be transmitted on HTTP while Dataset can be.
(A)Explain in detail the fundamental of connection pooling?
When a connection is opened first time a connection pool is created and is based on the
exact match of the connection string given to create the connection object. Connection
pooling only works if the connection string is the same. If the connection string is different,
then a new connection will be opened, and connection pooling won't be used.
273
Figure 9.5 : - Connection Pooling action.
Lets try to explain the same pictorially. In the above figure you can see there are three
requests “Request1”, “Request2” and “Request3”. “Request1” and “Request3” have
same connection string so no new connection object is created for “Request3” as the
connection string is same. They share the same object “ConObject1”. But new object
“ConObject2” is created for “Request2” as the connection string is different.
Note: - The difference between the connection string is that one has “User id=sa” and other
has “User id=Testing”.
(A)What is Maximum Pool Size in ADO.NET Connection
String?
274
Note :- This chapter is too small to cover SQL Server completely. I will suggest you to buy
my SQL Server Interview Question book to gain full confidence during interview for this
product.
(B) What is normalization? What are different types of
normalization?
Note :- A regular .NET programmer working on projects often stumbles in this question,
which is but obvious. Bad part is sometimes interviewer can take this as a very basic
question to be answered and it can be a turning point for the interview. So let's cram it.
It is set of rules that have been established to aid in the design of tables that are meant to
be connected through relationships. This set of rules is known as Normalization.
Benefits of normalizing your database will include:
√ Avoiding repetitive entries
√ Reducing required storage space
√ Preventing the need to restructure existing tables to accommodate new data.
√ Increased speed and flexibility of queries, sorts, and summaries.
Note :- During interview people are expect to answer maximum of three normal forms and
that’s what is expected practically. Actually you can normalize database to fifth normal
form. But believe this book will answer three normal forms that will put you in decent shape
during interview.
Following are the three normal forms :-
10. SQL SERVER
275
First Normal Form
For a table to be in first normal form, data must be broken up into the smallest units
possible.In addition to breaking data up into the smallest meaningful values, tables in
first normal form should not contain repetitions groups of fields.
Figure :- 10.1 Repeating groups example
For in the above example city1 and city2 are repeating.In order that this table to be in
First normal form you have to modify the table structure as follows.Also not that the
Customer Name is now broken down to first name and last name (First normal form data
should be broken down to smallest unit).
Figure :- 10.2 Customer table normalized to first normal form
Second Normal form
The second normal form states that each field in a multiple field primary keytable must
be directly related to the entire primary key. Or in other words, each non-key field should
be a fact about all the fields in the primary key.
In the above table of customer, city is not linked to any primary field.
276
Figure :- 10.3 Normalized customer table.
Figure :- 10.4 City is now shifted to a different master table.
That takes our database to a second normal form.
Third normal form
A non-key field should not depend on other Non-key field. The field "Total" is dependent
on "Unit price" and "qty".
Figure :- 10.5 Fill third normal form
So now the "Total" field is removed and is multiplication of Unit price * Qty.
Note :- Fourth and Fifth normal form is left as a home work to users.
(B)What is denormalization ?
277
Denormalization is the process of putting one fact in numerous places (its vice-versa of
normalization).Only one valid reason exists for denormalizing a relational design - to
enhance performance.The sacrifice to performance is that you increase redundancy in
database.
(B)What is a candidate key ?
A table may have more than one combination of columns that could uniquely identify the
rows in a table; each combination is a candidate key. During database design you can pick
up one of the candidate keys to be the primary key. For example, in the supplier table
supplierid and suppliername can be candidate key but you will only pick up supplierid as
the primary key.
(B) What are the different types of joins? What is the
difference between them ?
INNER JOIN
Inner join shows matches only when they exist in both tables.Example, in the below SQL
there are two tables Customers and Orders and the inner join in made on Customers
Customerid and Orders Customerid.So this SQL will only give you result with customers
who have orders.If the customer does not have order it will not display that record.
SELECT Customers.*, Orders.* FROM Customers INNER JOIN Orders ON
Customers.CustomerID =Orders.CustomerID
LEFT OUTER JOIN
Left join will display all records in left table of the SQL statement.In SQL below customers
with or without orders will be displayed. Order data for customers without orders appears
as NULL values. For example, you want to determine the amount ordered by each
customer and you need to see who has not ordered anything as well. You can also see the
LEFT OUTER JOIN as a mirror image of the RIGHT OUTER JOIN (Is covered in the
next section) if you switch the side of each table.
SELECT Customers.*, Orders.* FROM Customers LEFT OUTER JOIN Orders ON
Customers.CustomerID =Orders.CustomerID
278
RIGHT OUTER JOIN
Right join will display all records in right table of the SQL statement. In SQL below all
orders with or without matching customer records will be displayed. Customer data for
orders without customers appears as NULL values. For example, you want to determine
if there are any orders in the data with undefined CustomerID values (say, after a conversion
or something like it). You can also see the RIGHT OUTER JOIN as a mirror image of
the LEFT OUTER JOIN if you switch the side of each table.
SELECT Customers.*, Orders.* FROM Customers RIGHT OUTER JOIN Orders
ON Customers.CustomerID =Orders.CustomerID
(I)What are indexes? What is the difference between
clustered and nonclustered indexes?
Indexes in SQL Server are similar to the indexes in books. They help SQL Server retrieve
the data quickly.
There are clustered and nonclustered indexes. A clustered index is a special type of index
that reorders the way in which records in the table are physically stored. Therefore table
can have only one clustered index. The leaf nodes of a clustered index contain the data
pages.
A nonclustered index is a special type of index in which the logical order of the index
does not match the physical stored order of the rows on disk. The leaf node of a
nonclustered index does not consist of the data pages. Instead, the leaf nodes contain
index rows.
(A)How can you increase SQL performance ?
Following are tips which will increase your SQl performance :-
√ Every index increases the time takes to perform INSERTS, UPDATES and
DELETES, so the number of indexes should not be too much. Try to use
maximum 4-5 indexes on one table, not more. If you have read-only table,
then the number of indexes may be increased.
279
√ Keep your indexes as narrow as possible. This reduces the size of the index
and reduces the number of reads required to read the index.
√ Try to create indexes on columns that have integer values rather than character
values.
√ If you create a composite (multi-column) index, the order of the columns in
the key are very important. Try to order the columns in the key as to enhance
selectivity, with the most selective columns to the leftmost of the key.
√ If you want to join several tables, try to create surrogate integer keys for this
purpose and create indexes on their columns.
√ Create surrogate integer primary key (identity for example) if your table will
not have many insert operations.
√ Clustered indexes are more preferable than nonclustered, if you need to select
by a range of values or you need to sort results set with GROUP BY or ORDER
BY.
√ If your application will be performing the same query over and over on the
same table, consider creating a covering index on the table.
√ You can use the SQL Server Profiler Create Trace Wizard with "Identify Scans
of Large Tables" trace to determine which tables in your database may need
indexes. This trace will show which tables are being scanned by queries instead
of using an index.
(A)What is the use of OLAP ?
OLAP is useful because it provides fast and interactive access to aggregated data and the
ability to drill down to detail.
(A)What is a measure in OLAP ?
Measures are the key performance indicator that you want to evaluate. To determine
which of the numbers in the data might be measures. A rule of thumb is: If a number
makes sense when it is aggregated, then it is a measure.
(A)What are dimensions in OLAP ?
280
Dimensions are the categories of data analysis. For example, in a revenue report by month
by sales region, the two dimensions needed are time and sales region. Typical dimensions
include product, time, and region.
(A)What are levels in dimensions ?
Dimensions are arranged in hierarchical levels, with unique positions within each level.
For example, a time dimension may have four levels, such as Year, Quarter, Month, and
Day. Or the dimension might have only three levels, for example, Year, Week, and Day.
The values within the levels are called members. For example, the years 2002 and 2003
are members of the level Year in the Time dimension.
(A)What are fact tables and dimension tables in OLAP ?
Twist :- Can you explain the star schema for OLAP ?
The dimensions and measures are physically represented by a star schema. Dimension
tables revolve around fact table. A fact table contains a column for each measure as well
as a column for each dimension. Each dimension column has a foreign-key relationship
to the related dimension table, and the dimension columns taken together are the key to
the fact table.
(A)What is DTS?
DTS is used to pull data from various sources into the star schema.
(A)What is fillfactor ?
Twist :- When does page split occurs ?
The 'fill factor' option specifies how full SQL Server will make each index page. When
there is no free space to insert new row on the index page, SQL Server will create new
index page and transfer some rows from the previous page to the new one. This operation
is called page splits. You can reduce the number of page splits by setting the appropriate
fill factor option to reserve free space on each index page. The fill factor is a value from
1 through 100 that specifies the percentage of the index page to be left empty. The
default value for fill factor is 0. It is treated similarly to a fill factor value of 100, the
difference in that SQL Server leaves some space within the upper level of the index tree
for FILLFACTOR = 0. The fill factor percentage is used only at the time when the index
is created. If the table contains read-only data (or data that very rarely changed), you can
281
set the 'fill factor' option to 100. When the table's data is modified very often, you can
decrease the fill factor to 70% or whatever you think is best.
(A)What is RAID and how does it work ?
Redundant Array of Independent Disks (RAID) is a term used to describe the technique
of improving data availability through the use of arrays of disks and various data-striping
methodologies. Disk arrays are groups of disk drives that work together to achieve higher
data-transfer and I/O rates than those provided by single large drives. An array is a set of
multiple disk drives plus a specialized controller (an array controller) that keeps track of
how data is distributed across the drives. Data for a particular file is written in segments
to the different drives in the array rather than being written to a single drive.
For speed and reliability, it is better to have more disks. When these disks are arranged in
certain patterns and are use a specific controller, they are called a Redundant Array of
Inexpensive Disks (RAID) set. There are several numbers associated with RAID, but the
most common are 1, 5 and 10.
RAID 1 works by duplicating the same writes on two hard drives. Let us assume you have
two 20 Gigabyte drives. In RAID 1, data is written at the same time to both the drives.
RAID1 is optimized for fast writes.
RAID 5 works by writing parts of data across all drives in the set (it requires at least three
drives). If a drive failed, the entire set would be worthless. To combat this problem, one
of the drives stores a "parity" bit. Think of a math problem, such as 3 + 7 = 10. You can
think of the drives as storing one of the numbers, and the 10 is the parity part. By removing
any one of the numbers, you can get it back by referring to the other two, like this: 3 + X
= 10. Of course, losing more than one could be evil. RAID 5 is optimized for reads.
RAID 10 is a bit of a combination of both types. It doesn't store a parity bit, so it is faster,
but it duplicates the data on two drives to be safe. You need at least four drives for RAID
10. This type of RAID is probably the best compromise for a database server.
Note :- It's difficult to cover complete aspect of RAID in this book. It's better to take some
decent SQL SERVER book for in detail knowledge, but yes from interview aspect you can
probably escape with this answer.
282
(B)What is the difference between DELETE TABLE and
TRUNCATE TABLE commands?
Following are difference between them :-
√ DELETE TABLE syntax logs the deletes thus make the delete operation
slow. TRUNCATE table does not log any information but it logs information
about deallocation of data page of the table so TRUNCATE table is faster as
compared to delete table.
√ DELETE table can have criteria while TRUNCATE can not.
√ TRUNCATE table can not trigger.
Note :- Thanks to all the readers for pointing out my mistake for the above question in my
first edition. I had mentioned that TRUNCATE table can not be rolled back while delete
can be.
(B)If locking is not implemented what issues can occur
?
Following are the problems that occur if you do not implement locking properly in SQL
SERVER.
Lost Updates
Lost updates occur if you let two transactions modify the same data at the same time, and
the transaction that completes first is lost. You need to watch out for lost updates with
the READ UNCOMMITTED isolation level. This isolation level disregards any type of
locks, so two simultaneous data modifications are not aware of each other. Suppose that
a customer has due of 2000$ to be paid. He pays 1000$ and again buys a product of
500$. Lets say that these two transactions are now been entered from two different counters
of the company. Now both the counter user starts making entry at the same time 10:00
AM. Actually speaking at 10:01 AM the customer should have 2000$-1000$+500 =
1500$ pending to be paid. But as said in lost updates the first transaction is not considered
and the second transaction overrides it. So the final pending is 2000$+500$ = 2500$.....I
hope the company does not loose the customer.
283
Non-Repeatable Read
Non-repeatable reads occur if a transaction is able to read the same row multiple times
and gets a different value each time. Again, this problem is most likely to occur with the
READ UNCOMMITTED isolation level. Because you let two transactions modify data
at the same time, you can get some unexpected results. For instance, a customer wants to
book flight, so the travel agent checks for the flights availability. Travel agent finds a seat
and goes ahead to book the seat.While the travel agent is booking the seat, some other
travel agent books the seat. When this travel agent goes to update the record, he gets
error saying that “Seat is already booked”. In short the travel agent gets different status at
different times for the seat.
Dirty Reads
Dirty reads are a special case of non-repeatable read. This happens if you run a report
while transactions are modifying the data that you're reporting on. For example there is a
customer invoice report which runs on 1:00 AM in afternoon and after that all invoices
are sent to the respective customer for payments. Let us say one of the customer has
1000$ to be paid. Customer pays 1000$ at 1:00 AM and at the same time report is run.
Actually customer has no money pending but is still issued an invoice.
Phantom Reads
Phantom reads occur due to a transaction being able to read a row on the first read, but
not being able to modify the same row due to another transaction deleting rows from the
same table. Lets say you edit a record in the mean time somebody comes and deletes the
record, you then go for updating the record which does not exist....Panicked.
Interestingly, the phantom reads can occur even with the default isolation level supported
by SQL Server: READ COMMITTED. The only isolation level that doesn't allow
phantoms is SERIALIZABLE, which ensures that each transaction is completely isolated
from others. In other words, no one can acquire any type of locks on the affected row
while it is being modified.
(B)What are different transaction levels in SQL
SERVER?
Twist :- What are different types of locks in SQL SERVER ?
284
Transaction Isolation level decides how is one process isolated from other process.Using
transaction levels you can implement locking in SQL SERVER.
There are four transaction levels in SQL SERVER :-
READ COMMITTED
The shared lock is held for the duration of the transaction, meaning that no other
transactions can change the data at the same time. Other transactions can insert and
modify data in the same table, however, as long as it is not locked by the first transaction.
READ UNCOMMITTED
No shared locks and no exclusive locks are honored. This is the least restrictive isolation
level resulting in the best concurrency but the least data integrity.
REPEATABLE READ
This setting disallows dirty and non-repeatable reads. However, even though the locks
are held on read data, new rows can still be inserted in the table, and will subsequently be
interpreted by the transaction.
SERIALIZABLE
This is the most restrictive setting holding shared locks on the range of data. This setting
does not allow the insertion of new rows in the range that is locked; therefore, no phantoms
are allowed.
Following is the syntax for setting transaction level in SQL SERVER.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
(I)What are the different locks in SQL SERVER ?
Depending on the transaction level six types of lock can be acquired on data :-
285
Intent
The intent lock shows the future intention of SQL Server's lock manager to acquire locks
on a specific unit of data for a particular transaction. SQL Server uses intent locks to
queue exclusive locks, thereby ensuring that these locks will be placed on the data elements
in the order the transactions were initiated. Intent locks come in three flavors: intent
shared (IS), intent exclusive (IX), and shared with intent exclusive (SIX).
IS locks indicate that the transaction will read some (but not all) resources in the table or
page by placing shared locks.
IX locks indicate that the transaction will modify some (but not all) resources in the table
or page by placing exclusive locks.
SIX locks indicates that the transaction will read all resources, and modify some(but not
all) of them. This will be accomplished by placing the shared locks on the resources read
and exclusive locks on the rows modified. Only one SIX lock is allowed per resource at
one time; therefore, SIX locks prevent other connections from modifying any data in the
resource (page or table), although they do allow reading the data in the same resource.
Shared
Shared locks (S) allow transactions to read data with SELECT statements. Other
connections are allowed to read the data at the same time; however, no transactions are
allowed to modify data until the shared locks are released.
Update
Update locks (U) are acquired just prior to modifying the data. If a transaction modifies a
row, then the update lock is escalated to an exclusive lock; otherwise, it is converted to a
shared lock. Only one transaction can acquire update locks to a resource at one time.
Using update locks prevents multiple connections from having a shared lock that want to
eventually modify a resource using an exclusive lock. Shared locks are compatible with
other shared locks, but are not compatible with Update locks.
Exclusive
Exclusive locks (X) completely lock the resource from any type of access including reads.
They are issued when data is being modified through INSERT, UPDATE and DELETE
statements.
286
Schema
Schema modification locks (Sch-M) are acquired when data definition language statements,
such as CREATE TABLE, CREATE INDEX, ALTER TABLE, and so on are being
executed. Schema stability locks (Sch-S) are acquired when store procedures are being
compiled.
Bulk Update
Bulk update locks (BU) are used when performing a bulk-copy of data into a table with
TABLOCK hint. These locks improve performance while bulk copying data into a table;
however, they reduce concurrency by effectively disabling any other connections to read
or modify data in the table.
(I)Can we suggest locking hints to SQL SERVER ?
We can give locking hints that helps you over ride default decision made by SQL Server.
For instance, you can specify the ROWLOCK hint with your UPDATE statement to
convince SQL Server to lock each row affected by that data modification. Whether it's
prudent to do so is another story; what will happen if your UPDATE affects 95% of rows
in the affected table? If the table contains 1000 rows, then SQL Server will have to
acquire 950 individual locks, which is likely to cost a lot more in terms of memory than
acquiring a single table lock. So think twice before you bombard your code with
ROWLOCKS.
(I)What is LOCK escalation?
Lock escalation is the process of converting of low level locks (like row locks, page
locks) into higher level locks (like table locks). Every lock is a memory structure too
many locks would mean, more memory being occupied by locks. To prevent this from
happening, SQL Server escalates the many fine-grain locks to fewer coarse-grain locks.
Lock escalation threshold was definable in SQL Server 6.5, but from SQL Server 7.0
onwards it's dynamically managed by SQL Server.
(B)What are the different ways of moving data between
databases in SQL Server?
There are lots of option available; you have to choose your option depending upon your
requirements. Some of the options you have are: BACKUP/RESTORE, detaching and
287
attaching databases, replication, DTS, BCP, logshipping, INSERT...SELECT,
SELECT...INTO, creating INSERT scripts to generate data.
(I)What are advantages of SQL 2000 over SQl 7.0 ?
√ User-Defined Functions: User-Defined Functions (UDFs) -- one or more
Transact-SQL statements can be used to encapsulate code for reuse. Userdefined
functions cannot make a permanent change to the data or modify
database tables. UDF can change only local objects for a UDF, such as local
cursors or variables.
√ Distributed Partitioned Views: Distributed partitioned views allow you to
partition tables horizontally across multiple servers. So, you can scale out one
database server to a group of database servers that cooperate to provide the
same performance levels as a cluster of database servers. Due to distributed
partitioned views, SQL Server 2000 now on the first place in the tpc-c tests.
√ New Data Types: These include: bigint, an 8-byte integer type; sql_variant, a
data type that allows the storage of data of different data types; and the table
data type, which allows applications to store results temporarily for later use.
√ INSTEAD OF and AFTER Triggers: There are INSTEAD OF and AFTER
Triggers in SQL Server 2000. INSTEAD OF triggers are executed instead of
the INSERT, UPDATE or DELETE triggering action. AFTER triggers are
executed after the triggering action.
√ Cascading Referential Integrity Constraints: There are new ON DELETE and
ON UPDATE clauses in the REFERENCES clause of the CREATE TABLE
and ALTER TABLE statements. The ON DELETE clause controls what
actions are taken if you attempt to delete a row to which existing foreign keys
point. The ON UPDATE clause defines the actions that are taken if you
attempt to update a candidate key value to which existing foreign keys point.
√ The ON DELETE and ON UPDATE clauses have two options:
NO ACTION :-NO ACTION specifies that the deletion/update
fail with an error.
CASCADE :-CASCADE specifies that all the rows with foreign
keys pointing to the deleted/updated row are also deleted and updated.
288
√ 32 CPU and 64GB Memory Support: SQL Server 2000 Enterprise Edition
running under Windows 2000 DataCenter can support up to 32 CPUs and up
to 64GB of physical memory (RAM) on a computer.
√ XML Support: SQL Server 2000 can use XML to insert, update, and delete
values in the database, and the database engine can return data as Extensible
Markup Language (XML) documents
(B)What is the difference between a HAVING CLAUSE
and a WHERE CLAUSE?
You can use Having Clause with the GROUP BY function in a query and WHERE
Clause is applied to each row before they are part of the GROUP BY function in a query.
(B) What is the difference between UNION and UNION
ALL SQL syntax ?
UNION SQL syntax is used to select information from two tables. But it selects only
distinct records from both the table, while UNION ALL selects all records from both the
tables.
Note :- Selected records should have same datatype or else the syntax will not work.
(I)How can you raise custom errors from stored
procedure ?
The RAISERROR statement is used to produce an ad hoc error message or to retrieve a
custom message that is stored in the sysmessages table. You can use this statement with
the error handling code presented in the previous section to implement custom error
messages in your applications. The syntax of the statement is shown here.
RAISERROR ({msg_id |msg_str }{,severity ,state }
[ ,argument [ ,,...n ] ] ))
[ WITH option [ ,,...n ] ]
A description of the components of the statement follows.
msg_id :-The ID for an error message, which is stored in the error column in sysmessages.
289
msg_str :-A custom message that is not contained in sysmessages.
severity :- The severity level associated with the error. The valid values are 0–25. Severity
levels 0–18 can be used by any user, but 19–25 are only available to members of the
fixed-server role sysadmin. When levels 19–25 are used, the WITH LOG option is required.
state A value that indicates the invocation state of the error. The valid values are 0–127.
This value is not used by SQL Server.
Argument, . . .
One or more variables that are used to customize the message. For example, you could
pass the current process ID (@@SPID) so it could be displayed in the message.
WITH option, . . .
The three values that can be used with this optional argument are described here.
LOG - Forces the error to log in the SQL Server error log and the NT application log.
NOWAIT - Sends the message immediately to the client.
SETERROR - Sets @@ERROR to the unique ID for the message or 50,000.
The number of options available for the statement makes it seem complicated, but it is
actually easy to use. The following shows how to create an ad hoc message with a severity
of 10 and a state of 1.
RAISERROR ('An error occurred updating the NonFatal table',10,1)
--Results--
An error occured updating the NonFatal table
The statement does not have to be used in conjunction with any other code, but for our
purposes it will be used with the error handling code presented earlier. The following
alters the ps_NonFatal_INSERT procedure to use RAISERROR.
USE tempdb
go
ALTER PROCEDURE ps_NonFatal_INSERT
@Column2 int =NULL
AS
290
DECLARE @ErrorMsgID int
INSERT NonFatal VALUES (@Column2)
SET @ErrorMsgID =@@ERROR
IF @ErrorMsgID <>0
BEGIN
RAISERROR ('An error occured updating the NonFatal table',10,1)
END
When an error-producing call is made to the procedure, the custom message is passed to
the client. The following shows the output generated by Query Analyzer.
(I) What is ACID fundamental? What are transactions in
SQL SERVER ?
A transaction is a sequence of operations performed as a single logical unit of work. A
logical unit of work must exhibit four properties, called the ACID (Atomicity, Consistency,
Isolation, and Durability) properties, to qualify as a transaction:
Atomicity
√ A transaction must be an atomic unit of work; either all of its data
modifications are performed or none of them is performed.
Consistency
√ When completed, a transaction must leave all data in a consistent
state. In a relational database, all rules must be applied to the transaction's
modifications to maintain all data integrity. All internal data structures, such
as B-tree indexes or doubly-linked lists, must be correct at the end of the
transaction.
291
Isolation
√ Modifications made by concurrent transactions must be isolated
from the modifications made by any other concurrent transactions. A
transaction either see data in the state it was before another concurrent
transaction modified it, or it sees the data after the second transaction has
completed, but it does not see an intermediate state. This is referred to as
serializability because it results in the ability to reload the starting data and
replay a series of transactions to end up with the data in the same state it was
in after the original transactions were performed.
Durability
√ After a transaction has completed, its effects are permanently in
place in the system. The modifications persist even in the event of a system
failure.
(A) What is DBCC?
DBCC (Database Consistency Checker Commands) is used to check logical and physical
consistency of database structure.DBCC statements can fix and detect problems.They
are grouped in to four categories :-
√ Maintenance commands like DBCC DBREINDEX , DBCC DBREPAR etc ,
they are mainly used for maintenance tasks in SQL SERVER.
√ Miscellaneous commands like DBCC ROWLOCK , DBCC TRACEO etc ,
they are mainly used for enabling row-level locking or removing DLL from
memory.
√ Status Commands like DBCC OPENTRAN , DBCC SHOWCONTIG etc ,
they are mainly used for checking status of the database.
√ Validation Commands like DBCC CHECKALLOC,DBCC
CHECKCATALOG etc , they perform validation operations on database.
Note :- Check MSDN for list of all DBCC commands, it is very much possible specially
during DBA interviews they can ask in depth individual commands.
Below is a sample screen in which DBCC SHOWCONTIG command is run. DBCC
SHOWCONTIG is used to display fragmentation information for the data and indexes
of the specified table.In the sample screen “Customer” table is checked for fragmentation
292
information. If you look at the figure “Scan density” is 100 if everything isucontigious in
this image it is 95.36% which is decent percentage. So such type of useful information
can be collected by DBCC command and database performance and maintenance can be
improved.
293
Figure :- 10.6 DBCC SHOWCONTIG command in action.
(A) What is the purpose of Replication ?
Replication is way of keeping data synchronized in multiple databases. SQL server
replication has two important aspects publisher and subscriber.
Publisher
Database server that makes data available for replication is called as Publisher.
294
Subscriber
Database Servers that get data from the publishers is called as Subscribers.
(A) What are the different types of replication
supported by SQL SERVER ?
There are three types of replication supported by SQL SERVER:-
Snapshot Replication.
Snapshot Replication takes snapshot of one database and moves it to the other database.
After initial load data can be refreshed periodically. The only disadvantage of this type of
replication is that all data has to be copied each time the table is refreshed.
Transactional Replication
In transactional replication data is copied first time as in snapshot replication, but later
only the transactions are synchronized rather than replicating the whole database.You
can either specify to run continuously or on periodic basis.
Merge Replication.
Merge replication combines data from multiple sources into a single central database.Again
as usual the initial load is like snapshot but later it allows change of data both on subscriber
and publisher, later when they come on-line it detects and combines them and updates
accordingly.
(I) What is BCP utility in SQL SERVER ?
BCP (Bulk Copy Program) is a command line utility by which you can import and export
large amounts of data in and out of SQL SERVER database.
Below is a sample which shows BCP in action.
295
Figure :- 10.7 Export BCP utility in action
296
Figure :- 10.8 Import BCP utility in action
(I)What are the different types of triggers in SQl
SERVER 2000 ?
There are two types of triggers :-
√ INSTEAD OF triggers
INSTEAD OF triggers fire in place of the triggering action. For example, if an INSTEAD
OF UPDATE trigger exists on the Sales table and an UPDATE statement is executed
against the Salestable, the UPDATE statement will not change a row in the sales table.
Instead, the UPDATE statement causes the INSTEAD OF UPDATE trigger to be
executed, which may or may not modify data in the Sales table.
297
√ AFTER triggers
AFTER triggers execute following the SQL action, such as an insert, update, or delete.
This is the traditional trigger which existed in SQL SERVER.
INSTEAD OF triggers gets executed automatically before the Primary Key and the Foreign
Key constraints are checked, whereas the traditional AFTER triggers gets executed after
these constraints are checked.
Unlike AFTER triggers, INSTEAD OF triggers can be created on views.
(A)If we have multiple AFTER Triggers on table how can
we define the sequence of the triggers ?
If a table has multiple AFTER triggers, then you can specify which trigger should be
executed first and which trigger should be executed last using the stored procedure
sp_settriggerorder. All the other triggers are in an undefined order which you cannot
control.
(A)What is SQl injection ?
It is a Form of attack on a database-driven Web site in which the attacker executes
unauthorized SQL commands by taking advantage of insecure code on a system connected
to the Internet, bypassing the firewall. SQL injection attacks are used to steal information
from a database from which the data would normally not be available and/or to gain
access to an organization’s host computers through the computer that is hosting the
database.
SQL injection attacks typically are easy to avoid by ensuring that a system has strong
input validation.
As name suggest we inject SQL which can be relatively dangerous for the database.
Example this is a simple SQL
SELECT email, passwd, login_id, full_name
FROM members
WHERE email = 'x'
Now somebody does not put “x” as the input but puts “x ; DROP TABLE members;”.
So the actual SQL which will execute is :-
298
SELECT email, passwd, login_id, full_name
FROM members
WHERE email = 'x' ; DROP TABLE members;
Think what will happen to your database.
What is the difference between Stored Procedure (SP)
and User Defined Function (UDF)?
Following are some major differences between a stored procedure and user defined
functions:-
√ UDF can be executed using the “SELECT” clause while SP’s can not be.
√ UDF can not be used in XML FOR clause but SP’s can be used.
√ UDF does not return output parameters while SP’s return output parameters.
√ If there is an error in UDF its stops executing. But in SP’s it just ignores the
error and moves to the next statement.
√ UDF can not make permanent changes to server environments while SP’s can
change some of the server environment.
Note :- SQL Server product is equivalently important from interview point of view. Below
are questions taken from my second book “SQL Server Interview questions”. If you are
interested in buying the book mail bpb@bol.net.in / bpb@vsnl.com or call the nearest
BPB book stall for my book. For shop phone numbers you can either see the back or front
page of the book.
Database Concepts
What is database or database management systems (DBMS)?
What is the difference between DBMS and RDBMS ?
What are CODD rules?
Is access database a RDBMS?
What is the main difference between ACCESS and SQL SERVER?
299
What is the difference between MSDE and SQL SERVER 2000?
What is SQL SERVER Express 2005 Edition?
What is SQL Server 2000 Workload Governor?
What is the difference between SQL SERVER 2000 and 2005?
What are E-R diagrams?
How many types of relationship exist in database designing?
Can you explain Fourth Normal Form?
Can you explain Fifth Normal Form?
What’s the difference between Fourth and Fifth normal form?
Have you heard about sixth normal form?
What is Extent and Page?
What are the different sections in Page?
What are page splits?
In which files does actually SQL Server store data?
What is Collation in SQL Server?
Can we have a different collation for database and table?
SQL
Revisiting basic syntax of SQL?
What are “GRANT” and “REVOKE’ statements?
What is Cascade and Restrict in DROP table SQL?
How to import table using “INSERT” statement?
What is a DDL, DML and DCL concept in RDBMS world?
What are different types of joins in SQL?
What is “CROSS JOIN”?
300
Who will you select the first record in a given set of rows?
How do you sort in SQL?
How do you select unique rows using SQL?
Can you name some aggregate function is SQL Server?
What is the default “SORT” order for a SQL?
What is a self-join?
What’s the difference between DELETE and TRUNCATE ?
Select addresses which are between ‘1/1/2004’ and ‘1/4/2004’?
What are Wildcard operators in SQL Server?
What’s the difference between “UNION” and “UNION ALL” ?
What are cursors and in which situations you will use them?
What are the steps to create a cursor?
What are the different Cursor Types?
What are “Global” and “Local” cursors?
What is “Group by” clause?
What is ROLLUP?
What is CUBE?
What is the difference between “HAVING” and “WHERE” clause?
What is “COMPUTE” clause in SQL?
What is “WITH TIES” clause in SQL?
What does “SET ROWCOUNT” syntax achieves?
What is a Sub-Query?
What is “Correlated Subqueries”?
What is “ALL” and “ANY” operator?
What is a “CASE” statement in SQL?
301
What does COLLATE Keyword in SQL signify?
What is CTE (Common Table Expression)?
Why should you use CTE rather than simple views?
What is TRY/CATCH block in T-SQL?
What is PIVOT feature in SQL Server?
What is UNPIVOT?
What are RANKING functions?
What is ROW_NUMBER()?
What is RANK() ?
What is DENSE_RANK()?
What is NTILE()?
What is SQl injection ?
.NET Integration
What are steps to load a .NET code in SQL SERVER 2005?
How can we drop an assembly from SQL SERVER?
Are changes made to assembly updated automatically in database?
Why do we need to drop assembly for updating changes?
How to see assemblies loaded in SQL Server?
I want to see which files are linked with which assemblies?
Does .NET CLR and SQL SERVER run in different process?
Does .NET controls SQL SERVER or is it vice-versa?
Is SQLCLR configured by default?
How to configure CLR for SQL SERVER?
302
Is .NET feature loaded by default in SQL Server?
How does SQL Server control .NET run-time?
What’s a “SAND BOX” in SQL Server 2005?
What is an application domain?
How are .NET Appdomain allocated in SQL SERVER 2005?
What is Syntax for creating a new assembly in SQL Server 2005?
Does Assemblies loaded in database needs actual .NET DLL?
You have an assembly which is dependent on other assemblies, will SQL Server load the
dependent assemblies?
Does SQL Server handle unmanaged resources?
What is Multi-tasking?
What is Multi-threading?
What is a Thread ?
Can we have multiple threads in one App domain?
What is Non-preemptive threading?
What is pre-emptive threading?
Can you explain threading model in SQL Server?
How does .NET and SQL Server thread work?
How is the exception in SQLCLR code handled?
Are all .NET libraries allowed in SQL Server?
What is “Hostprotectionattribute” in SQL Server 2005?
How many types of permission level are there for an assembly?
In order that an assembly gets loaded in SQL Server what type of checks are done?
Can you name system tables for .NET assemblies?
Are two version of same assembly allowed in SQL Server?
303
How are changes made in assembly replicated?
Is it a good practice to drop a assembly for changes?
In one of the projects following steps where done, will it work?
What does Alter assembly with unchecked data signify?
How do I drop an assembly?
Can we create SQLCLR using .NET framework 1.0?
While creating .NET UDF what checks should be done?
How do you define a function from the .NET assembly?
Can you compare between T-SQL and SQLCLR?
With respect to .NET is SQL SERVER case sensitive?
Does case sensitive rule apply for VB.NET?
Can nested classes be accessed in T-SQL?
Can we have SQLCLR procedure input as array?
Can object datatype be used in SQLCLR?
How is precision handled for decimal datatypes in .NET?
How do we define INPUT and OUTPUT parameters in SQLCLR?
Is it good to use .NET datatypes in SQLCLR?
How to move values from SQL to .NET datatypes?
What is System.Data.SqlServer?
What is SQLContext?
Can you explain essential steps to deploy SQLCLR?
How to create function in SQL Server using .NET?
How do we create trigger using .NET?
How to create User Define Functions using .NET?
How to create aggregates using .NET?
304
What is Asynchronous support in ADO.NET?
What is MARS support in ADO.NET?
What is SQLbulkcopy object in ADO.NET?
How to select range of rows using ADO.NET?
What are the different types of triggers in SQl SERVER 2000 ?
If we have multiple AFTER Triggers on table how can we define the sequence of the
triggers ?
How can you raise custom errors from stored procedure ?
ADO.NET
Which are namespaces for ADO.NET?
Can you give a overview of ADO.NET architecture?
What are the two fundamental objects in ADO.NET?
What is difference between dataset and datareader?
What are major difference between classic ADO and ADO.NET?
What is the use of connection object?
What are the methods provided by the command object?
What is the use of “Dataadapter”?
What are basic methods of “Dataadapter”?
What is Dataset object?
What are the various objects in Dataset?
How can we connect to Microsoft Access, FoxPro, Oracle etc?
What’s the namespace to connect to SQL Server?
How do we use stored procedure in ADO.NET?
305
How can we force the connection object to close?
I want to force the datareader to return only schema?
Can we optimize command object when there is only one row?
Which is the best place to store connectionstring?
What are steps involved to fill a dataset?
What are the methods provided by the dataset for XML?
How can we save all data from dataset?
How can we check for changes made to dataset?
How can we add/remove rows in “DataTable” object of “DataSet”?
What’s basic use of “DataView”?
What is the difference between “DataSet” and “DataReader”?
How can we load multiple tables in a DataSet?
How can we add relations between table in a DataSet?
What’s the use of CommandBuilder?
What is the difference between “Optimistic” and “Pessimistic” locking?
How many ways are there to implement locking in ADO.NET?
How can we perform transactions in .NET?
What is the difference between Dataset. clone and Dataset. copy?
What is the difference between Dataset and ADO Recordset?
Notification Services
What are notification services?
What are basic components of Notification services?
Can you explain architecture of Notification Services?
306
Which are the two XML files needed for notification services?
What is Nscontrols command?
What are the situations you will use “Notification” Services?
Service Broker
What do we need Queues?
What is “Asynchronous” communication?
What is SQL Server Service broker?
What are the essential components of SQL Server Service broker?
What is the main purpose of having Conversation Group?
How to implement Service Broker?
How do we encrypt data between Dialogs?
XML Integration
What is XML?
What is the version information in XML?
What is ROOT element in XML?
If XML does not have closing tag will it work?
Is XML case sensitive?
What’s the difference between XML and HTML?
Is XML meant to replace HTML?
Can you explain why your project needed XML?
What is DTD (Document Type definition)?
What is well formed XML?
What is a valid XML?
307
What is CDATA section in XML?
What is CSS?
What is XSL?
What is Element and attributes in XML?
Can we define a column as XML?
How do we specify the XML data type as typed or untyped?
How can we create the XSD schema?
How do I insert in to a table which has XSD schema attached to it?
What is maximum size for XML datatype?
What is Xquery?
What are XML indexes?
What are secondary XML indexes?
What is FOR XML in SQL Server?
Can I use FOR XML to generate SCHEMA of a table? How?
What is the OPENXML statement in SQL Server?
I have huge XML file which we want to load in database?
How to call stored procedure using HTTP SOAP?
What is XMLA?
Data Warehousing/Data Mining
What is “Data Warehousing”?
What are Data Marts?
What are Fact tables and Dimension Tables?
What is Snow Flake Schema design in database?
308
What is ETL process in Data warehousing?
How can we do ETL process in SQL Server?
What is “Data mining”?
Compare “Data mining” and “Data Warehousing”?
What is BCP?
How can we import and export using BCP utility?
During BCP we need to change the field position or eliminate some fields
how can we achieve this?
What is Bulk Insert?
What is DTS?
Can you brief about the Data warehouse project you worked on?
What is an OLTP (Online Transaction Processing) System?
What is an OLAP (On-line Analytical processing) system?
What is Conceptual, Logical and Physical model?
What is Data purging?
What is Analysis Services?
What are CUBES?
What are the primary ways to store data in OLAP?
What is META DATA information in Data warehousing projects?
What is multi-dimensional analysis?
What is MDX?
How did you plan your Data ware house project?
What are different deliverables according to phases?
Can you explain how analysis service works?
What are the different problems that “Data mining” can solve?
309
What are different stages of “Data mining”?
What is Discrete and Continuous data in Data mining world?
What is MODEL is Data mining world?
How are models actually derived?
What is a Decision Tree Algorithm?
Can decision tree be implemented using SQL?
What is Naïve Bayes Algorithm?
Explain clustering algorithm?
Explain in detail Neural Networks?
What is Back propagation in Neural Networks?
What is Time Series algorithm in data mining?
Explain Association algorithm in Data mining?
What is Sequence clustering algorithm?
What are algorithms provided by Microsoft in SQL Server?
How does data mining and data warehousing work together?
What is XMLA?
What is Discover and Execute in XMLA?
Integration Services/DTS
What is Integration Services import / export wizard?
What are prime components in Integration Services?
How can we develop a DTS project in Integration Services?
Replication
310
What is the best way to update data between SQL Servers?
What are the scenarios you will need multiple databases with schema?
How will you plan your replication?
What are publisher, distributor and subscriber in “Replication”?
What is “Push” and “Pull” subscription?
Can a publication support push and pull at one time?
What are the different models / types of replication?
What is Snapshot replication?
What are the advantages and disadvantages of using Snapshot replication?
What type of data will qualify for “Snapshot replication”?
What’s the actual location where the distributor runs?
Can you explain in detail how exactly “Snapshot Replication” works?
What is merge replication?
How does merge replication works?
What are advantages and disadvantages of Merge replication?
What is conflict resolution in Merge replication?
What is a transactional replication?
Can you explain in detail how transactional replication works?
What are data type concerns during replications?
Reporting Services
Can you explain how can we make a simple report in reporting services?
How do I specify stored procedures in Reporting Services?
311
What is the architecture for “Reporting Services “?
Database Optimization
What are indexes?
What are B-Trees?
I have a table which has lot of inserts, is it a good database design to create indexes on
that table?
What are “Table Scan’s” and “Index Scan’s”?
What are the two types of indexes and explain them in detail?
What is “FillFactor” concept in indexes?
What is the best value for “FillFactor”?
What are “Index statistics”?
How can we see statistics of an index?
How do you reorganize your index, once you find the problem?
What is Fragmentation?
How can we measure Fragmentation?
How can we remove the Fragmented spaces?
What are the criteria you will look into while selecting an index?
What is “Index Tuning Wizard”?
What is an Execution plan?
How do you see the SQL plan in textual format?
What is nested join, hash join and merge join in SQL Query plan?
What joins are good in what situations?
What is RAID and how does it work ?
312
Transaction and Locks
What is a “Database Transactions “?
What is ACID?
What is “Begin Trans”, “Commit Tran”, “Rollback Tran” and “Save Tran”?
What are “Checkpoint’s” in SQL Server?
What are “Implicit Transactions”?
Is it good to use “Implicit Transactions”?
What is Concurrency?
How can we solve concurrency problems?
What kind of problems occurs if we do not implement proper locking strategy?
What are “Dirty reads”?
What are “Unrepeatable reads”?
What are “Phantom rows”?
What are “Lost Updates”?
What are different levels of granularity of locking resources?
What are different types of Locks in SQL Server?
What are different Isolation levels in SQL Server?
What are different types of Isolation levels in SQL Server?
If you are using COM+ what “Isolation” level is set by default?
What are “Lock” hints?
What is a “Deadlock” ?
What are the steps you can take to avoid “Deadlocks” ?
How can I know what locks are running on which resource?
313
(B) What is UML?
The Unified Modeling Language (UML) is a graphical language for visualizing, specifying,
constructing, and documenting the artifacts of a software-intensive system.UML provides
blue prints for business process, System function, programming language statements,
database schemas and reusable components.
(I) How many types of diagrams are there in UML ?
Twist :- Explain in short all types of diagrams in UML ?
There are nine types of diagrams in UML :-
Use case diagram:
They describe "WHAT" of a system rather than "HOW" the system does it.They are
used to identify the primary elements and processes that form the system. The primary
elements are termed as "actors" and the processes are called "use cases". Use Case diagrams
shows "actors" and there "roles".
Class diagram:
From the use case diagram we can now go to detail design of system, for which the
primary step is class diagram. The best way to identify classes is to consider all "NOUNS"
in use cases as classes, "VERBS" as methods of classes, relation between actors can then
be used to define relation between classes. The relationship or association between the
classes can be either an "is-a" or "has-a" relationship which can easily be identified from
use cases.
Object diagram:
An object is an instance of a class. Object diagram captures the state of classes in the
system and their relationships or associations at a specific point of time.
State diagram:
A state diagram, as the name suggests, represents the different states that objects in the
system undergo during their life cycle. Object change in response to certain simulation so
11. UML
314
this simulation effect is captured in state diagram. So basically it has a initial state and
final state and events that happen in between them. Whenever you think that some
simulations are complicated you can go for this diagram.
Sequence diagram:
Sequence diagrams can be used to explore the logic of a complex operation, function, or
procedure. They are called sequence diagrams because sequential nature is shown via
ordering of messages. First message starts at the top and the last message ends at bottom.
The important aspect of a sequence diagram is that it is time-ordered. This means that
the exact sequence of the interactions between the objects is represented step by step.
Different objects in the sequence diagram interact with each other by passing "messages".
Collaboration diagram:
A collaboration diagram groups together the interactions between different objects to
fulfill a common purpose.
Activity diagram:
Activity diagram is typically used for business process modeling, for modeling the logic
captured by a single use case, or for visualizing the detailed logic of a business
rule.Complicated process flows in the system are captured in the activity diagram. Similar
to a state diagram, an activity diagram also consists of activities, actions, transitions,
initial and final states, and guard conditions. But difference is state diagrams are in context
of simulation while activity gives detail view of business logic.
Deployment diagram:
Deployment diagrams show the hardware for your system, the software that is installed
on that hardware, and the middleware used to connect the disparate machines to one
another. It shows how the hardware and software work together to run a system. In one
line its shows the deployment view of the system.
Component diagram:
The component diagram represents the high-level parts that make up the system. From
.NET angle point of view they form the "NAMESPACES". This diagram depicts, at a
315
high level, what components form part of the system and how they are interrelated. Its
shows the logical grouping of classes or group of other components.
Note :- The best way to remember all the blocks of UML is “Serve cool SOUP during
church ceremony” that covers State chart, Class diagrams, Sequence diagram, Object
diagram, Use Case diagram, Package diagram, Deployment diagram, Collaboration
diagram, Component diagram.
(B) What are advantages of using UML?
Twist: - What is Modeling and why UML ?
As the name suggest UNIFIED MODELING LANGUAGE. Modelling has been around
for years, not only in software field but also in other trades like civil, mechanical etc.
Example in civil engineering drawing the main architecture built of diagram is a model by
itself. Modelling makes complex and huge system to break up in to simple and discrete
pieces that can be individually understood. Example simple flowchart drawing is modeling.
There are two main advantages of modeling:-
√ Readability: - Representing your whole architecture in flowchart, class diagrams,
ER diagrams etc makes your project more readable. Especially when
programmer’s change jobs handover becomes easier. More the project is not
readable more the dependencies.
√ Reusability: - After the system is more readable and broken down to pieces, it
becomes easier to identify redundant and similar modules. Thus increasing
reusability.
So why UML? Well different languages have different ways of coding and syntaxes. In
order to bring all languages in one roof UML is in to picture. As the term comes in
UNIFIED, it unifies all disparate languages in one roof so that can be understood by
people who are working on some other platforms.
(A)What is the sequence of UML diagrams in project?
Twist: - How did you implement UML in your project?
First let me say some fact about this question, you can not implement all the nine diagrams
given by UML in one project; you can but can be very rare scenario. The way UML is
implemented in project varies from project to project and company to company.
316
Second very important point to remember is normally all diagrams are not implemented
in project, but some basic diagrams are important to have in order that project is readable.
When we talk about projects every project have phases example (Requirements phase,
design phase, coding phase etc ). As every phase of the software cycle proceeds these
diagrams come in picture. Some diagrams span across multiple phases.
Note: - If you want to have a detail about software life cycle look out for chapter “Project
Management”.
Normally following are different basic phases:-
Requirement phase (Use Case Diagrams, Activity diagrams)
Requirement phase is the phase where you normally gather requirement and Use Cases
are the best things to make explanation of the system. In requirement phase you can
further make complicated Use Cases more simple and easy to understand by using activity
diagrams, but I do not see it as must in every project. If the Use cases are really complicated
go for a Activity diagram. Example CRUD (creates, read, update and delete) operation
use cases have no significance for making activity diagrams. So in short the outcome
UML documents from requirement phase will be Use Case and Activity diagram documents
(Activity diagram documents will only be there if there are complicated Use Cases to be
simplified).
Just a small Twist: - Do I need all UML diagrams in a project?
Note: - This question is specially asked to know have you actually used UML. I have seen
many guys trying to give some jack of all answers saying “YES”. Beware it is a trap.
Not all diagrams are needed in project example: - Activity diagrams will only be needed
when you want some simplified look of a complicated use case.
Design phase (Class diagrams, object diagrams, Component diagrams,
Collaboration diagrams, Deployment diagrams, Sequence diagrams)
Design phase is the phase where you design your technical architecture of your project.
Now again in this you do not use all UML documents of a project.
But the next document after the Use Case document will be the Component diagram.
Component diagrams form a high level classification of the system. So after “Use Cases”
just try to come out with a high level classification / grouping of related functionalities.
317
This should be compulsory diagram as outcome of this document will form
“NAMESPACES” structure of .NET project.
Ok now once your high level grouping is done you can go ahead with class diagrams.
Especially from Use Case you get the “NOUNS” and “VERBS” which can form the class
name and the method name respectively. From my point of view class diagrams should
be compulsory in projects.
Object diagrams are not compulsory it depends on how complicated your project. Object
diagrams shows the relation between instances of class at runtime. In short it captures
the state and relation of classes at any given moment of time. Example you have class
which creates objects of different classes, its like a factory. In class diagram you will only
show that it as a simple class with a method called as “CreateObject”. But in object
diagrams actually you will show the types of instances create from that object.
Collaboration diagrams mainly depict interaction between object to depict some purpose.
I find this diagram to be more useful than Object diagrams as they are addressed for some
purpose example “Login Process” which will use “Login object”, “User Object” etc to
fulfill the login purpose. So if you find the process very complicated go for this diagram.
I see as a thumb rule if there is an activity diagram which show some serious complicated
scenarios. I will like to go for this diagram in order to simplify the explanation.
State chart diagram is again created if your project requires it. If your project has some
complicated start and end states to show then this diagram is most useful. Recently I was
making a call center project where the agent phone pickup and hang state has to be
depicted. So my first state was when agent picks up the phone and the final stage was
when agent hangs the phone, in between process was very complicated, which can only
be shown by using state chart diagrams.
Sequence diagrams are needed if some sequence is complicated. Do not confuse sequence
diagrams with Activity diagram, Activity diagrams map to a Use Case while sequence
diagrams show object interaction in sequence.
Deployment diagrams are again not a compulsory requirement. It will show the hardware
and software deployment of your system. If you really have leisure in your project go for
it or if you want to make the client smile seeing some diagrams.
Implementation phase / Coding phase (Class diagrams for reverse
318
engineering, Other diagrams for validity check)
In this phase mostly class diagrams are re-engineered with the source code. But other
diagrams are also present for validity check example state chart diagrams will be used in
case to check that the both activity between those states follow the proper logic. If some
things have to be changed then again there is iteration backward to the Requirement
phase.
Testing phase
This phase mostly goes for the testing department. I am not talking about preparing UTP
plans but SITP plans. Where the testing department will look at all diagrams to prepare a
test plan and execute it. Example it will see the Use Case document to see the business
rules, it will see the activity diagram and sequence diagrams to see the proper flow of
modules. If some things are not proper there is iteration back to the Design phase.
Roll out and close over phases.
All document just to re-check that things are proper, example all modules deployed
according to the deployment diagrams, are all business rules in Use Cases satisfied.
Let us revise the following points:-
√ Not all diagrams are compulsory.
√ The minimum diagrams according to software life cycle phases are :-
Requirement phase: - Use Case Diagrams
Design Phase: - Component diagrams, Class diagrams
Implementation phase: - All diagrams derived from pervious phases
specially class diagram for reverse engineering.
Testing phase: - All diagrams derived from requirement and design phases
for verification and preparing test plans.
Roll out and close over phase: - All document derived from Design phase
and requirement phases.
Below is a sample figure which shows all the documents in relevant phases.
319
Figure :-11.1 Phase mapping with UML documents
320
Note:- This book will now attempt to describe every element of a UML diagram. But it is
advisable that you should install any decent UML tool and do a small practice of one or
two diagrams which will make you comfortable during interview.
(A)Give a small brief explanation of all Elements in activity diagrams?
Figure :- 11.2 Elements of Activity Diagram
Action State :- It is a type of state that has an internal action and one outgoing event that
would complete the internal action.
State :- It is a condition when following events occur:-
321
√ Object satisfies a condition.
√ Or performs a action.
√ Or wait for a event to happen.
Initial State:- It represents a state before any event occurs.
Final State:- Represents completion of an activity.
Transition Fork::- Denotes beginning of parallel path activities.
Transition Join: - Denotes merging of parallel path activities.
Control Flow: - Represents relationship between two states and actions. In short it indicates
that an object in one state is entering some other state.
Object Flow: - Connects an object flow state to control flow or action state.
Object in State: - Indicate the object’s state after manipulation by multiple activities.
Decisions: - Defines if there are any condition’s in the path.
Swim Lanes: - Assigns responsibility to action states.
Signal receipt Shape: - Used to replace an event label on a transition.
Signal Send Shape: - Used to replace an event label on a transition.
Constraint: - Conditions that must be maintained true in order the system is valid.
322
2-Element Constraint: - It show a constraint on two classes or associations.
OR constraint: - It show an OR constraint on two classes or associations.
(A) Explain Different elements of a collaboration diagram ?
Figure :- 11.3 Elements of Collaboration Diagrams
Classifier Role :- It classifies a role.
Association Role :- It shows the relation between two classifier roles.
Multi-Object :- It used to show operation related to entire set of objects rather than on a
single object.
Constraint :- Conditions which must be maintained as true in order that system is valid.
323
2-Element Constraint: - It shows a constraint on two classes or associations.
OR constraint: - It shows an OR constraint on two classes or associations.
(A) Explain Component diagrams ?
Figure :- 11.4 Elements of component diagrams
Package: - It logically make group of element of a UML model.
Component: - It’s the actual implementation or physical module of a UML system.
324
Node: - A physical system which represents a processing resource, example PC or a host
machine.
InterFace :- It specifies the externally operations of a class, component, package, or other
element without specifying internal structure.
Dependency :- Shows relationship between two elements.
2-Element Constraint: - It shows a constraint on two classes or associations.
OR constraint: - It shows an OR constraint on two classes or associations.
325
(A) Explain all parts of a deployment diagram?
Figure : - 11.5 Elements of Deployment Diagram
Package: - It logically groups element of a UML model.
Node: - A physical system which represents a processing resource, example PC or a host
machine.
Component: - It’s the actual implementation or physical module of a UML system.
Node instance: - It’s a runtime physical instance of a processing resource.
326
Component Instance: - It represents an implementation unit that has identity at run time
and can contain objects. A component could be contained within a node instance.
InterFace :- It specifies the external operations of a class, component, package, or other
element without specifying internal structure.
Object: - Instance of a class.
Composition shape: - It is a form of aggregation that indicates that a part may belong to
only one element or life time of the element.
Communication: - How an actor Dependency: - Shows relationship between two elements.
2-Element Constraint: - It shows a constraint on two classes or associations.
OR constraint: - It shows an OR constraint on two classes or associations.
327
(A) Describe the various components in sequence diagrams?
Figure :-11.6 Elements of Sequence diagrams
Object lifeline: - It represents the lifetime of an object creation and its destruction. If the
object is created or destroyed during the time period the diagram represents, then the
lifeline stops or starts at the appropriate point. An object's destruction is marked with a
large X.
Activation: - It’s time period during which actor is performing a action.
Lifeline :- This says that there exists some condition on the object lifetime.
328
Message: - It shows communication between objects that conveys information and results
in an action.
Message (call):- It’s same like message but also conveys some information and results in
action.
All messages have same definition as the Message (Call) given above.
2-Element Constraint: - It shows a constraint on two classes or associations.
OR constraint: - It shows an OR constraint on two classes or associations.
329
(A) What are the element in State Chart diagrams ?
Figure :- 11.7 Elements of State Chart Diagrams
State: - It’s a condition when following events occur:-
√ Object satisfies a condition.
√ Or performs a action.
√ Or waits for a event to happen.
330
Composite State :- It has one or more sub states.
Initial State: - It represents a state before any event occurs.
Final State: - Represents completion of an activity.
Transition :- Shows the change of one state to other.
Transition Fork: - Denotes beginning of parallel path activities.
Transition Join: - Denotes merging of parallel path activities.
Decision: - Indicates condition to move to different states.
Shallow History: - Represents the state last visited. When a transition to the indicator
fires, an object resumes the state it last had at the same level as the history indicator.
Deep history: A deep history allows you to return from whatever sub-state,
whereas a shallow one only remembers the initial state of a composite state.
2-Element Constraint: - It shows a constraint on two classes or associations.
OR constraint: - It shows an OR constraint on two classes or associations.
331
(A)Describe different elements in Static Chart diagrams ?
Figure :- 11.8 Elements of Static diagrams
Package: - It logically groups element of a UML model.
Class: - They describe set of objects with similar structure, behavior, and relationships.
Data Type :- A data type is an instance of the DataType metaclass defined in the UML
metamodel. A data type declares a type of class attribute. This type is available as a
string, you can include it when you define attributes for other elements in a model.
332
Interface :- It specifies the externally operations of a class, component, package, or other
element without specifying internal structure.
Generalization: - It is a relationship between a specific element and a general element,
such that the specific element is fully consistent with the general element and includes
additional information (such as attributes and associations). For example, the classes Car,
Bike, Cycle can all be specific elements of a more general abstract class element named
vehicle.
Binary Association: - It’s a relationship between two classes.
Composition: - A composition is a form of aggregation that indicates that a part may
belong to only one whole and that the lifetime of the whole determines the lifetime of
the part.
Dependency: - Shows relationship between two elements.
Utility : - Whatever Attributes and operations you define for a utility become global
variables and procedures.
Subsystem: - It is a package that contains the contents of the entire system or an entire
model within the system.
Parameterized class: - It is a template that describes a class with one or more unbound
formal parameters.
Binding: - It is a kind of dependency that indicates a binding of parameterized class or
template, parameters to actual values to create a bound, or no parameterized, element.
Bound element : - Parameters of the parameterized class are bound to actual values.
Object: - Represents instance of a class.
Link: - Represents Links between objects.
N-ary Link: - Represents link between an objects.
Meta-Class: - Whose instances are classes.
Signal: - Specifies stimulus between classes for which there is no reply. It is an element
which can be generalized and is defined independently of the classes handling the signal.
Exception: - Signal raised because of bad execution.
Trace: - Indicates historical relationship between two elements.
333
Refinement: - Refinement is a kind of dependency that indicates a historical or derivation
relationship between two elements with a mapping between them.
Usage : - Usage is a kind of dependency that indicates that one element requires the
presence of another element for its correct implementation or functioning.
2-Element Constraint: - It shows a constraint on two classes or associations.
OR constraint: - It shows an OR constraint on two classes or associations.
(A)Explain the different elements of a Use Case ?
334
Figure :-11.9 Different Elements of Use Case
Package: - It logically groups element of a UML model.
Use Case :- It represents a set of events.
Actor : - Role played by an outside object.
Interface :- It specifies the externally operations of a class, component, package, or other
element without specifying internal structure.
Communication: - How an actor Dependency shows relationship between two elements.
335
Extends: - Indicates that the elements come in parent child relationship where one element
inherits other elements behavior.
Uses: - Here one element uses the other elements behavior. The main difference between
Extends and Uses is a “Is a” and “Has a” relationship. “Is a” relationship defines a child
parent relationship. Example “XYZ” is a child of “PQR”. “Has a” relationship defines an
aggregation relationship that “XYZ” has a “BLUE SHIRT”.
System boundary: - Indicates the system boundary of a Use case.
2-Element Constraint: - It shows a constraint on two classes or associations.
OR constraint: - It shows an OR constraint on two classes or associations.
Twist: - What is the difference between Activity and sequence diagrams?
336
Note:- This topic is meant specially for .NET programmers who are looking for better
position rather than simple programmer jobs. Project management is not everybody’s cup of
tea. I have seen 10 year good decent technical guys do not get this position easily. But street
smart programmers with average technical guys do really well. How much ever I try to cover
this topic in this book.....it has so many variations that it’s really difficult to predict every
scenario of project management interview. But definitely I will try to cover the basics by
which you can at least get a feel of what is asked.
(B) What is project management?
Applying knowledge, skills, tools, techniques in project and deliver project deliverables is
a short definition of project management.It’s basically managing project time, cost and
scope.
(A) Is spending in IT projects constant through out the
project?
Note:- It’s a tricky question, to know how much depth you have regarding costing of projects.
Normally in initial stage of projects (requirement and design phase) the cost is very less
(as you need maximum business analyst and architecture), but as the project proceeds
cost factor starts increasing. The cost is maximum in coding phase (this is where you
require programmers, project leads and project manager). Later when the project is in
testing and acceptance phase cost is less as we will need only one or two programmers for
removing bugs, than the whole team.
12. Project Management
337
Figure :- 12.1 Graph showing cost variation in project.
(B) Who is a stakeholder ?
A stakeholder is anyone who has something to gain or lose as a result of the completion
or failure of this project or phase
Note:- It’s not only the end customer the stakeholder. Project managers, Project Lead, even
programmers, testing department etc. are stake holders of project. So during project
management interview whenever you refer stake holders be clear about the terminology.
(B) Can you explain project life cycle ?
Twist :- How many phases are there in software project ?
338
Figure :- 12.2 Life cycle of a project
There are five stages of any project initiating, planning, executing, controlling, and closeout.
These are general phases and change according to domain. Example when writing a book
339
I will have following mappings initiating(contacting publishers,getting copy right etc),
planning(Table of contents of book, Number of chapters , tool to use, chapter wise
deadlines etc), executing(Actually writing the book), controlling(proof reading, language
checks, page alignments etc), and closeout(Finally printing and on the shelf for sale). So
this classification is at very broader level , for software development the above figure
shows the mapping.
During Software project management interview expected answer is requirement phase,
design phase, coding phase, testing phase and project closure. But you can just impress
the answer by giving a general answer and then showing the mapping.
(B) Are risk constant through out the project ?
* Never say that risk is high through out the project.
Risk is high at the start of projects, but by proper POC (Proof of concept) risk is brought
in control.Good project managers always have proper risk mitigation plan at the start of
project. As the project continues one by one risk is eliminated thus bringing down the
risk.
340
Figure :-12.3 Risk % according to project phases
(A)Can you explain different software development life
cycles ?
Note:- This questions is asked to test that as a project manager do you have a know how of
all the project life cycles.In PMP (Project management plan) you have to specify saying which
341
software development model you will follow. Definitely depending on client and project
scenarios it’s the project manager’s responsibility to choose a development cycle.
SDLC (System Development Life Cycle) is overall process of developing information
systems through multi stage process systems from investigation of initial requirements
through analysis, design, implementation and maintenance. The days are gone when one
COBOL programmer used to analyze, test and implement software systems. Systems
have become complex, huge team members are involved, architects, analyst, programmers,
testers, users etc. To manage this number of SDLC models have been created.
Following are popular models which are listed:-
√ Waterfall Model.
√ Spiral Model.
√ Build and Fix model.
√ Rapid prototyping Model.
√ Incremental Model.
This section we will go into depth of different SDLC models.
Water Fall Model
This is the oldest model. It has sequence of stages; output of one stage becomes input of
other.
Following are stages in Waterfall model:-
√ System Requirement: - This is initial stage of the project where end user
requirements are gathered and documented.
√ System Design: - In this stage detail requirements, screen layout, business
rules, process diagram, pseudo code and other documentations are prepared.
This is first step in technical phase.
√ Implementation: - Depending on the design document actual code is written
here.
√ Integration and Testing: - All pieces are brought together and tested. Bugs are
removed in this phase.
342
√ Acceptance, Installation and Deployment: - This is final stage where software
is put in production and runs actual business.
√ Maintenance: - This is least glamorous phase which runs forever. Code Changes,
correction, addition etc are done in this phase.
Waterfall is suited for low risk in areas of User Interface and performance requirements,
but high risk in budget and schedule predictability and control. Waterfall assumes that all
requirements can be specified in advance. But unfortunately requirement grows and
changes through various stages, so it needs feedback from one stage to other.
Spiral Model
Spiral Model removes the drawback of waterfall model, by providing emphasis to go
back and reiterate earlier stages a number of times as project progresses. On broader level
it’s a series of short waterfall cycles, each producing an early prototype representing a
part of entire project. It also helps demonstrate a Proof of Concept at early software life
cycle.
Build and Fix Model
This is the way free-lancers work Write some code and keep modifying it until the customer
is happy. This approach can be quite dangerous and risky.
Rapid Prototyping Model
This model is also called as Rapid Application Development. The initial emphasis is on
creating prototype that look and acts like the desired product. Prototype can be created
by using tools which is different from those used for final product. Once the prototype is
approved, its discarded and real software development is started from scratch. The problem
with this model is that sometimes the prototype moves ahead to become the final live
product which can be bad from design point of view. It’s a effective model but can have
higher costing than other models as you require programmers during the initial phase of
the software cycle.
343
Incremental Model
In this model we divide products into builds, where section of product are created and
tested separately. Here errors are found in requirement phase itself, user feedback is taken
for each stage and code is tested after it is written.
(B) What is triple constraint triangle in project management
?
Figure :- 12.4 Project Management Triangle
Project Management triangle is depicted as Cost, Schedule and scope.These three aspects
form the sides of triangle and the customer is the center point.As customer is always
concerned about Cost,Scope and Schedule, so in order to get customer satisfaction project
manager should deliver all scope in propose schedule and cost.
If we want to disturb any one of the legs then the other two legs get affected. Example if
customer increases the scope then other two sides of the triangle also get affected a lot.
Note:- During project management interviews it’s rare that you will be asked directly about
constraint triangle. But when you are asked about what are the main factors that affect
customer satisfaction you can refer this triangle.
344
(B)What is a project baselines ?
It defines a logical closure of any deliverable or cycle. Example you have completed the
requirement phase with sign off from the client on the requirement document.So you put
a baseline and say that further any changes to this document are change request. Versioning
of source code is one type of baseline.
(B)What is effort variance?
Effort Variance = (Actual effort – Estimated Effort) / Estimated Effort.
(B)How is normally a project management plan document
organized ?
PMP document forms the bible of a project. It has normally these sections :-
√ Project summary
√ Project organization hierarchy
√ WBS / Activity list to be performed with schedule.
√ Work product identification (In short who will do what)
√ Project schedule( GANNT chart or PERT chart).
√ Estimated Cost and completion.
√ Project requirements.
√ Risk identification.
√ Configuration management section.
√ Quality section.
√ Action Item status.
(I)How do you estimate a project?
There are many techniques available for estimating a project:-
345
√ Function points
√ Use Case points
√ WBS etc etc.
(B)What is CAR (Causal Analysis and Resolution)?
The basic purpose of CAR is to analyze all defects, problems and good practices/positive
triggers in projects, perform a root cause analysis of the same, identify respective corrective
and preventive actions and track these to closure. The advantage of CAR is that root
causes are scientifically identified and their corrective and preventive actions are carried
out. CAR needs to be performed at project initiation, all phase and project ends and on a
monthly basis. Fishbone diagram is one of the ways you can do CAR.
(B) What is DAR (Decision Analysis and Resolution) ?
Decision Analysis and Resolution is to analyze possible decisions using a formal evaluation
process that identifies alternatives against established criteria.
Example in a project you are said to use third party tools so you will not depend on only
one tool but evaluate three to four more tools so that in case of problems you have
alternatives. This is called as DAR
(B) What is a fish bone diagram ?
Twist:- What is Ishikawa diagram ?
Dr. Kaoru Ishikawa, invented the fishbone diagram. Therefore, it can be also referred as
Ishikawa diagram.
Fishbone diagram is an analysis diagram which provides a systematic way of looking at
effects and the causes that create or contribute to those effects. Because of the function
of the fishbone diagram, it may be referred to as a cause-and-effect diagram. The design
of the diagram looks much like the skeleton of a fish. Therefore, it is often referred to as
the fishbone diagram.
Fishbone diagram helps in categorizing potential causes of problems or issues in an
orderly way and in identifying root causes.
346
Below is a sample fish bone diagram which shows why a project dead line was not met.
The middle arrow is the main problem “Deadline not met”. Then we start analyzing other
problems which has led to this problem.Example There is client problem -- as he is always
changing the requirement -- this is caused because the company did not sign the SRS ---
and this happened as proper project management procedures where not at place. So to
solve this problem we either appoint a project manager or give training on project
management to senior team members.
Figure :- 12.5 Sample fish bone diagram
(B) What is pareto principle ?
347
Twist :- What is 80/20 principle ?
Pareto principle also paraphrased as 80/20 principle is simple effective problem tackling
way in management. It says that 20% of your problems lead to other 80 % of problems.
So rather than concentrating on the 80% of problem if you concentrate on 20% of
problems you can save lot of trouble. So in pareto you analyze the problems and only
concentrate on 20% of your vital problems. In projects the first 10% and the last 10% of
project form the vital part of project.
(B)How do you handle change request?
Normally change request are handled by preparing an Impact analysis document and then
doing re-estimation. Example you have an on going project, which has a customer table.
Now customer want to also have addresses assigned to it. So you normally raise a change
request and then do an impact analysis of the same. Depending on the impact you estimate
and let know the client about the financial aspect of the project. Once client sign off or
the upper management agrees to the change request you move ahead with implementation.
(I)What is internal change request?
Internal change request are not normally billable change request, it has no financial gains
from the client. Example your architecture division of your company has said in mid of
the project that the architecture has to be modified. Definitely this has nothing to do
with the client, but you make changes to it this is called as Internal change request.
(B)What is difference between SITP and UTP in testing ?
UTP (Unit Test Plan) are done at smallest unit level or stand alone mode. Example you
have Customer and invoicing module. So you will do test on Customer and Invoice module
independently. But later when we want test both customer and invoice in one set we
integrate them and test it. So that’s is SITP (System Integration Test Plan)
UTP can be done using NUNIT. Unit testing is done normally by developers and System
testing is done normally by testing department in integration mode.
(B)What is the software you have used for project
management?
Many companies have there own software defined. There are many project management
software available at this moment in market but this can vary from company to company
348
, worst it can very from project to project. But Microsoft project is the most used software
at this moment.So just brush your skills on Microsoft project , its used heavily across
industry.
(I)What are the metrics followed in project management?
Twist: - What metrics will you look at in order to see the project is moving successfully?
Most metric sets deal with a variation of these attributes and are chosen to help project
managers gain insight into their product (size, software quality, rework), process (rework,
software quality) and project (effort, schedule).
But below is a broader classification :-
Project Management Metrics
milestone metrics
√ number of milestones
√ number of proved requirements per milestone
√ controlling level metrics
risk metrics
√ probability of resources availability
√ probability of the requirements validity
√ risk indicators (long schedules, inadequate cost estimating,
excessive paperwork, error-prone modules, canceled projects,
excessive schedule pressure, low quality, cost overruns, creeping
user requirements, excessive time to market, unused or unusable software, unanticipated
acceptance criteria, hidden errors)
√ application risk metrics
workflow metrics
√ walkthrough metrics
349
√ traceability metrics
√ variance metrics
controlling metrics
√ size of control elements
√ structure of control elements
√ documentation level
√ tool application level
management database metrics
√ data quality metrics
√ management data complexity
√ data handling level (performance metrics)
√ visualization level
√ safety and security metrics
Quality Management Metrics
customer satisfaction metrics
√ characteristics size metrics
√ characteristics structure metrics
√ empirical evaluation metrics
√ data presentation metrics
review metrics
√ number of reviews in the process
√ review level metrics
350
√ review dependence metrics
√ review structure metrics
√ review resources metrics
productivity metrics
√ actual vs. planned metrics
√ performance metrics
√ productivity vs. quality metrics
efficiency metrics
√ time behavior metrics
√ resources behavior metrics
√ actual vs. Planned metrics
quality assurance metrics
√ quality evaluation metrics
√ error prevention metrics
√ measurement level
√ data analysis metrics
Configuration Management Metrics
change control metrics
√ size of change
√ dependencies of changes
√ change interval metrics
√ revisions metrics
351
version control metrics
√ number of versions
√ number of versions per customer
√ version differences metrics
√ releases metrics (version architecture)
√ data handling level
Note:- Following are some questions who do not have a specific answer and vary from
person to person or are out of the scope of book. This book will list down the questions just
go through them.


(B)You have people in your team who do not meet there
deadlines or do not perform what are the actions you will
take ?
Twist :- Two of your resources have conflicts between them how would you sort it out ?
In such kind of question they want to see your delegation skills. The best answer to this
question is a job of a project manager is managing projects and not problems of people,
so I will delegate this work to HR or upper authority.... Thanks to my Project Manager for
this beautiful answer.
(B)What is black box testing and White box testing?
Black box testing is also termed as functional testing. It ignores how the internal
functionality of a system works and depends only what are the outputs on specified
inputs. Source code availability is not an important in back box testing. Black box testing
is mostly to ensure that it meets the user functionality.
According to IEEE standards following are characteristics of Black box testing:-
√ “Testing that ignores the internal mechanism of a system or component and focuses
solely on the outputs generated in response to selected inputs and execution
conditions;”
352
√ “Testing conducted to evaluate the compliance of a system or component with
specified functional requirements.”
One of the ways of black box testing is Manual testing what the tester performs. For
instance you can install the application on a machine and tester starts testing is a type of
black box testing. In this case the tester is completely unaware of the how the program
logic flows and how its coded etc.
White box testing is opposite to Black box it requires internal know how of how the logic
flows. As this testing needs know how of the internal structure it can only be done
programmers. Unit testing is one of the ways of doing White box testing in which
programmers use NUNIT or JNUIT to test each class individually. White box testing can
be done by programmer by either stepping through the code or testing the classes and
components in isolation.
(B) What’s the difference between Unit testing, Assembly
testing and Regression testing?
Unit testing is also called as Component testing. Unit testing ensures that reliable program
unit meets their requirements. Unit testing is normally conducted by programmer under
the supervision of the project lead or the team Lead. Main objective of this testing is to
test each unit in isolation and individually. This is done by knowing what are the inputs to
the unit and what the expected outputs for the same. Unit testing is a white box activity.
Unit test normally comes in the implementation phase of the project.
For instance in the below figure we are trying to do unit testing on the customer class. So
we create the object of Customer class assign “CustomerCode” and “Age” property and
check for the response. For instance in this condition we tried to pass a non-numeric
value to the “Age” property and the class threw an error saying “Age should be numeric”.
So here the basic unit testing entity is your class.
353
Figure 12.6 : - Unit testing for sample Customer class
But unit testing is not limited to a component, object or function. So definition of a unit
testing will depend on the approach. Below are some examples of unit testing:-
√ Check points in UI like tab orders, error messages, look and feel etc.
√ Class, object, component level testing as said previously.
√ In case of functional programming can be a simple method or function.
√ Logic testing for algorithms. Some projects can have some critical algorithm for
instance some kind of custom sorting, security implementation etc. So that logic
can be tested independently.
But the general thumb rule of what is Unit in Unit testing is that the module self contained
and by itself.
Assembly testing goes one step ahead than unit testing. It demonstrates that can the
modules interact in a correct, stable and proper manner as defined by the functional
specifications provided by the client. Assembly testing is Black box testing style and also
called as Integration testing. For instance in the above unit test of the “Customer” class,
testing was done in isolation. But in actually the “Customer” class is not going to be stand
alone rather it will be used more in conjunction with the “Product” class and also will
have UI to do the same. So in short the “Customer” class will work with two more entity
354
one is the “UI” and the other is the “Product” class. So normally assembly testing is done
through UI but not necessarily.
Figure 12.7 : - Integration Testing
The above figure defines a simple scenario for integration testing. The same “Customer”
class is now tested with the “UI” and “Product” to see if the interaction between them
matches according to functional specifications.
Regression testing ensures that application function properly even if there are changes or
enhancements to system.For instance you change the “Product” class still you will run all
the test cases for “Product” , “Customer” and “UI” just to make sure that any changes in
“Product” class does not affect interaction with other entities. So you will see when
testers do a regression testing they run all the scripts to ensure that nothing has been
affected.
(I)What is V model in testing?
V model map’s the type of test to the stage of development in a project.
355
Figure 12.8 : - V Model
Unit Testing
Starting from the bottom the first test level is "Unit Testing". It involves checking that
each feature specified in the "Component Design" has been implemented in the
component.
In theory an independent tester should do this, but in practice the developer usually does
it, as they are the only people who understand how a component works. The problem
with a component is that it performs only a small part of the functionality of a system,
and it relies on co-operating with other parts of the system, which may not have been
built yet. To overcome this, the developer either builds, or uses special software to trick
the component into believe it is working in a fully functional system.
Integration Testing
As the components are constructed and tested they are then linked together to check if
they work with each other. It is a fact that two components that have passed all their
356
tests, when connected to each other produce one new component full of faults. These
tests can be done by specialists, or by the developers.
Integration Testing is not focused on what the components are doing but on how they
communicate with each other, as specified in the "System Design". The "System Design"
defines relationships between components.
The tests are organized to check all the interfaces, until all the components have been
built and interfaced to each other producing the whole system.
System Testing
Once the entire system has been built then it has to be tested against the "System
Specification" to check if it delivers the features required. It is still developer focused,
although specialist developers known as systems testers are normally employed to do it.
In essence System Testing is not about checking the individual parts of the design, but
about checking the system as a whole. In fact it is one giant component.
System testing can involve a number of specialist types of test to see if all the functional
and non-functional requirements have been met. In addition to functional requirements
these may include the following types of testing for the non-functional requirements:
√ Performance - Are the performance criteria met?
√ Volume - Can large volumes of information be handled?
√ Stress - Can peak volumes of information be handled?
√ Documentation - Is the documentation usable for the system?
√ Robustness - Does the system remain stable under adverse circumstances?
There are many others, the need for which is dictated by how the system is supposed to
perform.
Acceptance Testing
Acceptance Testing checks the system against the "Requirements". It is similar to systems
testing in that the whole system is checked but the important difference is the change in
focus:
357
Systems testing checks that the system that was specified has been delivered. Acceptance
Testing checks that the system will deliver what was requested.
The customer should always do acceptance testing and not the developer . The customer
knows what is required from the system to achieve value in the business and is the only
person qualified to make that judgment. This testing is more of getting the answer for
whether is the software delivered as defined by the customer. It’s like getting a green flag
from the customer that the software is up to the expectation and ready to be used.
(B)How do you start a project?
Left to the readers
(B)How did you do resource allocations?
Left to the readers
(I) How will you do code reviews ?
The way in which code reviews are done change from person to person and also company
to company. But the normally when a project is started project people define their
architecture, coding standards etc in their design document. So before starting the code
review you will have go through the standards defined in the project.
(A)What is CMMI?
It is a collection of instructions an organization can follow with the purpose to gain
better control over its software development process.
(A) What are the five levels in CMMI?
There are five levels of the CMM. According to the SEI,
Level 1 – Initial
At maturity level 1, processes are usually ad hoc and the organization usually does not
provide a stable environment. Success in these organizations depends on the competence
and heroics of people in the organization and not on the use of proven processes. In spite
of this ad hoc, chaotic environment, maturity level 1 organizations often produce products
358
and services that work; however, they frequently exceed the budget and schedule of their
projects.
Maturity level 1 organizations are characterized by a tendency to over commit, abandon
processes in the time of crisis, and not be able to repeat their past successes again.
Level 2 – Repeatable
At maturity level 2, software development successes are repeatable. The organization
may use some basic project management to track cost and schedule.
Process discipline helps to ensure that existing practices are retained during times of
stress. When these practices are in place, projects are performed and managed according
to their documented plans.
Project status and the delivery of services are visible to management at defined points
(for example, at major milestones and at the completion of major tasks).
Basic project management processes are established to track cost, schedule, and
functionality. The necessary process discipline is in place to repeat earlier successes on
projects with similar applications.
Level 3 – Defined
At maturity level 3, processes are well characterized and understood, and are described in
standards, procedures, tools, and methods.
The organization’s set of standard processes, which is the basis for level 3, is established
and improved over time. These standard processes are used to establish consistency across
the organization. Projects establish their defined processes by the organization’s set of
standard processes according to tailoring guidelines.
The organization’s management establishes process objectives based on the organization’s
set of standard processes and ensures that these objectives are appropriately addressed.
A critical distinction between level 2 and level 3 is the scope of standards, process
descriptions, and procedures. At level 2, the standards, process descriptions, and procedures
may be quite different in each specific instance of the process (for example, on a particular
project). At level 3, the standards, process descriptions, and procedures for a project are
tailored from the organization’s set of standard processes to suit a particular project or
organizational unit.
359
Level 4 – Managed
Using precise measurements, management can effectively control the software
development effort. In particular, management can identify ways to adjust and adapt the
process to particular projects without measurable losses of quality or deviations from
specifications.
Sub processes are selected that significantly contribute to overall process performance.
These selected sub processes are controlled using statistical and other quantitative
techniques.
A critical distinction between maturity level 3 and maturity level 4 is the predictability of
process performance. At maturity level 4, the performance of processes is controlled
using statistical and other quantitative techniques, and is quantitatively predictable. At
maturity level 3, processes are only qualitatively predictable.
Level 5 – Optimizing
Maturity level 5 focuses on persistently improving process performance through both
incremental and innovative technological improvements. Quantitative processimprovement
objectives for the organization are established, continually revised to reflect
changing business objectives, and used as criteria in managing process improvement. The
effects of deployed process improvements are measured and evaluated against the
quantitative process-improvement objectives. Both the defined processes and the
organization set of standard processes are targets of measurable improvement activities.
Process improvements to address common causes of process variation and measurably
improve the organization’s processes are identified, evaluated, and deployed.
Optimizing processes that are nimble, adaptable and innovative depends on the
participation of an empowered workforce aligned with the business values and objectives
of the organization. The organization’s ability to rapidly respond to changes and
opportunities is enhanced by finding ways to accelerate and share learning.
A critical distinction between maturity level 4 and maturity level 5 is the type of process
variation addressed. At maturity level 4, processes are concerned with addressing special
causes of process variation and providing statistical predictability of the results. Though
processes may produce predictable results, the results may be insufficient to achieve the
established objectives. At maturity level 5, processes are concerned with addressing common
causes of process variation and changing the process (that is, shifting the mean of the
360
process performance) to improve process performance (while maintaining statistical
probability) to achieve the established quantitative process-improvement objectives.
Note: - I am sure during interview specially the SQA guys expect all the different levels of
CMMI to be in mind. So below is the figure which will help you remembering the same.
Figure 12.9 : - CMMI Levels
361
(A) What is continuous and staged representation?
CMMI contains 25 key process areas which organization can follow to adapt CMMI.
√ Causal Analysis and Resolution (CAR)
√ Configuration Management (CM)
√ Decision Analysis and Resolution (DAR)
√ Integrated Project Management (IPM)
√ Integrated Supplier Management (ISM)
√ Integrated Teaming (IT)
√ Measurement and Analysis (MA)
√ Organizational Environment for Integration (OEI)
√ Organizational Innovation and Deployment (OID)
√ Organizational Process Definition (OPD)
√ Organizational Process Focus (OPF)
√ Organizational Process Performance (OPP)
√ Organizational Training (OT)
√ Product Integration (PI)
√ Project Monitoring and Control (PMC)
√ Project Planning (PP)
√ Process and Product Quality Assurance (PPQA)
√ Quantitative Project Management (QPM)
√ Requirements Development (RD)
√ Requirements Management (REQM)
√ Risk Management (RSKM)
√ Supplier Agreement Management (SAM)
√ Technical Solution (TS)
362
√ Validation (VAL)
√ Verification (VER)
The method by which company wants to adapt to CMMI is called a representation. So
either organization can adapt for staged or continuous representation.
In the continuous representation process areas are organized by functional area. For
example, a company interested to improve its Project Management capability would focus
on IPM, ISM, IT, PMC, PP, QPM, RSKM and SAM.
Process Management
OID - Organizational Innovation and Deployment
OPD - Organizational Process Definition
OPF - Organizational Process Focus
OPP - Organizational Process Performance
OT - Organizational Training
Project Management
IPM - Integrated Project Management
ISM - Integrated Supplier Management
IT - Integrated Teaming
PMC - Project Monitoring and Control
PP - Project Planning
QPM - Quantitative Project Management
RSKM - Risk Management
SAM - Supplier Management Agreement
363
Engineering
PI - Product Integration
REQM - Requirements Management
RD - Requirements Development
TS - Technical Solution
VAL - Validation
VER - Verification
Support
CAR - Casual Analysis and Resolution
CM - Configuration Management
DAR - Decision Analysis and Resolution
MA - Measurement and Analysis
OEI - Organizational Environment for Integration
PPQA - Process and Product Quality Assurance
Staged representation
While in staged representation the concept of levels comes in to picture. In the staged
representation process areas are organized by organizational maturity level. For example,
a company interested to obtain a Maturity Level 2 rating would require company processes
covering all of the Maturity Level 2 process areas.
Maturity Levels 2
CM - Configuration Management
MA - Measurement and Analysis
PMC - Project Monitoring and Control
PP - Project Planning
PPQA - Process and Product Quality Assurance
364
REQM - Requirements Management
SAM - Supplier Management Agreement
Maturity Level 3
DAR - Decision Analysis and Resolution
IPM - Integrated Project Management
ISM - Integrated Supplier Management
IT - Integrated Teaming
OEI - Organizational Environment for Integration
OPD - Organizational Process Definition
OPF - Organizational Process Focus
OT - Organizational Training
PI - Product Integration
RD - Requirements Development
RSKM - Risk Management
TS - Technical Solution
VAL - Validation
VER - Verification
Maturity Level 4
QPM - Quantitative Project Management
OPP - Organizational Process Performance
365
Maturity Level 5
CAR - Casual Analysis and Resolution
OID - Organizational Innovation and Deployment
(A)Can you explain the process areas?
Note: - No one is going to ask such a question. But they would like to know at least the
purpose of each KPA. Second they would like to know what you did to attain compatibility
to these process areas. For instance you say that you did Organizational Process Definition.
They would like to know how you did it. For instance you can justify it by saying that you
made standard documents for coding standards which was then followed at the organization
level for reference. Normally every one follows process it’s only that they do not know. So try
to map the KPA to the process what you follow. The only purpose to paste all the KPA is
if in case you are looking for some higher positions in bug companies they really expect you
to speak in term of KPA rather than generic term. This whole stuff can be like a quick
reference for you before entering the interview room.
Each process area is defined by a set of goals and practices. There are two categories of
goals and practices: generic and specific. Generic goals and practices are a part of every
process area. Specific goals and practices are specific to a given process area. A process
area is satisfied when company processes cover all of the generic and specific goals and
practices for that process area.
Generic goals and practices
Generic goals and practices are a part of every process area.
GG 1 Achieve Specific Goals
GP 1.1 Perform Base Practices
GG 2 Institutionalize a Managed Process
GP 2.1 Establish an Organizational Policy
GP 2.2 Plan the Process
GP 2.3 Provide Resources
GP 2.4 Assign Responsibility
GP 2.5 Train People
366
GP 2.6 Manage Configurations
GP 2.7 Identify and Involve Relevant Stakeholders
GP 2.8 Monitor and Control the Process
GP 2.9 Objectively Evaluate Adherence
GP 2.10 Review Status with Higher Level Management
GG 3 Institutionalize a Defined Process
GP 3.1 Establish a Defined Process
GP 3.2 Collect Improvement Information
GG 4 Institutionalize a Quantitatively Managed Process
GP 4.1 Establish Quantitative Objectives for the Process
GP 4.2 Stablize Subprocess Performance
GG 5 Institutionalize an Optimizing Process
GP 5.1 Ensure Continuous Process Improvement
GP 5.2 Correct Root Causes of Problems
Process areas
The CMMI contains 25 key process areas indicating the aspects of product development
that are to be covered by company processes.
Causal Analysis and Resolution (CAR)
A Support process area at Maturity Level 5
Purpose
The purpose of Causal Analysis and Resolution (CAR) is to identify causes of defects
and other problems and take action to prevent them from occurring in the future.
Specific Practices by Goal
SG 1 Determine Causes of Defects
SP 1.1-1 Select Defect Data for Analysis
SP 1.2-1 Analyze Causes
367
SG 2 Address Causes of Defects
SP 2.1-1 Implement the Action Proposals
SP 2.2-1 Evaluate the Effect of Changes
SP 2.3-1 Record Data
Configuration Management (CM)
A Support process area at Maturity Level 2
Purpose
The purpose of Configuration Management (CM) is to establish and maintain the integrity
of work products using configuration identification, configuration control, configuration
status accounting, and configuration audits.
Specific Practices by Goal
SG 1 Establish Baselines
SP 1.1-1 Identify Configuration Items
SP 1.2-1 Establish a Configuration Management System
SP 1.3-1 Create or Release Baselines
SG 2 Track and Control Changes
SP 2.1-1 Track Change Requests
SP 2.2-1 Control Configuration Items
SG 3 Establish Integrity
SP 3.1-1 Establish Configuration Management Records
SP 3.2-1 Perform Configuration Audits
Decision Analysis and Resolution (DAR)
A Support process area at Maturity Level 3
Purpose
368
The purpose of Decision Analysis and Resolution (DAR) is to analyze possible decisions
using a formal evaluation process that evaluates identified alternatives against established
criteria.
Specific Practices by Goal
SG 1 Evaluate Alternatives
SP 1.1-1 Establish Guidelines for Decision Analysis
SP 1.2-1 Establish Evaluation Criteria
SP 1.3-1 Identify Alternative Solutions
SP 1.4-1 Select Evaluation Methods
SP 1.5-1 Evaluate Alternatives
SP 1.6-1 Select Solutions
Integrated Project Management (IPM)
A Project Management process area at Maturity Level 3
Purpose
The purpose of Integrated Project Management (IPM) is to establish and manage the
project and the involvement of the relevant stakeholders according to an integrated and
defined process that is tailored from the organization's set of standard processes.
Specific Practices by Goal
SG 1 Use the Project's Defined Process
SP 1.1-1 Establish the Project's Defined Process
SP 1.2-1 Use Organizational Process Assets for Planning Project Activities
SP 1.3-1 Integrate Plans
SP 1.4-1 Manage the Project Using the Integrated Plans
SP 1.5-1 Contribute to the Organizational Process Assets
SG 2 Coordinate and Collaborate with Relevant Stakeholders
SP 2.1-1 Manage Stakeholder Involvement
369
SP 2.2-1 Manage Dependencies
SP 2.3-1 Resolve Coordination Issues
SG 3 Use the Project's Shared Vision for IPPD
SP 3.1-1 Define Project's Shared Vision for IPPD
SP 3.2-1 Establish the Project's Shared Vision
SG 4 Organize Integrated Teams for IPPD
SP 4.1-1 Determine Integrated Team Structure for the Project
SP 4.2-1 Develop a Preliminary Distribution of Requirements to Integrated Teams
SP 4.3-1 Establish Integrated Teams
Integrated Supplier Management (ISM)
A Project Management process area at Maturity Level 3
Purpose
The purpose of Integrated Supplier Management (ISM) is to proactively identify sources
of products that may be used to satisfy the project's requirements and to manage selected
suppliers while maintaining a cooperative project-supplier relationship.
Specific Practices by Goal
SG 1 Analyze and Select Sources of Products
SP 1.1-1 Analyze Potential Sources of Products
SP 1.2-1 Evaluate and Determine Sources of Products
SG 2 Coordinate Work with Suppliers
SP 2.1-1 Monitor Selected Supplier Processes
SP 2.2-1 Evaluate Selected Supplier Work Products
SP 2.3-1 Revise the Supplier Agreement or Relationship
Integrated Teaming (IT)
A Project Management process area at Maturity Level 3
Purpose
370
The purpose of Integrated Teaming (IT) is to form and sustain an integrated team for the
development of work products.
Specific Practices by Goal
SG 1 Establish Team Composition
SP 1.1-1 Identify Team Tasks
SP 1.2-1 Identify Needed Knowledge and Skills
SP 1.3-1 Assign Appropriate Team Members
SG 2 Govern Team Operation
SP 2.1-1 Establish a Shared Vision
SP 2.2-1 Establish a Team Charter
SP 2.3-1 Define Roles and Responsibilities
SP 2.4-1 Establish Operating Procedures
SP 2.5-1 Collaborate among Interfacing Teams
Measurement and Analysis (MA)
A Support process area at Maturity Level 2
Purpose
The purpose of Measurement and Analysis (MA) is to develop and sustain a measurement
capability that is used to support management information needs.
Specific Practices by Goal
SG 1 Align Measurement and Analysis Activities
SP 1.1-1 Establish Measurement Objectives
SP 1.2-1 Specify Measures
SP 1.3-1 Specify Data Collection and Storage Procedures
SP 1.4-1 Specify Analysis Procedures
SG 2 Provide Measurement Results
SP 2.1-1 Collect Measurement Data
371
SP 2.2-1 Analyze Measurement Data
SP 2.3-1 Store Data and Results
SP 2.4-1 Communicate Results
Organizational Environment for Integration (OEI)
A Support process area at Maturity Level 3
Purpose
The purpose of Organizational Environment for Integration (OEI) is to provide an
Integrated Product and Process Development (IPPD) infrastructure and manage people
for integration.
Specific Practices by Goal
SG 1 Provide IPPD Infrastructure
SP 1.1-1 Establish the Organization's Shared Vision
SP 1.2-1 Establish an Integrated Work Environment
SP 1.3-1 Identify IPPD-Unique Skill Requirements
SG 2 Manage People for Integration
SP 2.1-1 Establish Leadership Mechanisms
SP 2.2-1 Establish Incentives for Integration
SP 2.3-1 Establish Mechanisms to Balance Team and Home Organization Responsibilities
Organizational Innovation and Deployment (OID)
A Process Management process area at Maturity Level 5
Purpose
The purpose of Organizational Innovation and Deployment (OID) is to select and deploy
incremental and innovative improvements that measurably improve the organization's
processes and technologies. The improvements support the organization's quality and
process-performance objectives as derived from the organization's business objectives.
372
Specific Practices by Goal
SG 1 Select Improvements
SP 1.1-1 Collect and Analyze Improvement Proposals
SP 1.2-1 Identify and Analyze Innovations
SP 1.3-1 Pilot Improvements
SP 1.4-1 Select Improvements for Deployment
SG 2 Deploy Improvements
SP 2.1-1 Plan the Deployment areas
SP 2.2-1 Manage the Deployment
SP 2.3-1 Measure Improvement Effects
Organizational Process Definition (OPD)
A Process Management process area at Maturity Level 3
Purpose
The purpose of Organizational Process Definition (OPD) is to establish and maintain a
usable set of organizational process assets.
Specific Practices by Goal
SG 1 Establish Organizational Process Assets
SP 1.1-1 Establish Standard Processes
SP 1.2-1 Establish Life-Cycle Model Descriptions
SP 1.3-1 Establish Tailoring Criteria and Guidelines
SP 1.4-1 Establish the Organization's Measurement Repository
SP 1.5-1 Establish the Organization's Process Asset Library
Organizational Process Focus (OPF)
373
A Process Management process area at Maturity Level 3
Purpose
The purpose of Organizational Process Focus (OPF) is to plan and implement
organizational process improvement based on a thorough understanding of the current
strengths and weaknesses of the organization's processes and process assets.
Specific Practices by Goal
SG 1 Determine Process Improvement Opportunities
SP 1.1-1 Establish Organizational Process Needs
SP 1.2-1 Appraise the Organization's Processes
SP 1.3-1 Identify the Organization's Process Improvements
SG 2 Plan and Implement Process Improvement Activities
SP 2.1-1 Establish Process Action Plans
SP 2.2-1 Implement Process Action Plans
SP 2.3-1 Deploy Organizational Process Assets
SP 2.4-1 Incorporate Process-Related Experiences into the Organizational Process Assets
Organizational Process Performance (OPP)
A Process Management process area at Maturity Level 4
Purpose
The purpose of Organizational Process Performance (OPP) is to establish and maintain
a quantitative understanding of the performance of the organization's set of standard
processes in support of quality and process-performance objectives, and to provide the
process performance data, baselines, and models to quantitatively manage the
organization's projects.
Specific Practices by Goal
SG 1 Establish Performance Baselines and Models
SP 1.1-1 Select Processes
374
SP 1.2-1 Establish Process Performance Measures
SP 1.3-1 Establish Quality and Process Performance Objectives
SP 1.4-1 Establish Process Performance Baselines
SP 1.5-1 Establish Process Performance Models
Organizational Training (OT)
A Process Management process area at Maturity Level 3
Purpose
The purpose of Organizational Training (OT) is to develop the skills and knowledge of
people so that they can perform their roles effectively and efficiently.
Specific Practices by Goal
SG 1 Establish an Organizational Training Capability
SP 1.1-1 Establish the Strategic Training Needs
SP 1.2-1 Determine Which Training Needs Are the Responsibility of the Organization
SP 1.3-1 Establish an Organizational Training Tactical Plan
SP 1.4-1 Establish Training Capability
SG 2 Provide Necessary Training
SP 2.1-1 Deliver Training
SP 2.2-1 Establish Training Records
SP 2.3-1 Assess Training Effectiveness
Product Integration (PI)
An Engineering process area at Maturity Level 3
Purpose
375
The purpose of Product Integration (PI) is to assemble the product from the product
components, ensure that the product, as integrated, functions properly and deliver the
product.
Specific Practices by Goal
SG 1 Prepare for Product Integration
SP 1.1-1 Determine Integration Sequence
SP 1.2-1 Establish the Product Integration Environment
SP 1.3-1 Establish Product Integration Procedures and Criteria
SG 2 Ensure Interface Compatibility
SP 2.1-1 Review Interface Descriptions for Completeness
SP 2.2-1 Manage Interfaces
SG 3 Assemble Product Components and Deliver the Product
SP 3.1-1 Confirm Readiness of Product Components for Integration
SP 3.2-1 Assemble Product Components
SP 3.3-1 Evaluate Assembled Product Components
SP 3.4-1 Package and Deliver the Product or Product Component
Project Monitoring and Control (PMC)
A Project Management process area at Maturity Level 2
Purpose
The purpose of Project Monitoring and Control (PMC) is to provide an understanding of
the project's progress so that appropriate corrective actions can be taken when the project's
performance deviates significantly from the plan.
Specific Practices by Goal
sSG 1 Monitor Project Against Plan
SP 1.1-1 Monitor Project Planning Parameters
376
SP 1.2-1 Monitor Commitments
SP 1.3-1 Monitor Project Risks
SP 1.4-1 Monitor Data Management
SP 1.5-1 Monitor Stakeholder Involvement
SP 1.6-1 Conduct Progress Reviews
SP 1.7-1 Conduct Milestone Reviews
SG 2 Manage Corrective Action to Closure
SP 2.1-1 Analyze Issues
SP 2.2-1 Take Corrective Action
SP 2.3-1 Manage Corrective Action
Project Planning (PP)
A Project Management process area at Maturity Level 2
Purpose
The purpose of Project Planning (PP) is to establish and maintain plans that define project
activities.
Specific Practices by Goal
SG 1 Establish Estimates
SP 1.1-1 Estimate the Scope of the Project
SP 1.2-1 Establish Estimates of Work Product and Task Attributes
SP 1.3-1 Define Project Life Cycle
SP 1.4-1 Determine Estimates of Effort and Cost
SG 2 Develop a Project Plan
SP 2.1-1 Establish the Budget and Schedule
SP 2.2-1 Identify Project Risks
377
SP 2.3-1 Plan for Data Management
SP 2.4-1 Plan for Project Resources
SP 2.5-1 Plan for Needed Knowledge and Skills
SP 2.6-1 Plan Stakeholder Involvement
SP 2.7-1 Establish the Project Plan
SG 3 Obtain Commitment to the Plan
SP 3.1-1 Review Plans that Affect the Project
SP 3.2-1 Reconcile Work and Resource Levels
SP 3.3-1 Obtain Plan Commitment
Process and Product Quality Assurance (PPQA)
A Support process area at Maturity Level 2
Purpose
The purpose of Process and Product Quality Assurance (PPQA) is to provide staff and
management with objective insight into processes and associated work products.
Specific Practices by Goal
SG 1 Objectively Evaluate Processes and Work Products
SP 1.1-1 Objectively Evaluate Processes
SP 1.2-1 Objectively Evaluate Work Products and Services
SG 2 Provide Objective Insight
SP 2.1-1 Communicate and Ensure Resolution of Noncompliance Issues
SP 2.2-1 Establish Records
Quantitative Project Management (QPM)
A Project Management process area at Maturity Level 4
378
Purpose
The purpose of the Quantitative Project Management (QPM) process area is to
quantitatively manage the project's defined process to achieve the project's established
quality and process-performance objectives.
Specific Practices by Goal
SG 1 Quantitatively Manage the Project
SP 1.1-1 Establish the Project's Objectives
SP 1.2-1 Compose the Defined Processes
SP 1.3-1 Select the Subprocesses that Will Be Statistically Managed
SP 1.4-1 Manage Project Performance
SG 2 Statistically Manage Subprocess Performance
SP 2.1-1 Select Measures and Analytic Techniques
SP 2.2-1 Apply Statistical Methods to Understand Variation
SP 2.3-1 Monitor Performance of the Selected Subprocesses
SP 2.4-1 Record Statistical Management Data
Requirements Development (RD)
An Engineering process area at Maturity Level 3
Purpose
The purpose of Requirements Development (RD) is to produce and analyze customer,
product, and product-component requirements.
Specific Practices by Goal
SG 1 Develop Customer Requirements
SP 1.1-1 Collect Stakeholder Needs
SP 1.1-2 Elicit Needs
SP 1.2-1 Develop the Customer Requirements
379
SG 2 Develop Product Requirements
SP 2.1-1 Establish Product and Product-Component Requirements
SP 2.2-1 Allocate Product-Component Requirements
SP 2.3-1 Identify Interface Requirements
SG 3 Analyze and Validate Requirements
SP 3.1-1 Establish Operational Concepts and Scenarios
SP 3.2-1 Establish a Definition of Required Functionality
SP 3.3-1 Analyze Requirements
SP 3.4-3 Analyze Requirements to Achieve Balance
SP 3.5-1 Validate Requirements
SP 3.5-2 Validate Requirements with Comprehensive Methods
Requirements Management (REQM)
An Engineering process area at Maturity Level 2
Purpose
The purpose of Requirements Management (REQM) is to manage the requirements of
the project's products and product components and to identify inconsistencies between
those requirements and the project's plans and work products.
Specific Practices by Goal
SG 1 Manage Requirements
SP 1.1-1 Obtain an Understanding of Requirements
SP 1.2-2 Obtain Commitment to Requirements
SP 1.3-1 Manage Requirements Changes
SP 1.4-2 Maintain Bidirectional Traceability of Requirements
SP 1.5-1 Identify Inconsistencies between Project Work and Requirements
380
Risk Management (RSKM)
A Project Management process area at Maturity Level 3
Purpose
The purpose of Risk Management (RSKM) is to identify potential problems before they
occur so that risk-handling activities can be planned and invoked as needed across the
life of the product or project to mitigate adverse impacts on achieving objectives.
Specific Practices by Goal
SG 1 Prepare for Risk Management
SP 1.1-1 Determine Risk Sources and Categories
SP 1.2-1 Define Risk Parameters
SP 1.3-1 Establish a Risk Management Strategy
SG 2 Identify and Analyze Risks
SP 2.1-1 Identify Risks
SP 2.2-1 Evaluate, Categorize, and Prioritize Risks
SG 3 Mitigate Risks
SP 3.1-1 Develop Risk Mitigation Plans
SP 3.2-1 Implement Risk Mitigation Plans
Supplier Agreement Management (SAM)
A Project Management process area at Maturity Level 2
Purpose
The purpose of Supplier Agreement Management (SAM) is to manage the acquisition of
products from suppliers for which there exists a formal agreement.
Specific Practices by Goal
SG 1 Establish Supplier Agreements
SP 1.1-1 Determine Acquisition Type
381
SP 1.2-1 Select Suppliers
SP 1.3-1 Establish Supplier Agreements
SG 2 Satisfy Supplier Agreements
SP 2.1-1 Review COTS Products
SP 2.2-1 Execute the Supplier Agreement
SP 2.3-1 Accept the Acquired Product
SP 2.4-1 Transition Products
Technical Solution (TS)
An Engineering process area at Maturity Level 3
Purpose
The purpose of Technical Solution (TS) is to design, develop, and implement solutions to
requirements. Solutions, designs, and implementations encompass products, product
components, and product-related life-cycle processes either alone or in appropriate
combination .
Specific Practices by Goal
SG 1 Select Product-Component Solutions
SP 1.1-1 Develop Alternative Solutions and Selection Criteria
SP 1.1-2 Develop Detailed Alternative Solutions and Selection Criteria
SP 1.2-2 Evolve Operational Concepts and Scenarios
SP 1.3-1 Select Product-Component Solutions
SG 2 Develop the Design
SP 2.1-1 Design the Product or Product Component
SP 2.2-3 Establish a Technical Data Package
SP 2.3-1 Establish Interface Descriptions
SP 2.3-3 Design Interfaces Using Criteria
382
SP 2.4-3 Perform Make, Buy, or Reuse Analyses
SG 3 Implement the Product Design
SP 3.1-1 Implement the Design
SP 3.2-1 Develop Product Support Documentation
Validation (VAL)
An Engineering process area at Maturity Level 3
Purpose
The purpose of Validation (VAL) is to demonstrate that a product or product component
fulfills its intended use when placed in its intended environment.
Specific Practices by Goal
SG 1 Prepare for Validation
SP 1.1-1 Select Products for Validation
SP 1.2-2 Establish the Validation Environment
SP 1.3-3 Establish Validation Procedures and Criteria
SG 2 Validate Product or Product Components
SP 2.1-1 Perform Validation
SP 2.2-1 Analyze Validation Results
Verification (VER)
An Engineering process area at Maturity Level 3
Purpose
The purpose of Verification (VER) is to ensure that selected work products meets their
specified requirements.
Specific Practices by Goal
383
SG 1 Prepare for Verification
SP 1.1-1 Select Work Products for Verification
SP 1.2-2 Establish the Verification Environment
SP 1.3-3 Establish Verification Procedures and Criteria
SG 2 Perform Peer Reviews
SP 2.1-1 Prepare for Peer Reviews
SP 2.2-1 Conduct Peer Reviews
SP 2.3-2 Analyze Peer Review Data
SG 3 Verify Selected Work Products
SP 3.1-1 Perform Verification
SP 3.2-2 Analyze Verification Results and Identify Corrective Action
(A)What is SIX sigma?
Sigma means deviation in Greek language. Deviation means how much variations exist in
a set of data. For instance let’s say in a software maintenance project out of 100 defects
68 defects are rectified to the mark and remaining bounce back that means your bug
fixing process is on “2 Sigma” level. I had described only from bug fixing perspective. But
this can be applicable to any process organization.
Figure 12.10 : - SIX Sigma Values
So I should only have 3.4 defects in a million defects then I can say I am six sigma.
384
(A)What is DMAIC and DMADV ?
Six Sigma has two key methodologies DMAIC and DMADV. DMAIC is used to improve
an existing business process. DMADV is used to create new product designs or process
designs in such a way that it results in a more predictable, mature and defect free
performance.
DMAIC
Basic methodology consists of the following five phases:
√ Define- formally define the process improvement goals that are consistent with
customer demands and enterprise strategy.
√ Measure- to define baseline measurements on current process for future comparison.
Map and measure process in question and collect required process data.
√ Analyze- to verify relationship and causality of factors. What is the relationship?
Are there other factors that have not been considered?
√ Improve - to optimize the process based upon the analysis using techniques like
Design of experiments.
√ Control- setup pilot runs to establish process capability, transition to production
and thereafter continuously measure the process and institute control mechanisms
to ensure that variances are corrected before they result in defects.
DMADV
Basic methodology consists of the following five phases:
√ Define- formally define the goals of the design activity that are consistent with
customer demands and enterprise strategy.
√ Measures- to identify CTQs, product capabilities, production process capability,
risk assessment, etc.
√ Analyze-to develop and design alternatives, create high-level design and evaluate
design capability to select the best design.
√ Design- to develop detail design, optimize design, and plan for design verification.
This phase may require simulations.
385
√ Verify-to design, setup pilot runs, implement production process and handover to
process owners. This phase may also require simulations.
(A)What are the various roles in Six Sigma implementation?
Attaining Six Sigma is team effort and can not be attained individually. Driving Six Sigma
itself in an organization is huge project as it involves lot of mentoring and change of
attitude of the current workers. So when an organization wants to drive the Six Sigma
way they appoint persons with certain roles as defined below.
Executive Leadership includes CEO and other key top management team members. They
are responsible for setting up a vision for Six Sigma implementation. They also empower
the other role holders with the freedom and resources to explore new ideas for breakthrough
improvements.
Champions are responsible for the Six Sigma implementation across the organization in
an integrated manner. The Executive Leadership draw them from the upper management.
Champions also act as mentor to Black Belts.
Master Black Belts, identified by champions, act as in-house expert coach for the
organization on Six Sigma. They devote 100% of their time to Six Sigma. They assist
champions and guide Black Belts and Green Belts. Apart from the usual rigor of statistics,
their time is spent on ensuring integrated deployment of Six Sigma across various functions
and departments.
Black Belts operate under Master Black Belts to apply Six Sigma methodology to specific
projects. They devote 100% of their time to Six Sigma. They primarily focus on Six Sigma
project execution, whereas Champions and Master Black Belts focus on identifying
projects/functions for Six Sigma.
Green Belts are the employees who take up Six Sigma implementation along with their
other job responsibilities. They operate under the guidance of Black Belts and support
them in achieving the overall results.
Note: - If you are going for project manager position then you will definitely need to
prepare yourself in the area of estimation to a good extent. In the coming sections we
will run through estimation related questions which are asked for project manager position.
Estimation is a real weakness in software industry today. Different technologies, different
company approaches and custom processes followed by software companies it still does
not have a standard. So we will try to run through the most embraced estimation
technologies by software industry.
386
(I)What are function points?
Twist: - Define Elementary process in FPA?
FPA is breaking huge systems in to smaller pieces and analyzing them. Software application
is combination of set of elementary processes. EP is smallest unit of activity that is
meaningful to the user. EP must be self contained and leave the application in a consistent
state. Elementary process is not necessarily completely independent or can exist by itself.
But it should leave the application in a consistent state.
(I)What are the different types of elementary process in
FPA?
There are two types of elementary process
√ Dynamic Elementary process
√ Static Elementary process
Dynamic elementary process moves data from internal application boundary to external
application boundary or vice-versa.
Examples of dynamic elementary process:
√ Input data screen where user inputs data in to application. Data moves from the
input screen inside application.
√ Transaction exported in export files in XML or any other standard.
√ Display reports which can come from external application boundary and internal
application boundary.
Static elementary process maintains data of application either inside application boundary
or in external application boundary.
Examples of static elementary process:
√ In a customer maintenance screen maintaining customer data is static elementary
process.
(I)What are the different elements in Functions points?
The different elements in function points are as follows:-
387
√ Internal Logical Files (ILF)
√ External Interface File (EIF)
√ Record Element Type (RET)
√ DET (Data element types)
√ File Type Reference (FTR)
√ External Input (EI)
√ External Inquiry (EQ)
√ External Output (EO)
Let’s run in detail through each of them.
Internal Logical Files (ILF)
Following are points to be noted for ILF:-
√ ILF are logically related data from user point of view.
√ They reside in Internal Application boundary and are maintained through elementary
process of application.
√ ILF may have maintenance screen or probably not.
388
Figure 12.11 : - Supplier ER database diagram
Note: - Do not make a mistake of mapping one to one relationship between ILF and
technical database design in that case FPA can go very misleading. The main difference
between ILF and technical database is ILF is logical view and database is physical
structure (Technical Design). Example Supplier database design will have tables like
Supplier, Supplier Address, and Supplier Phone numbers but from ILF point of view it’s
only Supplier. As logically they are all Supplier details.
External Interface file (EIF)
They are logically related data from user point of view.
√ EIF reside in external application boundary.
√ EIF is used only for reference purpose and are not maintained by internal application.
√ EIF is maintained by external application.
389
Record Element Type (RET)
Following are points to be noted for RET
√ RET are sub-group element data of ILF or EIF.
√ If there is no sub-group of ILF then count the ILF itself as one RET.
√ A group of RET within ILF are logically related, most probably with a parent
Child relationship. Example: - Supplier had multiple addresses and every address
can have multiple phone numbers (see the image below which shows database
diagrams). So Supplier, SupplierAddress and Supplier phone numbers are RET.
Figure 12.12 : - Whole supplier is one ILF.
Note: - The whole database is one supplier ILF as all belong to one logical section.
390
√ RET quantifies the relationship complexity of ILF and EIF.
DET (Data element types)
Following are the points to be noted for DET counting:-
√ Each DET should be User recognizable. Example in the above given figure we have
kept auto increment field (Supplierid) for primary key. Supplierid field from user
point of view never exists at all, it’s only from software designing aspect, so does
not qualifies for DET.
√ DET should be non-recursive field in ILF. DET should not repeat in the same ILF
again, it should be counted only once.
√ Count foreign keys as one DET. “Supplierid” does not qualifies as DET but its
relationship in “supplieraddress” table is counted as DET. So “Supplierid_fk” in
supplieraddress table is counted as DET. Same holds true for “Supplieraddressid_fk”.
File Type Reference (FTR)
Following are points to be noted for FTR:-
√ FTR is files or data referenced by a transaction.
√ FTR should be ILF or EIF. So count each ILF or EIF read during process.
√ If the EP is maintaining an ILF then count that as FTR. So by default you will
always have one FTR in any EP.
External Input (EI)
Following are points to be noted for EI:-
√ It’s a dynamic elementary process [For definition see “Dynamic and Static Elementary
Process”] in which data is received from external application boundary. Example: -
User Interaction Screens, when data comes from User Interface to Internal
Application.
√ EI may maintain ILF of the application, but it is not compulsory rule. Example: - A
calculator application does not maintain any data, but still the screen of calculator
will be counted as EI.
391
√ Most of time User Screens will be EI, again no hard and fast rule. Example: - An
import batch process running from command line does not have screen, but still
should be counted as EI as it helps passing data from External Application Boundary
to Internal Application Boundary.
External Inquiry (EQ)
Following are points to be noted for EQ
√ It’s a dynamic elementary process in which result data is retrieved from one or more
ILF or EIF.
√ In this EP some input request has to enter the application boundary.
√ Output results exits the application boundary.
√ EQ does not contain any derived data. Derived data means any complex calculated
data. Derived data is not just mere retrieval but are combined with additional formulae
to generate results. Derived data is not part of ILF or EIF, they are generated on fly.
√ EQ does not update any ILF or EIF.
√ EQ activity should be meaningful from user perspective.
√ EP is self contained and leaves the business in consistent state.
√ DET and processing logic is different from other EQ’s.
√ Simple reports form good base as EQ.
Note: - No hard and fast rules that only simple reports are EQ. Simple view functionality
can also be counted as EQ.
External Output (EO)
Following are points to be noted for EO:-
√ It’s a dynamic elementary process in which derived data crosses from Internal
Application Boundary to External Application Boundary.
√ EO can update an ILF or EIF.
√ Process should be the smallest unit of activity that is meaningful to end user in
business.
392
√ EP is self contained and leaves the business in a consistent state.
√ DET is different from other EO’s. So this ensures to us that we do not count EO’s
twice.
√ They have derived data or formulae calculated data.
√ Major difference between EO and EQ is that data passes across application boundary.
Example: - Exporting Accounts transaction to some external file format like XML
or some other format. This can be later imported by the external accounting software.
Second important difference is in EQ has non-derived data and EO has derived
data.
(A) Can you explain in GSC and VAF in function points?
In GSC (General System Characteristic) there are 14 factors which are rated on 1 to 5
depending on the complexity of the factor. Below are the 14 factors:-
√ Data communications: - How many communication facilities are there to aid in the
transfer or exchange of information with the application or system?
√ Distributed data processing: - How are distributed data and processing functions
handled?
√ Performance: - Did the user require response at times or throughout?
√ Heavily used configuration: - How heavily used is the current hardware platform
where the application will be executed?
√ Transaction rate:-How frequently are transactions executed; daily, weekly, monthly,
etc.?
√ On-Line data entry:-What percentage of the information is entered On-Line?
√ End-user efficiency:-Was the application designed for end-user efficiency?
√ On-Line update: - How many ILF’s are updated by On-Line transaction?
√ Complex processing:-Does the application have extensive logical or mathematical
processing?.
√ Reusability:-Was the application developed to meet one or many users needs?
√ Installation ease: - How difficult is conversion and installation?
393
√ Operational ease: - How effective and/or automated are start-up, back up, and
recovery procedures?
√ Multiple sites: - Was the application specifically designed, developed, and supported
to be installed at multiple sites for multiple organizations?
√ Facilitate change: - Was the application specifically designed, developed, and supported
to facilitate change?
Figure 12.13 : - GSC rated in estimation sheet
From the GSC we get the VAF i.e. Value added function points by the below formulae.
394
VAF = 0.65 + ((sum of all GSC factor)/100).
(I)What are unadjusted function points and how is it
calculated?
Unadjusted function points = ILF + EIF + EI + EQ + EO.
Below is the table referred for getting ILF, EIF, EI, EQ and EO.
Figure 12.14 : - Rating tables
395
(I)Can you explain steps in function points?
Below are the steps in function points:-
√ First Count ILF, EIF, EI, EQ, RET, DET, FTR and use the rating tables. After you
have counted all the elements you will get the unadjusted function points.
√ Put rating values 0 to 5 to all 14 GSC. Adding total of all 14 GSC to come out with
total VAF. Formula for VAF = 0.65 + (sum of all GSC factor/100).
√ Finally, make the calculation of adjusted function point. Formula: Total function
point = VAF * Unadjusted function point.
√ Make estimation how many function points you will do per day. This is also called as
"Performance factor".
√ On basis of performance factor, you can calculate Man/Days.
(I) What is the FP per day in your current company?
Twist :- What is your company’s productivity factor ?
Left to the readers as every company has his own FP per Day.
Note: - There is a free PDF provided “How to prepare Software Quotations?” Please do
refer Function point chapter.
(A)Do you know Use Case points?
In CD we have a complete free PDF tutorial of how to prepare software quotation. It has
all the estimation technology that today’s software industry uses.
(A)What is COCOMO I, COCOMOII and COCOMOIII?
In CD we have a complete free PDF tutorial of how to prepare software quotation. It has
all the estimation technology that today’s software industry uses.
(A) What is SMC approach of estimation?
Look for the PDF in the CD.
396
(A)How do you estimate maintenance project and change
requests?
Left for the readers to answer.
397
13. XML
Note: - In this chapter we will first just skim through basic XML interview questions so
that you do not get stuck up with simple questions.
(B)What is XML?
XML (Extensible markup language) is all about describing data. Below is a XML which
describes invoice data.
<?xml version="1.0" encoding="ISO-8859-1"?>
<invoice>
<productname>Shoes</productname>
<qty>12</qty>
<totalcost>100</totalcost>
<discount>10</discount>
</invoice>
An XML tag is not something predefined but it is something you have to define according
to your needs. For instance in the above example of invoice all tags are defined according
to business needs. The XML document is self explanatory, any one can easily understand
looking at the XML data what exactly it means.
(I)What is the version information in XML?
“version” tag shows which version of XML is used.
(B)What is ROOT element in XML?
In our XML sample given previously <invoice></invoice> tag is the root element. Root
element is the top most elements for a XML.
(B)If XML does not have closing tag will it work?
No, every tag in XML which is opened should have a closing tag. For instance in the top
if I remove </discount> tag that XML will not be understood by lot of application.
398
(B)Is XML case sensitive?
Yes, they are case sensitive.
(B)What is the difference between XML and HTML?
XML describes data while HTML describes how the data should be displayed. So HTML
is about displaying information while XML is about describing information.
(B)Is XML meant to replace HTML?
No, they both go together one is for describing data while other is for displaying data.
(A)Can you explain why your project needed XML?
Note: - This is an interview question where the interviewer wants to know why you have
chosen XML.
Remember XML was meant to exchange data between two entities as you can define your
user friendly tags with ease. In real world scenarios XML is meant to exchange data. For
instance you have two applications who want to exchange information. But because they
work in two complete opposite technologies it’s difficult to do it technically. For instance
one application is made in JAVA and the other in .NET. But both languages understand
XML so one of the applications will spit XML file which will be consumed and parsed by
other applications
You can give a scenario of two applications which are working separately and how you
chose XML as the data transport medium.
(B)What is DTD (Document Type definition)?
It defines how your XML should structure. For instance in the above XML we want to
make it compulsory to provide “qty” and “totalcost”, also that these two elements can
only contain numeric. So you can define the DTD document and use that DTD document
with in that XML.
(B)What is well formed XML?
If a XML document is confirming to XML rules (all tags started are closed, there is a root
element etc) then it’s a well formed XML.
399
(B)What is a valid XML?
If XML is confirming to DTD rules then it’s a valid XML.
(B)What is CDATA section in XML?
All data is normally parsed in XML but if you want to exclude some elements you will
need to put those elements in CDATA.
(B)What is CSS?
With CSS you can format a XML document.
(B)What is XSL?
XSL (the eXtensible Stylesheet Language) is used to transform XML document to some
other document. So its transformation document which can convert XML to some other
document. For instance you can apply XSL to XML and convert it to HTML document or
probably CSV files.
(B)What is element and attributes in XML?
In the below example invoice is the element and the invnumber the attribute.
<invoice invnumber=1002></invoice>
(B)Which are the namespaces in .NET used for XML?
“System.xml.dll” is the actual physical file which has all XML implementation. Below are
the commonly used namespaces:-
√ System.Xml
√ System.Xml.Schema
√ System.Xml.XPath
√ System.Xml.Xsl
(A)What are the standard ways of parsing XML
document?
400
Twist: - What is a XML parser?
XML parser sits in between the XML document and the application who want to use the
XML document. Parser exposes set of well defined interfaces which can be used by the
application for adding, modifying and deleting the XML document contents. Now whatever
interfaces XML parser exposes should be standard or else that would lead to different
vendors preparing there own custom way of interacting with XML document.
There are two standard specifications which are very common and should be followed by
a XML parser:-
DOM: - Document Object Model.
DOM is a W3C recommended way for treating XML documents. In DOM we load entire
XML document into memory and allows us to manipulate the structure and data of XML
document.
SAX: - Simple API for XML.
SAX is event driven way for processing XML documents. In DOM we load the whole
XML document in to memory and then application manipulates the XML document. But
this is not always the best way to process large XML documents which have huge data
elements. For instance you only want one element from the whole XML document or you
only want to see if the XML is proper which means loading the whole XML in memory
will be quiet resource intensive. SAX parsers parse the XML document sequentially and
emit events like start and end of the document, elements, text content etc. So applications
who are interested in processing these events can register implementations of callback
interfaces. SAX parser then only sends those event messages which the application has
demanded.
401
Figure 13.1 : - DOM Parser loading XML document
Above is a pictorial representation of how DOM parser works. Application queries the
DOM Parser for “quantity” field. DOM parser loads the complete XML file in to memory.
402
Figure 13.2 : - Returning the Quantity value back to application
DOM parser then picks up the “quantity” tag from the memory loaded XML file and
returns back to the application.
403
Figure 13.3 : - SAX parser in action
SAX parser does not load the whole DOM in to memory but has event based approach.
SAX parser while parsing the XML file emits events. For example in the above figure its
has emitted Invoice tag start event, Amount Tag event, Quantity tag event and Invoice
end tag event. But our application software is only interested in quantity value. So the
application has to register to the SAX parser saying that he is only interested in quantity
field and not any other field or element of the XML document. Depending on what
interest the application software has SAX parser only sends those events to the application
the rest of events is suppressed. For instance in the above figure only quantity tag event
is sent to the application software and the rest of the events are suppressed.
404
(A)In What scenarios will you use a DOM parser and
SAX parser?
√ If you do not need all the data from the XML file then SAX approach is much
preferred than DOM as DOM can quiet memory intensive. In short if you need
large portion of the XML document its better to have DOM.
√ With SAX parser you have to write more code than DOM.
√ If you want to write the XML in to a file DOM is the efficient way to do it.
√ Some time you only need to validate the XML structure and do not want to retrieve
any Data for those instances SAX is the right approach.
(A) How was XML handled during COM times?
During COM it was done by using MSXML 4.0. So old languages like VB6, VC++ used
MSXML 4.0 which was shipped with SP1( Service Pack 1).
Note: - This book will not show any samples as such for MSXML 4.0. So if anyone
interested please do refer the same in MSDN and try to compile some sample programs.
(A)What is the main difference between MSML and .NET
Framework XML classes?
MSXML supports XMLDOM and SAX parsers while .NET framework XML classes
support XML DOM and XML readers and writers.
MSXML supports asynchronous loading and validation while parsing. For instance you
can send synchronous and asynchronous calls to a remote URL. But as such there is not
direct support of synchronous and asynchronous calls in .NET framework XML. But
same can be achieved by using “System.Net” namespaces.
(B) What are the core functionalities in XML .NET
framework? Can you explain in detail those
functionalities?
The XML API for the .NET Framework comprises the following set of functionalities:
405
XML readers
With XML readers the client application get reference to instance of reader class. Reader
class allows you to scroll forward through the contents like moving from node to node or
element to element. You can compare it with the “SqlDataReader” object in ADO.NET
which is forward only. In short XML reader allows you to browse through the XML
document.
XML writers
Using XML writers you can store the XML contents to any other storage media. For
instance you want to store the whole in memory XML to a physical file or any other
media.
XML document classes
XML documents provides a in memory representation for the data in an XMLDOM
structure as defined by W3C. It also supports browsing and editing of the document. So
it gives you a complete memory tree structure representation of your XML document.
(B)What is XSLT?
XSLT is a rule based language used to transform XML documents in to other file formats.
XSLT are nothing but generic transformation rules which can be applied to transform
XML document to HTML, CS, Rich text etc.
406
Figure 13.4 : - XSLT Processor in Actions
You can see in the above figure how the XSLT processor takes the XML file and applies
the XSLT transformation to produce a different document.
(I)Define XPATH?
It is an XML query language to select specific parts of an XML document. Using XPATH
you can address or filter elements and text in a XML document. For instance a simple
XPATH expression like “Invoice/Amount” states find “Amount” node which are children
of “Invoice” node.
(A)What is the concept of XPOINTER?
XPOINTER is used to locate data within XML document. XPOINTER can point to a
particular portion of a XML document, for instance
address.xml#xpointer(/descendant::streetnumber[@id=9])
So the above XPOINTER points streetnumber=9 in “address.xml”.
407
(B)What is an XMLReader Class?
It is an abstract class available from System.XML namespace. XML reader works on a
read-only stream browsing from one node to other in a forward direction. It maintains
only a pointer to the current node but has no idea of the previous and the next node. You
can not modify the XML document, you can only move forward.
(B)What is XMLTextReader?
The “XmlTextReader” class helps to provide fast access to streams of XML data in a
forward-only and read-only manner. It also checks if the XML is well-formed. But
XMLTextReader does not validate against a schema or DTD for that you will need
“XmlNodeReader” or “XmlValidatingReader” class.
Instance of “XmlTextReader” can be created in number of ways. For example if you
want to load file from a disk you can use the below snippets.
XmlTextReader reader = new XmlTextReader(fileName);
To loop through all the nodes you need to call the “read()” method of the “XmlTextreader”
object. “read()” method returns “true” if there are records in the XML document or else
it returns “false”.
//Open the stream
XmlTextReader reader = new XmlTextReader(file);
while (reader.Read())
{
// your logic goes here
string pdata = reader.Value
}
// Close the stream
reader.Close();
To read the content of the current node on which the reader object is you use the “value”
property. As shown in the above code “pdata” gets the value from the XML using
“reader.value”.
408
(I)How do we access attributes using “XmlReader”?
Below snippets shows the way to access attributes. First in order to check whether there
any attributes present in the current node you can use “HasAttributes” function and use
the “MoveToNextAttribute” method to move forward in attribute. In case you want to
move to the next element use “MoveToElement()”.
if (reader.HasAttributes)
{
while(reader.MoveToNextAttribute())
{
// your logic goes here
string pdata = reader.Value
}
}
reader.MoveToElement();
(I) Explain simple Walk through of XmlReader ?
In this section we will do a simple walkthrough of how to use the “XmlReader” class.
Sample for the same is available in both languages (C# and VB.NET) which you can find
in “WindowsApplicationXMLVBNET” and “WindowsApplicationCSharp” folders. Task
is to load “TestingXML.XML” file and display its data in a message box. You can find
“TestingXML.XML” file in “BIN” directory of both the folders. Below is the display of
“TestingXML.XML” file and its content.
Figure 13.5 : - Testing.XML Data
409
Both the projects have command button “CmdLoadXML” which has the logic to load the
XML file and display the data in messagebox. I have pasted only the “CmdLoadXML”
command button logic for simplicity. Following are the basic steps done:-
√ Declared the “XMLTextReader” object and gave the XML filename to load the
XML data.
√ Read the “XMLTextReader” object until it has data and concatenate the data in a
temporary string.
√ Finally display the same in a message box.
Figure 13.6 : - VB.NET code for XMLReader
Same holds true for C# code as shown below.
410
Figure 13.7 : - C# code for XMLReader
Figure 13.8 : - Data Display for “TestingXML.XML”
411
(A) What does XmlValidatingReader class do?
XmlTextReader class does not validate the contents of an XML source against a schema.
The correctness of XML documents can be measured by two things is the document well
formed and is it valid. Well-formed means that the overall syntax is correct. Validation is
much deeper which means is the XML document is proper w.r.t schema defined.
So the XmlTextReader only checks if the syntax is correct but does not do validation.
There’s where XmlValidatingReader class comes in to picture. So this again comes at a
price as XmlValidatingReader have to check for DTD and Schema’s there are slower
compared to XmlTextReader.
412
14. Localization/Globalization
(B)What is Unicode and why was it introduced?
Note: - This moment is special to me. While sipping tea in morning I received this email
from one of my readers.
“I should say your book has everything in the world which a .NET person will need. I am
a fresher from Hyderabad. In eight months my sister has to be operated. For that I should
get a job some how in 2 weeks so that I am eligible for a loan after 6 months. That’s when I
came across your book. I Read it again, and again from top to bottom. LOL got a job in 2
weeks. Thanks for saving my sister and making me a proud brother”.
Reading this email has made me really fresh, more than what my morning tea can give me.
Mail me your job search success and struggles to shiv_koirala@yahoo.com.
In order to understand the concept of Unicode we need to move little back and understand
ANSI code. ASCII (ask key) stands for American Standard Code for Information
Interchange. In ASCII format every character is represented by one byte (i.e. 8 bits). So in
short we can have 256 characters (2^8). Before UNICODE came in to picture programmers
used code page to represent characters in different languages. Code page is a different
interpretation of ASCII set. Code pages keep 128 characters for English and the rest 128
characters are tailored for a specific language.
Below is a pictorial representation of the same.
Figure 14.1 :- Code page in action
413
There are following disadvantages of the CODE page approach:-
√ Some languages like Chinese have more than 5000 characters which is difficult to
represent only 128 character set.
√ Only two languages can be supported at one time. As said in the previous note you
can use 128 for English and the rest 128 for the other language.
√ The end client should have the code page.
√ Code Representation change according to Operating system and Language used.
That means a character can be represented in different numbers depending on
operating system.
For all the above problems UNICODE was introduced. UNICODE represents characters
with 2 bytes. So if its two bytes that means 18 bits. You can now have 2^16 characters i.e.
65536 characters. That's a huge number you can include any language in the world. Further
if you use surrogates you can have additional 1 million characters...Hmm that can include
type of language including historian characters.
ASCII representation varied according to operating system and language. But in
UNICODE it assigns a unique letter for every character irrespective of Language or
operating system which makes programmers life much easier while developing international
compatible applications.
(I)Does .NET support UNICODE and how do you
know it supports?
Yes .NET definitely supports UNICODE. Try to see sizeof (char), you will see 2 bytes.
Char type data type stores only one character which needs only 8 bits but because .NET
has to support UNICODE it uses 16 bits to store the same.
(A)What’s the difference between localization
and globalization?
Below are the definition’s which is taken from the Microsoft glossary.
Globalization: It is the process of developing a program core whose features and code
design are not solely based on a single language or locale.
414
Localization: The process of adapting a program for a specific local market, which includes
translating the user interface, resizing dialog boxes, customizing features (if necessary),
and testing results to ensure that the program still works.
You can visualize globalization as more of architecture decisions. While localization is
adapting your content to local market. Localization phase occurs before globalization
phase.
(A)What architecture decisions you should
consider while planning for international
software’s?
Note: - Many programmers think its only converting the text from one language to other. It’s
a very wrong assumption that just by translating strings from one language to other language
the software is localized. Interviewer will definitely get disappointed by such an answer. So
let’s try to visualize what are the design considerations to be taken when we design software
globally.
√ Avoid hard coding of strings in the project. Any display right from labels to error
messages read it from a resource file.
√ Length of the string is also of prime importance. It’s a noted fact that when we
translate English language in to other language the words increase by minimum 30
to 40 %. For instance you can see from the below figure how the Hindi text has
increased as compared to English text.
Figure 14.2 : - Text length increase
415
So all your labels, message boxes have to be designed in such a way that this text size
mismatch is adjusted. Do not crowd all your fields on one screen you will definitely end
with the text length issue. Leave some room for expansion.
√ Decimal separator varies from locale to locale. For instance 25, 12.80 in the United
States is 25.12,80 in Greece or Germany. Yes you guessed right the decimal separator
in Europe is a "," (Comma).
√ Calendar changes from country to country. Definitely Gregorian calendar is the most
used. But there are some other calendars like Hebrew, Islamic, Chinese etc. All
these calendars have huge differences. For instance Nepal follows Nepali Calendar
which is 56.7 years ahead of Gregorian calendar. So according to cultural settings
user can expect the dates accordingly.
√ Sort order is affected by language. You can see from the figure below Hindi and
English languages have different sorting order.
Figure 14.3 : - Different sorting order according to locale
√ Time varies from locale to locale. For instance an 8 PM in India is 20:00 in Europe.
In Europe there is not concept of AM and PM.
416
√ If you are using built-in fonts use the resource file to bundle the same. You can load
the fonts from the resource file rather than telling the user explicitly to install the
fonts in his PC.
√ Keyboards layout changes according locale and region. So be careful while designing
the short cut keys. The function keys are mostly present in all key boards. Probably
you can consider the function keys for short cut keys. Below is a sample Hindi key
board. If you define CTRL + V as a short cut for paste functionality it can create
confusion for Hindi users on the below key board.
Figure 14.4 : - Localized Hindi keyboard
Courtesy: - Image taken from http://www-306.ibm.com/
So you can see from the above points that making software adapt to global culture is not
only related to string translation. It’s much beyond that.
(I) How do we get the current culture of the
environment in windows and ASP.NET?
“CultureInfo.CurrentCulture” displays the current culture of the environment. For instance
if you are running Hindi it will display “hi-IN”. Please note one thing in mind
“CurrentCulture” will only give you the culture on which your application is running. So
if it’s a windows application this will work fine. But in ASP.NET 2.0 we need to know
what culture the end user has.
For a real international website different users can log in with different culture. For instance
you can see from the given figure below different users are logging in with different
417
regional settings. Client browser sends the information in the request headers to the server.
For instance a Korean user will send “KO” in the request headers to server. We can get
the value using the” Request.UserLanguages”.
Figure 14.5 : - Different users logging in from different countries
Regional settings are defined on the user’s browser as shown below. Click on Tools –
Internet options – Languages. You can then add languages in the language preference
box. Using "Move up" and "Move down" you can define the priority of the languages. In
the below figure we have four languages defined with “Hindi” language set at the top
priority. ” Request.UserLanguages” returns back an array of string with the sorted order
defined in your language preference tab of the browser.
418
Figure 14.6 : - Setting language preferences in browser
Below is the code snippet which shows how we can display the user languages. The first
figure is the code snippet which shows how to use “Request.UserLanguages”. The second
figure shows the output for the same.
Figure 14.7 : - Request.UserLangauges in action
419
Figure 14.8 : - Output from request.Userlanguages
One of the things to be noted is “q” value. “q” stands for quality factor. In the above
figure the quality factor means the following:-
"I prefer Hindi, but will accept English US (with 80% comprehension) or Greek (with
50% comprehension) or French (with 30 % comprehension)."
Just for Non-English speakers meaning of Comprehension.
It is the process of understanding and constructing meaning from a piece of text.
The comprehension is from the perspective of the end user. It says the end browser user
will understand with this much comprehension for that language. For instance in the
above example the end browser under stands English comprehension of 80 %.
Note: - You can find the sample to display the user languages in “Globalization” folder.
Run “DisplayAllLanguageSettings.aspx” and see the output. Just to mention the source is
coded in VS.NET 2005 so if you try to open it using VS.NET 2003 you can get errors.
(B) Which are the important namespaces during
localization and globalization?
There are two most important namespaces:-
√ System.Globalization - contains classes that define culture-related information,
including the language, the country/region, the calendars in use, the format patterns
for dates, currency and numbers, and the sort order for strings.
√ System.Resources - provides classes and interfaces that allow developers to create,
store, and manage various culture-specific resources used in an application. With
420
this namespace you can read a resource file and display it accordingly to the user’s
culture.
(B)What are resource files and how do we
generate resource files?
Resource files are files which contain program resources. Many programmers think resource
files for only storing strings. But you can also store bitmaps, icons, fonts, wav files in to
resource files.
In order to generate resource file you need click on tools – generate local resource as
shown in the figure below. Do not forget to keep page in designer view or else you will not
see the option. Once you generate the resource file you will see the resx file generated in
the solution explorer.
Figure 14.9 : - Generating resource files using IDE
If you see the resource file it has basically key and the value for the key.
421
Figure 14.10 : - Resource file in action
If you see the above figure the key is basically the object name. You can see the Label1
has some value stored in the resource file.
(I) Can resource file be in any other format other
than resx extensions?
Yes they can be in .txt format in name and value pairs. For instance below is a simple .txt
file with values.
lblUserId = User Id
lblPassword = Password
cmdSubmitPassword = Submit
(I)How is resource files actually used in project?
(A)How can we use Culture Auto in project?
422
Note: - Hmmm we have talked so much theoretically its time to see something practically in
action. Let’s make small project to understand how we can implement the same. In
Globalization folder you can run the “LoginScreen.aspx” to see it practically. Below goes
the explanation.
We will make a simple login screen which we will try to use for English as well as Greek.
Note: - I was thinking of using Hindi as the second language. But while writing this
tutorial my Hindi culture settings was not properly installed so switched to Greek. Well I
worked in Greece for 2 years it was a lovely country. This answer I dedicate to the wonderful
days spent in Greece.
The login screen will display English settings when an English user logs in and Greek
Settings when a Greek user logs in. So below are the steps to start with.
Figure 14.11 : - Culture Auto in action
423
In the above figure you can see the login page. You can find the same in CD as named
“LoginScreen.aspx”. It’s a simple page with two labels and two text boxes. Now the labels
values i.e. “User ID” and “Password” should be changed according to regional settings
set on the browser. So below are the steps for the same:-
√ Make two resource files as shown below one for Greece and other for English.
There are three values defined for “Userid”, “Password” and the main title of the
page. One important thing to note is the naming convention of the files. You need
to tag the naming convention with the language code. You can see from the below
figure the resource files naming convention is divided in two three parts File name,
Language code and resource file extension. In this sample we will demonstrate for
English and Greek language so I tagged the file with “el” language code.
Figure 14.12 : - Resource file naming conventions
Below are the two resource files defined.
Figure 14.13: - Greek and English resource files
424
√ Once you have defined your resource files we need to define two attributes
“UICulture=Auto” and “Culture=Auto”. See the above figure “Culture Auto in
Action”.
√ Final step you also need to define resource key at the UI object level. You can see a
sample of the same in figure “Culture Auto in Action”.
Figure 14.14 : - Login screen according to settings
Compile the project, run and see the output after changing regional settings for both
languages. You should see different outputs as shown in the above figure. With out a
single line of code everything works…. That’s the magic of “UICulture=Auto” attribute.
Note: - You can the get the above source code in “Globalization” folder. See for
“LoginScreen.aspx” page.
Note: - In the further section we will answer all the below questions in one shot.
(B)What are satellite assemblies?
(A)How do we generate Satellite assemblies?
(A)What is AL.EXE and RESGEN.EXE?
In the previous question you have seen how we can use resource files to store data according
to the localized languages. But when you actually go for deployment you will not like to
also install the “resx” or “txt” files. It’s definitely not a good deployment practice to install
data which can be easily modified. In short some how we should install this in a binary
425
format so that no end user can change it. That’s why Microsoft introduced satellite
assemblies.
Satellite assemblies are assemblies which do not contain source code. They only contain
resource files. You can create a satellite assembly using rsgen.exe and al.exe. They are in
binary DLL format which makes it easier to ship it during deployment. So finally during
deployment you do not need to ship the resx files but only the compiled satellite DLL.
Figure 14.15 : - resgen.exe and al.exe in action
The above diagram will give you a complete picture of how to generate Satellite assembly.
You can see from the above figure we need two exe resgen.exe and al.exe. Once you
made your resx file or text file you should first convert in to a “.resource” files. This is
done by using the resgen.exe. Below is the command snippet for resgen.exe where
LoginScreen.aspx.el.resx is the resx file and output is Greek.resources file. If you do not
provide the output file name it will generate “LoginScreen.resources”.
resgen LoginScreen.aspx.el.resx Greek.resources
You can also generate resx files from txt file using resgen.exe below is the code snippet for
the same:-
resgen MyLanguage.txt MyLanguage.resx
The above command snippet will generate a MyLanguage.resx using MyLanguag.txt file.
You can make a DLL using resource files and not resx so you should make this conversion.
Now once the resource file is generated its time make the compiled assembly of the same
so that it can be shipped during deployment. This is accomplished by using the assembly
linker tool al.exe provided by Microsoft. Below is the command code snippet for the
same.
426
al.exe /out:el.dll /c:de /embed:greek.resources
In the /out switch you need to provide the output DLL name. /c you need to specify the
culture of the resource file. /embed you need to specify all the resources which are present
in the resource file. As said previously other than strings you can also put image files like
GIF, BMP etc. So those physical resources you can specify in the /embed switch. You can
specify more than one resource use “,” as a separator to specify more than one resource
files.
(I)What’s the use of resource manager class?
ResourceManager class helps us to read the resource files and get the values using key.
First you need to create the object of resource manager. You need to specify the resource
name and the assembly in the constructor.
private ResourceManager objResourceManager = new
ResourceManager("Globalization.resource",System.Reflection.Assembly.GetExecutingAssembly());
Once the resource manager is populated with details you can then use the GetString
function to get by key. For instance in the below code snippet we are using the
“cmdAddNew” key to get the value for button “cmdAddNew”.
cmdAddNew.Text = objResourceManager.GetString("cmdAddNew");
(A)What precautions do we need to take while
deploying satellite assemblies?
When we deploy the assembly, the folder structure has to very organized. Below table
shows how the folder structure should be organized. MainFolder is the main application
folder. All satellite assemblies should be deployed in the Main application folder with in
there own respective folder. The respective folder is denoted by the culture code.
Figure 14.16 : - Satellite Assembly folder structure
427
You can see from the above figure Hindi satellite assembly is deployed in hi folder, Greek
satellite assembly is deployed in el folder and so on. If the program does not find resource
file for a culture it uses the invariant culture satellite assembly. The above folder structure
is a strict requirement when we deploy the satellite assembly. Any mismatch in the folder
structure will lead to in appropriate results.
(A)Can we get a strongly typed resource class
rather than using resource manager?
In the previous question we had seen how resourcemanager class can be used to read the
string from the resource file. But there has been considerable improvement in VS.Net
2005 for resource support. You no more need to load using resourcemanager class. Though
Microsoft has still kept it for backward compatibility. You can now get strongly types
classes in your VS.NET intellisense as shown in the figure below.
Figure 14.17 : - Strongly typed resource class
All belong to Resources namespace. Let’s do a small sample and see how the strongly
typed classes work in VS.NET 2005 and the simplicity which they bring while implementing
globalization in projects. Below is the screen shot of the project. It’s basically a simple
login screen with user id and password text boxes. User has options to select the language.
Currently only two languages are provided English and Greek. Depending on the languages
selected the user id and password label values will be displayed.
428
Figure 14.18 : - Strongly typed project
Note: - In the globalization project you can get the project sample in
“LoginScreenUsingStrongType.aspx”.
Below is the code snippet which describes the various important sections of the code.
First thing are the resource files. We have generated two resource files one for Greece
with el and second is the general resource file which will be used when the regional code
does not match.
429
Figure 14.19 : - Walkthrough for using the resources namespace
There are three important steps in the code:-
√ First is set the culture information for the current thread with the new culture info
object. StrCulture has the language code which is currently selected in the drop
down.
Thread.CurrentThread.CurrentCulture = new CultureInfo(strCulture);
√ We set the same culture to the Resource class.
Resources.Resource.Culture = Thread.CurrentThread.CurrentCulture;
√ Now we are all set to use the value.
lblUserId.Text = Resources.Resource.lblUserIdResource1.ToString();
430
lblPassword.Text = Resources.Resource.lblPasswordResource1.ToString();
Note: - You can get the same from globalization folder in
“LoginScreenUsingStrongType.aspx”. Try to add a new language and most of the
fundamentals will be clear.
(A)Can you explain the fundamentals of
“GetGlobalResourceObject” and
“GetLocalResourceObject” functions?
These two functions belong to the HttpContext object. Using it you can get the object
reference of the resource object. For instance you can see from the below code snippet
we have got reference to the Global resource object and we are trying to get the value for
“lblUserIdresource1” key.
lblUserId.Text=HttpContext.GetGlobalResourceObject("Resource",
"lblUserIdResource1").ToString();
Note :- In the same globalization folder there is “LoginScreenUsingGetGlobal.aspx” which
demonstrates how “GetGlobalResource” works.
One short note because “GetGlobalResourceObject” and “GetLocalResourceObject”
operate from with in current HttpContext.It uses what the regional settings are sent from
the browser end.
(A)Can we sign a satellite assembly?
Yes you can sign the satellite assembly using the /keyfile switch which takes “.snk” file as
the input parameter.
al /res:MyLanguage.resources /c:de /keyfile:MyLang.snk out:MyLanguages.resources.dll
(I)Can you explain collation sequence in sql
server?
First let’s define collation.
Collation sequences are set of rules which determine how the data is sorted and compared.
Sorting rules can be defined with options with case-sensitivity, accent marks, kana character
types and character width.
431
Case sensitivity
If A and a, B and b, etc. are treated in the same way then it is case-insensitive. A computer
treats A and a differently because it uses ASCII code to differentiate the input. The ASCII
value of A is 65, while a is 97. The ASCII value of B is 66 and b is 98.
Accent sensitivity
If a and á, o and ó are treated in the same way, then it is accent-insensitive. A computer
treats a and á differently because it uses ASCII code for differentiating the input. The
ASCII value of a is 97 and áis 225. The ASCII value of o is 111 and ó is 243.
Kana Sensitivity
When Japanese kana characters Hiragana and Katakana are treated differently, it is called
Kana sensitive.
Width sensitivity
When a single-byte character (half-width) and the same character when represented as a
double-byte character (full-width) are treated differently then it is width sensitive.
(A)How do we define collation sequence for
database and tables?
You can create a database with language specific collation sequence. For instance in the
below create statement tblCustomer is created by Latin language collation sequence.
Create database tblCustomer collate Latin1_General_BIN
You can also create tables with particular collation sequence. Below is the create table
syntax for the same.
Create table tblCustomer
(
[CustomerCode] char(10) COLLATE Albanian_CI_AI_KS_WS NULL,
432
[EntryDate] [char] (8) COLLATE Korean_Wansung_Unicode_CS_AS_KS NOT
NULL ,
[CustAbbrev] [char] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT
NULL
)
(A)Can we change the order in a select query
with a specified collation sequence?
Yes we can specify a collate sequence in the order by clause. That will change the sort
according to the collation defined in the order by claused.
ORDER BY
{
order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
} [ ,...n ] ]
(A)Can you list best practices for globalization
and localization?
Below are the best practices while developing international language support software:-
√ Do not hardcode strings or user interface resources.
√ Make sure your application depends on Unicode.
√ When ever you read or write data from various encoding make sure you use the
System.text namespace. Many programmers assume ASCII data.
√ While testing test it with actual international data and environments.
√ Whenever we manipulate data for instance numbers, dates or currency make sure
that you are using culture-aware classes defined in System.Globalization namespace.
Below is the table which specifies in more detail about the functionality and the
classes to be used to achieve the same.
433
Figure 14.20 : - Functionality and classes used
√ If a security decision is based on the result of a string comparison or case change
operation, perform a culture-insensitive operation by explicitly specifying the
CultureInfo.InvariantCulture property. This practice ensures that the result is not
affected by the value of CultureInfo.CurrentCulture.
√ Move all your localizable resources to separate DLL’s.
√ Avoid using images and icons that contain text in your application. They are expensive
to localize.
√ Allow plenty of room for the length of strings to expand in the user interface. In
some languages, phrases can require 50-75 percent more space.
√ Use the System.Resources.ResourceManager class to retrieve resources based on
culture.
√ Explicitly set the CurrentUICulture and CurrentCulture properties in your application.
Do not rely on defaults.
√ Be aware that you can specify the following three types of encodings in ASP.NET:
√ requestEncoding specifies the encoding received from the client's browser.
√ responseEncoding specifies the encoding to send to the client browser. In most
situations, this should be the same as requestEncoding.
√ FileEncoding specifies the default encoding for .aspx, .asmx, and .asax file parsing.
(A)Why is the culture set to the current thread?
434
First let me explain this question. If you look at the code snippet of how to set the culture
info.
Thread.CurrentThread.CurrentCulture = new CultureInfo(strCulture);
It uses the current thread to set it. What does that mean? Let’s drill down a bit of how IIS
handles request to understand this concept. When any user requests a resource from IIS
like an ASPX page or any other resource. IIS services that request in his own thread. That
means if 100 users have requested some resource from IIS he will serve every request in
its own thread. In short IIS will spawn 100 threads to service the 100 request. It’s very
much practically possible that you can have different locale in different threads. So when
we set a culture we can not set it for the whole application as it will affect all the requests.
So when we set a culture we set it to a particular thread rather to the whole application.
Note: - Phew!!! Big chapter right. Yes even I feel the same thing. But I am sure that we have
covered most of the points. But yes who knows what’s up in the mind of the
interviewer….We can be just prepared for the worst.
435
15. Windows Communication
Foundation(Vista Series)
Note: - PHEW... One more mountain to capture, one more road to walk, one more area to
prepare, one more new technology to learn…..I think that’s what we call, a life of software
professional. Hmmm….. Talks and Jokes apart, welcome to one more new technology
introduced by Microsoft WCF (Windows Communication Framework).
(B) What is .NET 3.0
In one simple equation .NET 3.0 = .NET 2.0 + Windows Communication Foundation +
Windows Presentation Foundation + Windows Workflow Foundation + Windows
CardSpace.
Note :- All the above section ( WCF , WPF and WWF ) have dedicated chapters. We are
not covering Windows Cardspace.So we will go through a quick definition for it and then go
deeper in to WCF.
(B) What is Windows CardSpace ?
It was previously known by its codename InfoCard. It is a framework by microsoft which
securely stores digital identities of a user and provides a unified interface to choose the
identity for a particular transaction, such as logging in to a website. Windows Card Space
is a central part of microsoft’s effort to create an identity metasystem , or a unified ,
secure and interoperable identity layer for the internet.
(B) What is WCF?
First let’s give a short answer to this: - “WCF (Indigo was the code name for WCF) is a
unification of .NET framework communication technologies “. Ok let me tell you a
story.
Note: - I am bad at story telling but if you are reading this at night it can serve you as good
technical bed time story.
Long Long time a ago there lived a hard working and a nice architecture. He used to work
for a travel agent with his small and happy team software professionals. Travel agent had
tie ups with many big flight carriers. The nice and hardworking architecture and his team
developed a nice booking engine by which you can book tickets through any of the flight
436
carriers. The Travel Agent Company was very happy with the architecture and his team
member’s achievements.
As time passed by the travel agent’s business grew in multiples. Travel agent started his
own franchise. Travel agent wanted to provide this booking engine service to his franchise.
So one fine morning he called the hard working architecture. Architecture was very excited
of the new work and started on it day and night. He prepared a list of franchise and made
personal visits to see what infrastructure they had. He saw all the franchise worked in
Microsoft Windows platform. Booking engine was located in the main head office and all
the franchise should communicate to this booking engine. After discussing with his team
members he concluded that the best way to communicate is .NET remoting because the
head office where the booking engine was hosted was also on windows platform and the
other franchise where also on the same. He then worked day and night with his team
members to implement .NET remoting to enable communication between the franchise
and the booking engine hosted in the head office. After months he rolled out his project
successfully.
Travel Agent was very happy with his architecture and the team. Travel agent was now
providing his booking service to his franchise in the most efficient manner. Time passed
by and because of the good automated booking service more companies wanted to take
the franchise from the travel agent. But the big issue was many of the franchise did not
have windows operating system. They worked on Linux and other Non-Microsoft operating
systems. Due to this limitation travel agent was loosing lot of franchise business. So one
fine day they again called the Architecture and said that the booking engine should also
be available to Non-Microsoft platforms. Architecture again went in to action. He setup
a high level team meeting and discussed the best solution on Non-Microsoft platforms.
After long discussion’s they concluded Web services as the solution. His team again went
in to action and implemented the solution. So now his booking engine architecture was
working with two technologies .NET remoting and Web services. He kept .NET remoting
so that he can get speed and performance benefits from common windows platform and
he also kept Web services so that he can operate seamlessly with Non-Microsoft platforms.
Travel agent was now at his peak of happiness as he had the world at his tips. Franchise
now started making huge ticket bookings through the booking engine. Booking engine
had the capacity of serving 20 tickets / second but it had now to serve 50 tickets /
second. End franchise client had to wait to get response and was not able to process the
next ticket booking until the first one was served. Travel Agent started receiving huge
437
complaints because of this synchronous processing. They again called the architecture
and proposed the problem before him. Now architecture was really at a fix as he did not
wanted to touch the booking engine logic to increase performance. So he concluded to
use MSMQ (Microsoft Message Queuing) service. He analyzed that the main problem
was that the travel agent had to wait until his first ticket booking is not completed. So
when the travel agent makes a booking it will come and fall in the queue and release the
travel agent. Booking engine will always poll for this queue. When the booking engine
finishes he will publish the booking results back to the queue. Travel agent client can
then come at his leisure and see the results. Again he and his team mates implemented
this solution.
Every one in the travel company was really happy and impressed by the architect and his
team members. As time passed by the booking engine was serving huge ticket bookings.
Travel Agent then felt a huge necessity of a good security model with the booking engine.
Again the architecture was called; he again had a kick of meeting and proposed WSE as
the security solution. Implemented the same and everything was fine.
After some days travel agent wanted to start a scheme to book group family ticket bookings
through the booking engine. Till now the travel agent was booking one ticket at a time.
But soon he started getting lot of orders to book group family tickets. He wanted to
incorporate the same in the booking engine with consistency. Consistency means if any
of the ticket booking fails in the family booking all the tickets should be cancelled. In
short either all the tickets in the family are booked or none of them. Looking at the need
Architecture thought to use COM+ Services to manage transactions.
Below is the top level design document of the project. Architecture and his team were
now feeling the pressure and heat of managing multiple technologies to achieve. The
happy architecture now started becoming frustrated. His team members started slogging
for night as they had to work on multiple technologies at one time.
438
Figure: 15.1 - Travel Design Architecture
The frustrated architecture finally went to www.microsoft.com to find one solution. He
was then introduced to WCF. And after implementing WCF the architecture lived happily
for ever. Hope so…. ?
Hmmmm did you like the story ok it was fiction. Jokes apart.
In short WCF is a unification technology which unites the following technologies:-
√ .NET remoting
√ MSMQ
√ Web services
√ COM+.
Below figure depicts WCF fundamentals pictorially.
439
Figure: 15.2 - WCF Components
(I) what are the important principles of SOA (Service
oriented Architecture)?
WCF is based on SOA. All big companies are playing big bets on SOA. So how can
Microsoft remain behind? So in order to implement SOA architecture easily you need to
use WCF.
SOA is based on four important concepts:-
√ Boundaries are well defined
In SOA everything is formalized. The client who is consuming the service does not need
to know how the implementation of the service is done. If you look at some old
methodologies of communication like DCOM. Any changes at server level the client
also has to change. So the server and client implementation was so much bound that
changes need to be done at all places. In SOA the rule is if you do enhancement you do
not need to change anything at the client. SOA based application only understands that
there is an end point, contract and bindings.
440
Note: - Just to clarify shortly about end point and contract. Any SOA service is exposed
through an end point. End point defines three important aspects What, Where and How.
We will understand more details of the same in the later questions.
√ Services evolve
Change is the law of nature and services will also evolve. In SOA services can be versioned
and you can host those services in new end points. For instance you have a service called
as “SearchTickets (TicketNumber) “which gives details based on TicketNumber and its
exposed on end point “ep1”. Tomorrow you want make your SearchTickets service more
useful by also providing an extra option of allowing him to search by passenger name. So
you just declare a new end point “ep2” with service “SearchTickets (TicketNumber,
Passenger Name)”. So the client who is consuming the service at end point ep1 continues
and at the other end we have also evolved our service by adding new end points ep2.
√ Services share only schemas and contracts
Services use Schemas to represent data and contracts to understand behavior. They do
not use language dependent types or classes in order to understand data and behavior.
XML is used to define schemas and contracts. Due to this there is not heavy coupling
between environments.
√ Service compatibility is policy based
Policy describes the capabilities of the system. Depending on policies the service can
degrade to match the service for the client. For instance your service needs to be hosted
for two types of client one which uses Remoting as the communication methodology
while other client uses DCOM. An ideal SOA service can cater to both of them according
to there communication policies.
Note: - Many people assume Web services are the base for SOA. The answer is 50 %
right. What web services lack is the policy based Service compatibility. If you host a web
service it can only serve with HTTP communication channel and SOAP message. Any other
type of client trying to communicate he will not degrade it self. This is what is provided by
WCF. You can host the service in one or more mode. For instance you can host a WCF
service using remoting and ASMX.
(I) what are end points, contract, address and bindings?
441
The above terminologies are the core on which SOA stands. Every service must expose
one or more end points by which the service can be available to the client. End point
consists of three important things where, what and how:-
√ Contract (What)
Contract is an agreement between two or more parties. It defines the protocol how client
should communicate with your service. Technically it describes parameters and return
values for a method.
√ Address ( Where)
An Address indicates where we can find this service. Address is a URL which points to
the location of the service.
√ Binding (How)
Bindings determine how this end point can be accessed. It determines how communications
is done. For instance you expose your service which can be accessed using SOAP over
HTTP or BINARY over TCP. So for each of these communications medium two bindings
will be created.
Below figure show the three main components of end point. You can see the stock ticker
is the service class which has an end point hosted on www.soa.com with HTTP and TCP
binding support and using Stock Ticker interface type.
442
Figure 15.3 : - Endpoint Architecture
Note: - You can also remember the end point by ABC where A stands for Address, B for
bindings and C for Contract.
(A) Which specifications does WCF follow?
WCF supports specifications defined by WS-* specifications. WS-* specifications are
defined together by Microsoft, IBM, SUN and many other big companies so that they can
expose there service through a common protocol. WCF supports all specifications defined
we will understand them one by one.
Messaging (WS-Addressing):- SOAP is the fundamental protocol for web services. WSAddressing
defines some extra additions to SOAP headers which makes SOAP free from
underlying transport protocol. One of the good things about Message transmission is
MTOM, also termed as Message Transmission Optimization Mechanism. They optimize
transmission format for SOAP messages in XML-Binary formant using XML optimized
packaging (XOP). Because the data will sent in binary and optimized format it will give
us huge performance gain.
Security (WS-Security, WS-Trust and WS-SecureConversation):- All the three WS- define
authentication, security, data integrity and privacy features for a service.
Reliability (WS-ReliableMessaging):- This specification ensures end-to-end communication
when we want SOAP messages to be traversed to and fro many times.
Transactions (WS-Coordination and WS-AtomicTransaction):- These two specifications
enables transaction with SOAP messages.
Metadata (WS-Policy and WS-Metadataexchange):- WSDL is a implementation of WSMetadataExchange
protocol. WS-Policy defines more dynamic features of a service which
can not be expressed by WSDL.
We have stressed on the WS-* specification as it’s a specification which a service has to
follow to be compatible with other languages. Because WCF follows WS-* specifications
other languages like JAVA , C++ can also exploit features like Messaging , Security ,
Reliability and transactions written in C# or VB.NET. This is the biggest achievement of
WCF to integrate the above features with other languages.
Note: - During interview the interviewer expects that you know what WS-* specification are
supported by WCF and its advantages with respect to interacting with other languages.
443
(A) What are the main components of WCF?
We need to define three main components in WCF:-
√ Service class.
√ Hosting environment
√ End point
(I) Can you explain how End points, Contract, Address and
Bindings are done in WCF?
(I) what is a service class?
(I) what is a service contract, operation contract and Data
Contract?
Note: - This section will answer all the questions above. The best way to understand the
above concepts is to do a sample.
In this example we will make simple service which displays the total cost of the complete
product group. In simple words this service will take three parameters per product cost,
number of products and the product name. In return the service will return the total cost
of all the products by multiplying number of products * cost per product. As we go ahead
in this explanation we will try to understand all the terminologies which are asked in the
above question.
First you need to create a Winfx service project. You can see in the below figure we have
selected the Winfx project.
444
Figure 15.4: - Create new WinFX Service class
In this project we add a new class and name it as “serviceGetCost.cs”. This class will
have our core implementation and this is the class which has all the action. The service
class which has to be exposed to the external client. We need to use the ServiceContract
attribute to mark it as a service class.
Service Contract attribute define saying which application interface will be exposed as a
service.
You can see in the below code snippet we have made an interface and marked it as
Service Contract. It’s not essential that you need to use an interface you can also use a
simple class and mark it as Service but interface represent a contract and do not have
445
implementation. In short they stand at a very higher level of abstraction. So as a good
design practice using interface to represent a service contract makes more sense.
The next thing to note is the OperationContract attribute.
OperationContract dictates which methods should be exposed to the external client using
this service.
It defines individual exchange or request and replies. In the current sample we have defined
GetTotalCost method which will be used by the end client to get the total cost results.
The next thing to note in the code snippet is the DataContract attribute. In the previous
two steps we have exposed class as a service by using ServiceContract and methods by
using OperationContract. Every operation will definitely do some kind of data transfer.
Data Contract attributes defines which type of complex data will be exchanged between
the client and the service. They determine which parameters to be serialized.
When you are using simple data types like int, bool etc it’s not necessary that you need to
mark the data contract attribute. Because you will always find matching types on the
client. But complex structure like one shown in the below code snippet you will need to
define a data contract. Remember data contract define how this data will be passed during
transmission. In short data contract attribute define how data will be serialized will
transmission.
Note: - Some interviewers really get impressed if you say Data Contract define how the
data will be serialized during transmission. This sentence will really show the depth of
understanding the Data Contract concept.
In the below sample we have marked the structure productdata to be serialized.
446
Figure 15.5:- The Service class
As data contract are all about serialization you need to import System.Runtime.Serialization
name space.
In the next step we implement the GetTotalCost function. It just returns a simple string
with product name and the total cost of all products.
Once our service class is done its time to host this service. There are various ways of
hosting a WCF service we will look in to the same in the next question. For the current
example we will host in their own process.
447
Figure 15.6 : - Hosting the service
Hosting the WCF service needs two things one is the config file and second is the hosting
code on startup. Because we are hosting this service in its own application process this
needs to be a windows application. So first let’s have a look what entries do we need to
make in the App.config file. In the above figure everything is clear but let’s understand all
the section defined in the App.config file.
In the configuration section we need to add a new section <system.serviceModel>. The
most important part of <system.serviceModel> is the endpoint tag. As said in the previous
answer End point gives three important answers Where, What and How. In short where is
the service, what the contract of the service is and how do we communicate with the
service.
448
In the above code snippet we have only defined the contract i.e. what and how that is
bindings. The where is defined in the application entry point static void main ().
So the contract attribute defines the interface and binding says that the end clients can
communicate using “HTTP” protocol.
In Static void Main method we create an object of ServiceHost class and use the open
method to host the service. We have used the URI object to define the address where the
service will be hosted.
Figure 15.7 : - Service Started
If you compile the project you will see something as shown in the above figure. This says
that the service is up and running and ready to serve any WCF client. Now its time to
develop consumer which will consume this WCF service. Microsoft has provided a decent
automation to generate the client. So below figure depicts the various steps.
Figure 15.8 : - svcutil in action
449
Go to command prompt of windows SDK and run the following command:-
Svcutil <Service hosted URI>
In the above command <Service Hosted URI> is the URI on which the service is hosted.
One you run the command against the URI it will generate two files one is the config file
and the other is the proxy. You can see in the above figure two files are generated
serviceGetCost.cs and output.config file. With the help of these two files we will make
our client.
Figure 15.9 : - Client code walkthrough
You can see in the above figure we have made WFCClientGetCost project. In that we
have added output.config and serviceGetCost.cs to the client project. We have renamed
output.config to app.config.
450
Once we have done with everything its time to write the client code which calls the proxy
who in turn will call the service hosted. In the above figure you can see we have the client
code also. It’s a simple code we first created the object of the data structure set the
values. Then we create the object of the service and call the GetTotalCost function.
If everything is compiled and you run the server and client, you should get your output as
shown below.
Figure 15.10 : - Output of WCF service
Note: - You can find source code for GetCost service in WCFGetCost folder in the CD.
(I) what are the various ways of hosting a WCF service?
There are three major ways to host a WCF service:-
√ Self hosting the service in his own application domain. This we have already covered
in the first section. The service comes in to existence when you create the object of
ServiceHost class and the service closes when you call the Close of the ServiceHost
class.
√ Host in application domain or process provided by IIS Server.
√ Host in Application domain and process provided by WAS (Windows Activation
Service) Server.
Note: - This book does not cover the last hosting methodology provided. In the next question
we will cover how to host a service in IIS process or application domain.
(I) How do we host a WCF service in IIS?
Note: - The best to know how to host a WCF in IIS is by doing a small sample. So what
we will do is host the same GetCost sample which was self hosted in the previous question.
First thing you will need is to create the SVC file which exposes the service class. SVC file
contains the pointer to the class. You can see from the figure below the class attribute
points to the class whose interface is exposed by the service.svc.cs file. Also note the
actual interface is in service.svc.cs file. Below figure has both the files service.svc which
451
has the class attribute which points to the service class and the interface which resides in
service.svc.cs file. We have taken the same sample which was self hosted in the previous
question.
Figure 15.11: - The SVC file and the behind code
We also need to provide implementation for the interface. So we have made a class
ServiceGetCost which has the actual implementation. Below figure shows the same in
detail. In the below figure you can also see the solution files.
452
Figure 15.12: - Implementation of Service.svc.cs
We also need to specify the service type and endpoint in web.config file. Also note we
have specified HTTP binding because we will be hosting the service on IIS.
453
Figure 15.13: - Web.config file for hosting service on IIS
Now that we are done with the coding part. We need to create the virtual directory in IIS.
In the below figure in Step1 and Step2 we have shown how to create the virtual directory
in IIS. One important thing to note while creating virtual directory set the access permission
to execute.
454
Figure 15.14 :- IIS Configuration
In the third step we will publish the website to our virtual directory. Note the fourth step
in which we have copied the svc file so that the service can be requested.
Note: - ASP.NET compilation has changed in ASP.NET 2.0. In 2.0 there is no concept
of solution files. So if you want to have full compiled DLL you need to publish the project
to a virtual directory.
455
Once you have hosted the SVC file you can test the same by request the service.svc file.
If everything works fine you will get something as shown in the below figure.
Figure 15.15:- IIS WCF client
Using the Svcutil.exe you will need to generate the proxy class and the config file. The
proxy and config will be same as we had done for self hosting. The one important change
is the address. The config file URL now points to the service.svc which is hosted on IIS.
You can run the same client which we had created for self hosting. The only change you
will need to do is change the endpoint address.
456
Figure 15.16:- Output of WCF client at IIS
LOL…You should get the same output which we had received for self hosting.
Note: - You can get the complete source code in CD in WCFIISGetCost folder.
(I) what are the advantages of hosting WCF Services in IIS
as compared to self hosting?
There are two main advantages of using IIS over self hosting:-
Automatic activation
IIS provides automatic activation that means the service is not necessary to be running in
advance. When any message is received by the service it then launches and fulfills the
request. But in case of self hosting the service should always be running.
Process recycling
If IIS finds that a service is not healthy that means if it has memory leaks etc, IIS recycles
the process. Ok let us try to understand what is recycling in IIS process. For every browser
instance a worker process is spawned and the request is serviced. When the browser
disconnects the worker process stops and you loose all information. IIS also restarts the
worker process. By default the worker process is recycled at around 120 minutes. So why
does IIS recycle. By restarting the worker process it ensures any bad code or memory leak
do not cause issue to the whole system.
In case of self hosting both the above features you will need to code yourself. Lot of
work right!!. That's why IIS is the best option for hosting services until you are really
doing something custom.
Below figure shows where the recycle option is located in IIS. You need to click on the
DefaultAppool and then Properties.
457
Figure 15.17:- IIS recycle option
(I) what are the major differences between services and Web
services?
(I) what is the difference WCF and Web services?
Web services can only be invoked by HTTP. While Service or a WCF component can be
invoked by any protocol and any transport type. Second web services are not flexible. But
Services are flexible. If you make a new version of the service then you need to just
expose a new end point. So services are agile and which is a very practical approach
looking at the current business trends.
(A) What are different bindings supported by WCF?
458
WCF includes predefined bindings. They cover most of bindings widely needed in day to
day application. But just incase you find that you need to define something custom WCF
does not stop you. So let’s try to understand what each binding provides.
BasicHttpBinding: - This binding is used when we need to use SOAP over HTTP. This
binding can also be configured to be used as HTTPS. It can be also configured to send
data in plain text or in optimized form like MTOM.
Note: - MTOM is discussed in one of the pervious questions in this chapter.
WsHttpBinding: - It is same like BasicHttpBinding. In short it uses SOAP over HTTP.
But with it also supports reliable message transfer, security and transaction. Reliable
message is supported by WS-ReliableMessaging, security with WS-Security, and
transactions with WS-AtomicTransaction.
NetTcpBinding:- This binding Sends binary-encoded SOAP, including support for reliable
message transfer, security, and transactions, directly over TCP. The biggest disadvantage
of NetTcpBinding is that both server and client should be also made in .NET language.
NetNamedPipesBinding:-Ths binding Sends binary-encoded SOAP over named pipes.
This binding is only usable for WCF-to-WCF communication between processes on the
same Windows-based machine.
Note: - An interprocess control (IPC) protocol is used for exchanging information between
two applications, possibly running on different computers in a network. The difference
between Named pipes and TCP is that named pipes have good performance in terms of
communication with in processes. But when it comes to communicate across network TCP
holds the best choice. So if you are using WCF to communicate with process it’s the best
choice to use in terms for performance. Named pipes do not perform when the traffic is heavy
as compared to TCPIP.
NetMsmqBinding:- This binding sends binary-encoded SOAP over MSMQ. This binding
can only be used for WCF-to-WCF communication.
(A) Which are the various programming approaches for
WCF?
(A) What is one way operation?
IsOneWay equal to true ensures that the client does not have to wait for the response. So
methods marked by IsOneWay to true should always return void. In this the caller does
459
not get anything in return so it is called as one-way communication.
In order to understand one way implementation in WCF lets make a code walkthrough of
a sample.
Note: - You can find code for the same in “WCFIsOneWay” folder in CD.
Figure 15.18: - One way in action
460
Above is the code snippet which describes practically how one way works in WCF. The
above given code snippet is numbered. Below is the explanation according to the numbers
marked in figure:-
1 - This is the code snippet of the server service. We have created a method called as
doHugeTask. doHugeTask basically makes the method sleep for 5000 MS and then displays
the time when the task is completed.
2 - This code snippet is for client. It creates a proxy object of serviceIsOneWay and calls
the doHugeTask method. After calling the doHugeTask the client execution continues
ahead. So as a proof we display the time when the method calling was completed.
3 - This screen shot shows the output given by both server and client. The top window
displays the server output and the below windows displays the client output.
Note: - You can find the code for the same in WCFIsOneWay folder. For generating the
proxies you have to follow the same steps which are shown in the previous steps.
So run the server program first i.e. ServiceIsOneWay and run the client later. You will see
the client runs the doHugeTask and moves ahead. So the client completion time is less
than the server. One more thing to understand is that one way does not give any notification
back of completion. So it’s like fire and forget.
(A) Can you explain duplex contracts in WCF?
In duplex contracts when client initiates an operation the server service provides a reference
call back Uri back to the client. So the client initiates a call using the proxy class and
when server finishes its work it notifies the client using the callback channel. This is
called as duplex messaging in WCF. If you remember in the previous question we had no
way to know when the server finished its task.
461
Figure 15.19:- Duplex Service code
Let’s try to understand the duplex concept by doing a small sample. The code snippet is as
shown in the above figure. We will extend the previous sample which was shown in the
first question only that now we will provide the notification to the client once the
doHugeTask is completed.
462
The first step is to change the service class. Above is the code snippet of the service
class. Again we have numbered them so that we can understand how to implement it
practically line by line. So below is the explanation number by number:-
1 -- In the service contract attribute we need to specify the callbackcontract attribute.
This CallBackContract attribute will have the interface which will define the callback.
2 -- This is the interface which client will call. In order that it should be asynchronous we
have defined the one way attribute on the doHugeTask method.
3-- This is the most important interface. As it forms the bridge of communication between
server and client. The server will call the client using Completed method. Client needs to
provide implementation for the completed method at the client side and server will call
that method once it completes the doHugeTask method.
4 and 5 -- In this we implement the InterfaceDuplex interface and provide implementation
for doHugeTask () method.
6 -- This is an important step. The OperationContext.Current.GetCallBackChannel will
be used to make callback to the client.
7 - We will expose the service using HTTP protocol. In this sample because we want to
do duplex communication we need to use wsDualHttpBinding rather than just using
simple HttpBinding. This new binding configuration is then assigned to the end point on
which the service is hosted.
This completes the server side explanation for duplex.
463
Figure: - 15.20 Duplex Client side code
Above is the code snippet for client side. So let’s explain the above code with numbers.
1-- We implement the completed method. This is the callback method which the server
will call when doHugeTask is completed.
2-- In this step we create object of the InstanceContext class. InstanceContext represents
context information of a service. The main use of InstanceContext is to handle incoming
messages. In short proxy is used to send messages to server and InstanceContext is used
to accept incoming messages.
3 -- In this step we pass the InstanceContext object to the constructor of the proxy. This
is needed as the server will use the same channel to communicate to the client.
464
4 -- In this section two windows are shown. The top windows is the servers output and
the below windows is of the client. You can see in the below window that server as made
a callback to the client.
Note: - You can get source code for the same in WCFDuplex folder. Feel Free to experiment
with it. Try making one simple project of client to client chat using WCF duplex
fundamentals I am sure your doubts will be cleared in and out.
(A) How can we host a service on two different protocols on
a single server?
Let’s first understand what this question actually means. Let’s say we have made a service
and we want to host this service using HTTP as well as TCP. You must be wondering why
to ever host services on two different types of protocol. When we host a service it’s
consumed by multiple types of client and it’s very much possible that they have there
own protocol of communication. A good service has the capability to downgrade or
upgrade its protocol according the client who is consuming him.
Let’s do a small sample in which we will host the ServiceGetCost on TCP and HTTP
protocol.
Note: - You can the below sample in “WCFMultipleProtocolGetHost” folder in the CD
provided.
Below is the code snippet pasted from the same sample. As usual we have numbered
them and here is the explanation of the same:-
1 and 2 -- As we are hosting the service on two protocols we need to create two objects
if the URI. You can also give the URI through config file. Pass these two objects of the
URI in the constructor parameter when creating the service host object.
465
Figure 15.21:- Server side code for Multi Protocol hosting
3 – In the config file we need to define two bindings and end point as we are hosting the
service in multiple protocols.
Once we are done the server side coding its time to see make a client by which we can
switch between the protocols and see the results. Below is the code snippet of the client
side for multi-protocol hosting.
466
Figure 15.22:- Multi Protocol Client code
Let’s understand the code:-
1 – In the generated config file we have added two end points. When we generate the
config file it generates only for one protocol. The other end point has to be manually
added.
2 – To test the same we have a listbox which has the name value given in the end point.
3 – In the listbox select event we have then loaded the selected protocol. The selected
protocol string needs to be given in the proxy class and finally call the proxy class
GetTotalCost.
467
(A) How can we use MSMQ bindings in WCF?
First let’s understand why MSMQ came in to picture and then rest will follow. Let’s take
a scenario where your client needs to upload data to a central server. If everything will
works fine and the server is available 24 hours to client then there are no issues. In case
the server is not available the clients will fail and the data will not be delivered. There’s
where MSMQ comes in to picture. It eliminates the need of persistent connection to a
server. So what you do is deploy a MSMQ server and let the clients post message to this
MSMQ server. When your actual server runs it just picks up the message from the queue.
In short neither the client nor the server needs to be up and running on the same time. In
WCF we have a client and service model and in real world it’s very much practical possible
that both the entities will not be available at one time.
In order to use MSMQ you need to install the Message queuing by click on Install windows
component and selecting MSMQ queuing. Once that done we are all set to make our
sample of MSMQ using WCF.
Figure 15.23 :- MSMQ Installation
468
This sample will be simple. We send some messages from the client and keep the server
down. As the server is down it will make postings to the MSMQ server. Then we will run
the server service and service should pick up the message and display the same.
Note: - You can find the sample code which we will be looking in to now in
“WCFMSMQ” folder. Please note you need to first enable message queuing.
Figure 15.24:- MSMQ Server side code walkthrough
469
Above snippet is the server side code. So let’s understand the whole snippet:-
1 – First thing is the queue name where the messages will go if the server is not running.
The server name we can get from the config file. You can see in the above snippet we
have defined the MSMQName in App.config file.
2 – We first check does this queue exist if it exists then go ahead. If not then go to create
a queue. Please note you need import using System.Messaging namespace. Then we can
use the Message Queue to create a queue if the queue does not exist.
3 – First thing which should surprise you is why we are creating a URI with HTTP protocol
as we are going to use MSMQ. Ok!!! This is bit tricky but fun. As we know in order to
connect to this service we need to generate a client proxy using SVCUTIL. So this URI
will help us do that. It’s not actually used by the client to connect.
4 – We need our end point and the MSMQ bindings.
5 and 6 – Again as usual we need is an interface and implementation for the same. In
implementation we have created a method called sendMessage.
Once the above steps are executed run the server and generate the client proxy using
SVCUTIL utility.
Now comes the final step making a client. One change you need to make is change the
address to the MSMQ server in the app.config. In this we have just looped ten times and
fired an offline message. Please note to keep your server down.
470
Figure 15.25:- MSMQ Client side code
Now go to computer management and you can see your queue messages waiting to be
picked by the server. Run the server and below should be the output. If you come back
again you will see that there are no messages in the queue.
471
Figure 15.26 :- MSMQ Server side display
One of the important concepts is to understand when to use MSMQ protocol. When we
expect that client and server will not be available at one time this is the best option to opt
for.
(A) Can you explain transactions in WCF?
(A) What different transaction isolation levels provided in
WCF?
Transactions assure that a group of related activity occurs as a single atomic unit. In
simple words, every activity in the unit must either all succeed or all should fail. WCF
provides a central transaction system that can be used to handle transaction operations.
One of the things WCF provides is a single unified transaction system for both database
and non-database activity. For instance BeginTrans and CommitTrans are database related
syntaxes but we can not use the same for other activities like if we want to upload all
message in a single transaction to a MSMQ server. One thing to note is that WCF
transaction abides to WS specifications. That means any other language like JAVA can
take advantage of this transaction…. I think that’s the best part of WCF embracing other
languages.
472
Figure 15.27 :- Transactions in WCF
In order to support transaction the service should first support transactions. Above is a
simple code snippet of the server service and client and explanation for the same:-
473
The top code snippet is of the server service and the below code snippet is of the client.
1 - At interface level the operationcontract is attributed with [TransactionFlow] attribute.
There are three values for it Allowed (which mean operation mar or may not be used in
transaction), NotAllowed (Where it’s never used in transaction) and Required (Where the
service can only be used in transactions).Below code snippet currently says that this
service can only be used with transactions.
2 - In this section the [ServiceBehavior] attribute specifies the transaction isolation level
property.Transaction isolation specifies the degree of isolation most compatible with other
applications. So let’s review what are the different levels you can provide in transaction
isolation.
The data affected by a transaction is called volatile.
Chaos: - pending changes from more highly isolated transactions cannot be overridden.
ReadCommitted: - Volatile data can be modified but it cannot be read during the transaction.
ReadUncommitted: - Volatile data can be read as well as modified during the transaction.
RepeatableRead: - Volatile data can be read but not modified during the transaction and
also new data can be added.
Serializable: - Volatile data can be only read. But no modifications and adding of new
data is allowed.
Snapshot: - Volatile data can be read. But before modifying the data it verifies if any
other transaction had changed data. If yes then it raises error.
By default, the System.Transactions infrastructure creates Serializable transactions.
3 - This defines the transaction behavior with in the service. [OperationBehavior] has a
property called as transactionscope. TransactionScope setting indicates that operation
must be called within a transaction scope. You can also see TransactionAutoComplete is
set to true which indicates that transaction will complete by default if there are no errors.
If you do not provide the TransactionAutoComplete to true then you will need to call
OperationContext.Current.SetTransactionComplete() to make the transaction complete.
Now let’s make a walkthrough of the client side code for the service.
4 and 5 - You can see from the client we need to define Isolationlevel and the scope while
making the call to our UpdateAccounts method.
(A) Can we do transactions using MSMQ?
474
While doing MSMQ there can be scenarios in the project where we would like either all
the messages are uploaded to MSMQ or all messages read from MSMQ. After any message
is read from MSMQ it’s deleted from the queue. So some times this can be critical if there
are exceptions in reading or uploading messages. As said before WCF transaction can be
applied to database as well as other operations like MSMQ. So let’s try to understand the
same by doing a small sample.
Below is a numbered code snippet of MSMQ transactions.
1 - Sendmessage is the exposed method in the service. We have marked this method as
TransactionScopeRequired=true
2 - On the client side we have use the transactionscope to say that we are starting a
transaction to MSMQ server. You can see we have used the sendMessage to send the
messages to MSMQ.
3- We can then use Complete or Dispose method to complete or rollback the transactions.
Note: - You can get the below sample code in WCFMSMQTransactions folder.
The below MSMQ transaction code ensures that either all messages are send to the server
or none are sent. Thus satisfying consistency property of transactions.
475
Figure 15.28:- Transaction snippet code
(A)Can we have two way communications in MSMQ?
Yes
476
(A) What are Volatile queues?
There are scenarios in the project when you want the message to deliver in proper time.
The timely delivery of message is more important than losing message. In these scenarios
Volatile queues are used.
Below is the code snippet which shows how to configure Volatile queues. You can see the
bindingConfiguration property set to VolatileBinding. This code will assure that message
will deliver on time but there is a possibility that you can lose data.
<appSettings>
<!-- use appSetting to configure MSMQ queue name -->
<add key="queueName" value=".\private$\ServiceModelSamplesVolatile" />
</appSettings>
<system.serviceModel>
<services>
<service name="Samples.StockTickerServ"
behaviorConfiguration="CalculatorServiceBehavior">
...
<!-- Define NetMsmqEndpoint -->
<endpoint address="net.msmq://localhost/private/ServiceModelSamplesVolatile"
binding="netMsmqBinding"
bindingConfiguration="volatileBinding"
contract="Samples.InterfaceStockTicker" />
...
</service>
</services>
477
<bindings>
<netMsmqBinding>
<binding name="volatileBinding"
durable="false"
exactlyOnce="false"/>
</netMsmqBinding>
</bindings>
...
</system.serviceModel>
(A) What are Dead letter queues?
The main use of queue is that you do not need the client and the server running at one
time. So it’s possible that a message will lie in queue for long time until the server or client
picks it up. But there are scenarios where a message is of no use after a certain time. So
these kinds of messages if not delivered within that time span it should not be sent to the
user.
Below is the config snippet which defines for how much time the message should be in
queue.
<bindings>
<netMsmqBinding>
<binding name="MyBindings"
deadLetterQueue="Custom"
customDeadLetterQueue="net.msmq://localhost/private/
ServiceModelSamples"
timeToLive="00:00:02"/>
</netMsmqBinding>
(A) What is a poison message?
478
479
16. Windows Presentation
Framework (Vista Series)
(B) What is WPF?
Windows Presentation Framework (Avalon was the code name for WPF) is the new
presentation API in WinFX. WPF is a two and three dimensional graphics engine. It has
the following capabilities:-
√ Has all equivalent common user controls like buttons, check boxes sliders etc.
√ Fixed and flow format documents
√ Has all of the capabilities of HTML and Flash
√ 2D and 3D vector graphics
√ Animation
√ Multimedia
√ Data binding
(B) What is XAML?
XAML (pronounced as Zammel) is a declarative XML-based language by which you can
define object and properties in XML. XAML document is loaded by a XAML parser.
XAML parser instantiates objects and set there properties. XAML describes objects,
properties and there relation in between them. Using XAML you can create any kind of
objects that means graphical or non-graphical. WPF parses the XAML document and
instantiates the objects and creates the relation as defined by XAML.
So XAML is a XML document which defines objects and properties and WPF loads this
document in actual memory.
(I) what are dependency properties?
These are dependency properties that belong to one class but can be used in another.
Consider the below code snippet:-
<Rectangle Height="72" Width="131" Canvas.Left="74" Canvas.Top="77" />
480
Height and Width are regular properties of the Rectangle. But Canvas.Top and Canvas.
Left is dependency property as it belongs the canvas class. It’s used by the Rectangle to
specify its position within Canvas.
(A) Are XAML file compiled or built on runtime?
XAML files are usually compiled rather than parsing on runtime. But it also supports
parsing during runtime. When we build a XAML based project you will see it creates g.cs
extension in obj\Debug folder. So for every XAMl file you will find a g.cs file. For instance
a Shiv.XAML will have Shiv.g.cs file in obj\Debug folder. In short in runtime you actually
do not see the XAML file. But if you want to do runtime parsing of XAML file it also
allows that to be done.
(B) Can you explain how we can separate code
and XAML?
This is one of the most important features of WPF, separating the XAML from the code
to be handled. So designers can independently work on the presentation of the application
and developers can actually write the code logic independent of how the presentation is.
481
Figure 16.1:- XAML and behind code in action
Above is the code snippet which shows a XAML file and the code completely detached
from the XAML presentation. In order to associate a class with XAML file you need to
specify the x:Class attribute. Any event specified on the XAML object can be connected
by defining a method with sender and event values. You can see from the above code
snippet we have linked the MyClickEvent to an event in the behind code.
Note: - You can get a simple sample in WindowsSimpleXAML folder. Feel free to
experiment with the code… experimenting will teach you much more than reading something
theoretical.
482
(B) How can we access XAML objects in behind
code?
To access XAML objects in behind code you just need to define them with the same
name as given in the XAML document. For instance in the below code snippet we named
the object as objtext and the object is defined with the same name in the behind code.
Figure 16.2 Accessing XAML object
Note: - You can get the source code in WindowsAccessXAML folder.
(A) What kind of documents are supported in
WPF?
483
There are two kind of major document supported in WPF Fixed format documents and
Flow format document. Fixed format documents look like PDF format. They display
content regardless of screen size and resolution. But flow format document adjust
depending on screen size and resolution.
Below is the code snippet for fixed format. You can see the document has a look of PDF
reader. Step 1 defines the tag to define a document and Step 2 shows how the document
looks.
Figure 16.3:- Documentviewer in action
484
17. Windows workflow
foundation(Vista series)
(B) What is Windows Workflow Foundation?
WWF is a programming model for building work flow enabled applications on windows.
System.WorkFlow namespace has all the necessary modules to develop any type of work
flow.
(B) What is a Workflow?
A Workflow is a set of activities which is stored as model and they depict a process.
Below figure depicts clearly the difference between Workflow and Activity. Every task is
an activity and group of activity depicts a complete workflow. Workflow is run by the
Workflow runtime engine.
Figure 17.1: - Work Flow Foundation Architecture
485
Workflow model can be written either in pure .NET code, pure XAML or Mix of XAML
and .NET Code. A workflow model is compiled and can execute under windows, ASP.NET,
Web services or windows services application.
(B) What are different types of Workflow in
Windows Workflow foundation?
There are two basics type of workflow Sequential Workflow and State machines workflow.
A sequential workflow has clear start and finish boundaries. Workflow controls execution
in Sequential workflow. In sequential execution one task is executed after other. Sequential
workflow is more rigid in format and execution path has a determistic nature.
A State machine workflow is more dynamic in nature. Basically workflow has states and
the state waits for events to help it move to next state. In State machine execution path is
undetermestic nature.
Below figure shows visual conceptualization of fundamentals. You can see in Sequential
work flow the execution path is very determestic. Shiv performs the entire task sequentially
and these tasks are very determestic. But now have a look at the second work flow. Every
state goes to other state when it receives some external events. For instance when Shiv is
seeing star trek there is an event of flashing news which triggers him to see the flashing
new.
486
Figure 17.2: - Sequential and State machine work flow
(I) When should we use a sequential workflow
and when should we use state machines?
If the workflow is very rigid then you go for sequential workflow and if the workflow is
dynamic then go for State machine workflow. For instance you have placed an order and
the order will not pass until your supervisor approves is a rigid flow. Because your order
has to be approved by a supervisor or else it will not be approved. But what if your order
moves from one place to other place. For instance it moves from approval to waiting and
then clarification a state machine work flow model is more appropriate.
487
Below is a simple code snippet which shows practically how to use sequential work flow.
Let try to understand step by step as marked in the figure:-
1 – First you need to select System.workflow namespace.
2, 3 and 4 – In these three steps we created code object and linked them with activity.
5, 6, 7 and 8 – We start the workflow and create workflow instance object to run the
sequential workflow. You can see the output in 8. Depending on how you add the activity
in section 3 it executes sequentially. Because we have added codeactivity1 first it executes
the first activity first. The sequence on how you add the activity to the activities collection
the activities are run.
488
Figure: - 17.3 Code snippet for workflow
Note: - The above code snippet was developed with out using designer. The whole point was
to make you understand what happens behind the scenes. In real projects you will be
489
dependent on designer rather than coding manually. You can find the above code in
SimpleWorkFlowSampleManual folder.
(I) How do we create workflows using designer?
As said previously it’s very easy to design workflows using designer. So we will answer
this question by actually doing a small sample. Below is the code snippet and image
snapshot which shows how we can use the designer to create workflows. So lets understand
all the below numbered snapshot.
1 -- First select a sequential workflow project. In this case we have selected Sequential
workflow console application to keep the sample simple.
2 -- When you are done with creating the project you will see the solution explorer as
shown in the second snapshot. There are two files one the WorkFlow1.cs and the other
Workflow1.designer.cs.If you click on the WorkFlow1.cs you will get a designer pane as
shown in snapshot 3. If you double click on Workflow1.designer.cs you will get behind
code as shown in snapshot 4.
3 -- So let’s drag drop a code activity on the workflow designer and associate this activity
with a method called as MyActivity1. This association is done by entering the method
name in ExecuteCode property. In MyActivity1 we have just displayed in the console
that this is my first activity. Again we have added one more code activity which points to
MyActivity2. If you see the designer pane we have sequenced code1 first and code2 next.
So in short code1 will execute first and the code2. This is clear from the output displayed
below.
4 - This is the behind code of the workflow.
490
Figure 17.4 Sequential workflow using designer
Note: - You can find the above code snippet in SimpleSequentialWorkFlow folder.
(I) How do we specify conditions in Work flow?
Yes you can define conditions in workflow by using conditionedActivitygroup. Below is
the numbered snapshot which shows how to use conditionedActivitygroup.
491
1 - You can see in this snapshot we have defined a conditionedActivitygroup with two
conditions. The two boxes inside the group define two conditions.
2 - You can select one of the condition box and define the condition using the
WhenConditions property. If this condition is true you need to specify in the execute
code which method to execute. For instance in the current snapshot we have said that
old1 method should execute if age > 21. The same procedure we need to follow for the
second condition box. In the second condition box we have specified to execute young1
method if age < 21. Currently the second condition is not visible in the below snapshot.
3 - Workflow editor also provides a cool interface called as Rule Condition Editor which
can be used to specify conditions. Age is a public property in the behind code. You can
also get the Age in the intellisense of rule condition editor.
4 - Both the condition will execute inside the condition activity group. We need to also
specify when this conditionactivitygroup should exit. So we have made a function called
as exit. If the user inputs age as -1 it will exit from the loop or else it will take inputs from
user and continue evaluating depending on the two conditions.
Note: - During interview the interviewer will not like to hear the complete story what I have
said above. He needs only one word conditionedActivityGroup is used to specify conditions
in workflow. The above story is just in case you also want to do some hands on practical. If
you want to explore further you can get the above sample code in
SequentialWorkFlowConditions folder.
492
Figure 17.5:- Sequential workflow with conditions
(I) How do you handle exceptions in workflow?
Exception handling in Workflow is somewhat different than how we do in normal .NET
application. Below is the numbered snapshot of how we can handle exceptions in Workflow.
493
1 - We have small tab which says view exceptions. If you click on view exception you will
be redirected to a workflow design only for exception as shown in numbered snapshot 2.
2 - This is the workflow which will execute incase we have exceptions. We have put a
code activity which points to a method called as raiseException. Incase of exception in
the workflow this path will be followed.
Figure 17.6:- Workflow with exception handling
(I) What is the use of XOML files?
Twist: - How can we serialize workflows?
Windows Workflow Foundation gives developers a declarative way to create workflows
by using XAML. See WPF chapter for more details about XAML. These markup files are
494
stored with XOML (Extensible Object Markup Language) extension. In the below snapshot
you can see Workflow1.xoml file created by designer. Markupfile can also have code
behind. The whole concept of having code behind for XOML file is to separate the
presentation from logic files.
In the below code snapshot we have made a simple XOML sample. Below is the
explanation number wise:-
1 – In order to create a XOML file you need to add sequential workflow with separation.
Which means that XOML file will be created with a behind code.
2 – Currently we have two activity code3 and code1. Below is the XOML file contents
<?Mapping XmlNamespace="ComponentModel"
ClrNamespace="System.Workflow.ComponentModel"
Assembly="System.Workflow.ComponentModel" ?>
<?Mapping XmlNamespace="Compiler"
ClrNamespace="System.Workflow.ComponentModel.Compiler"
Assembly="System.Workflow.ComponentModel" ?>
<?Mapping XmlNamespace="Activities" ClrNamespace="System.Workflow.Activities"
Assembly="System.Workflow.Activities" ?>
<?Mapping XmlNamespace="RuleConditions"
ClrNamespace="System.Workflow.Activities.Rules"
Assembly="System.Workflow.Activities" ?>
<SequentialWorkflow x:Class="WorkflowSeq.Workflow1"
x:CompileWith="Workflow1.xoml.cs" ID="Workflow1" xmlns:x="Definition"
xmlns="Activities">
<Code ExecuteCode="Mycode3" ID="code3" />
<Code ExecuteCode="Mycode1" ID="code1" />
</SequentialWorkflow>
See the above snippet of the XOML file. You can see how the behind code is linked using
the CompileWith attribute. Code forms the element of the SequentialWorkFlow tag. One
of the best thing with Markup is we can change the sequence just by changing the XOML
file we do not need to compile the whole application again.
495
Figure 17.7:- XOML in action
In the above snapshot one of the things to now is 3, 4, and 5 numbered sections. These
sections are not linked with the sample. But just to make you aware you can create
serialize any workflow and deserialize them again using the textwriter object.
(A) How can we pass parameters to workflow?
When you call the startworkflow function you can pass as name / value pairs using the
dictionary object.
496
Figure 17.8 :- Passing value to workflow
497
18.ATLAS-AJAX
Note: - As an IT professional it’s useful to know what the difference is between Hype and
usefulness. For instance if there is a new technology coming in many programmers just want
to implement it because they want to learn it?. But any new technology becomes useful if it is
useful to the user. And Ajax is one of the technologies which will be useful as it really
makes the user experience really good. You can get the atlas Ajax setup in CD.
(B) What problem does Ajax solve?
In order to answer this question first lets understand how does browser and server work
when we request any website. Below figure depicts pictorially the web environment.
When client sends data to the server it post backs form element data, hidden
fields,images,cookie information to the server and server make the page and sends the
same information back to the browser. The bad part this happens with every request and
response.
Below are the issues with the above model:-
Unnecessary data transfers: - In the above model unnecessary data is transferred between
client and server. For instance the whole page is posted and refreshed even when we want
small data of the page to be refreshed.
Figure 18.1:- The problem
498
Synchronous processing: - When a user request’s for a page he has to wait until the
complete round trip happens. In short the request / response work on a synchronous
model rather than asynchronous which makes user experience very difficult. How many
times it has happened that you are requesting a page and you see the below
screen…frustrating right.
Figure 18.2:- Synchronous processing
Unnecessary processing by server: - Because we are posting unnecessary information to
the server, the server is overloaded with unnecessary processing.
(B) What is Ajax?
Ajax is a set of client side technologies that provides asynchronous communication between
user interfaces and web server. So the advantages of using Ajax are asynchronous
communication, minimal data transfer and server is not overloaded with unnecessary
load.
(B) What is the basic fundamental behind Ajax?
XmlHttpRequest is the basic fundamental behind Ajax. This allows the browser to
communicate to a back end server asynchronously.XmlHttpRequest object allows the
browser to communicate with server with out making post backs.
(B) What is JSON?
JSON is a very lightweight data format based on a subset of the JavaScript syntax, namely
array and object literals. JSON allows communicating with server in a standard way.
JSON is used as communication notation instead of XML.
var oBike =
{
"color" : "Green",
"Speed”: 200,
};
499
alert(oBike.color); //outputs "Green"
alert(oBike.Speed); //outputs 200
The above code creates an object bike with two properties Color and Speed.
(B) How do we use XMLHttpRequest object in
JavaScript?
Below is a code snippet which shows how to use XMLHttpRequest object. In this code
snippet we are sending a GET request on the local IIS. Below is the explanation of the
code snippet according to the numbers specified in the code snippet.
1,2,3,4 - This is like checking which is this browser and create the objects accordingly.
XMLHttpRequest objects have different ways of technical implementation according to
different browsers. In Internet explorer it’s an activex object but in other browsers its
XMLHttpRequest. So if windows.XMLHttpRequest does not return null then we can
create XMLHttpRequest object. If it returns null then we can try creating the activex
object Microsoft.XMLHttp object. In case it fails probably then probably we have an
older version of XML that is MSXML2. So in the error handling we will try to create the
MSXML2 object.
5:- In this snippet we OPEN the connection to the local host server and specify what
type of request we are using. In this case we are using the GET method.
6:- Finally we make a request to the server.
7:- Here we get the request sent by the server back to the client browser. This is a blocking
call as we need to wait to get the request back from the server. This call is synchronous
that means we need to wait for the response from the server.
500
Figure 18.3:- Basic XMLHTTP code
(B) How do we do asynchronous processing
using Ajax?
xmlHttpObj.onreadystatechange = function1();
Above is the code snippet which will help us to do asynchronous processing. So function1()
will be called when the XMLHTTP request object goes to on ready state change.
(B) What are the various states in
XMLHttpRequest and how do we check the
same?
501
(B) How can we get response text?
(B) How can we send request to the server using
the XMLHttpRequest component?
Note :- All the above answers are discussed in detail in the below section.
abort() :- This method cancels a user request.
getAllResponseHeaders() :- Returns a collection of HTTP headers as string. If you want
a specific header value you can use getResponseHeader(“headername”)
open(“method”,“URL”, “async”, “uname”,“pswd”) :- This method takes a URL and other
values needed for a request. You can also specify how the request is sent by GET, POST
or PUT. One of the important values is how this request will be sent asynchronously or
synchronously. true means that processing is carried after the send () method, without
waiting for a response. false means that processing is waits for a response before continuing.
send (content):- Sends a request to the server resource.
setRequestHeader(“label”,” value”) :- Sets label value pair for a HTTP header.
onreadystatechange :- This is a event handler which fires at every state change.
readyState :- Returns the current state of the object.
0 = uninitialized
1 = loading
2 = loaded
3 = interactive
4 = complete
If you want to check the state use if ( xmlHttpObj.readyState ==4).
responseText :- Returns the response in plain string.
responseXML :- Returns the response as XML. So this gives us DOM object model
which can then be traversed.
status: - Returns the status as a numeric For instance 404 for "Not Found" or 200 for
"OK", 500 for "Server Error" etc.
502
statusText :- Returns the status as a string. For instance "not found" or "OK".
(I) How do we pass parameters to the server?
Below are the two ways of passing data to server. The first one shows by using GET and
the second by POST.
xmlHttpObj.open("GET","http://" + location.host + "/XmlHttpExample1/
WebForm1.aspx?value=123", true);
xmlHttpObj.open("POST","http://" + location.host + "/XmlHttpExample1/
WebForm1.aspx?value=123", true);
(I) How can we create a class in JavaScript using
Atlas?
Note: - You can get the atlas setup in CD in "Atlas setup" folder.
JavaScript is object based language and this a new feature which is provided by Atlas.
Using Atlas you can now define classes, do inheritance, create interfaces etc in JavaScript.
You can now implement all the object oriented concepts in JavaScript. So let’s understand
the same with an example.
Once you install the Atlas setup you will get the following JS files and a web.config file as
shown in the below figure. In order to use Atlas you need to add the JS files in your
project. You can see from the figure below we have added the JavaScript files and the
web.config file to the project which was installed with Atlas setup. We also need to add
Microsoft.Web.Atlas.dll to the project.Components.js has the class definition which we
will discuss in the coming sections.
503
Figure 18.4:- Ajax folder structure
504
Below figure has two important code snippets the top one is taken from components.js it
defines the class definition and the second code snippet is of ASPX page which consumes
the JavaScript class. So let’s understand all the numbered points one by one.
1 - In this section we register namespace using registerNameSpace function. We have
named our namespace as NameSpaceCustomer.
2 - Here we have defined our class clsCustomer.
3 - We have defined two properties Customer Code and Customer Name. Both the
properties have get and set function. We have also defined a read-only function
getCodeAndName which returns the concatenation of customer code and customer name.
4 - Finally we register the class with the namespace.
5 - In this section we have consumed the class.getCOdeAndName will display the
concatenated value of customer code and customer name.
Note: - You can find the above code in AtlasClass folder. Feel free to experiment with the
same.
505
Figure 18.5:- Code snippet for consuming the class
506
(A) How do we do inheritance using Atlas?
(A) How do we define interfaces using Atlas?
Below is a numbered code snippet which will answer both the upper questions. Lets
understand in detail the numbered sections.
1 and 2 -- This defines the interface definition. Function.abstractMethod() defines a method
as abstract.
3 - We need to register the interface which is done by using registerInterface method.
4, 5 and 6 - Inheritance and Interface is defined when we register the class. registerClass
has three inputs. 4th section defines the main class which needs to be registered. 5th
section defines the parent class from which it will inherit. 6th section defines the interface.
So clsMyCustomCustomer is the class which derives from clsCustomer and implements
ICustomer interface.
Figure 18.6 :- Inheritance and Interfaces in action
507
(A) How do we reference HTML controls using
Atlas?
<input id="Button1" type="button" value="button" />
You can reference the above HTML defined button using the below code snippet of
JavaScript. We have also attached the onClick method with the button. This method will
be called when we click the button.
var btnVisibility = new Sys.UI.Button($('Button1'));
btnVisibility.initialize();
btnVisibility.click.add(onClick);
You can refer other HTML elements like Label, Textbbox m CheckBox , Hyperlinks etc
using the Sys.UI.
Note: - Atlas is itself very huge. For the current book edition in the remaining section we
will just go through the questions. I will be answering them in the fourth edition because of
bandwidth. So guys till then try answering them yourself and send them across to me so that
I can be also benefited.
Can you explain server controls in Atlas?
Can you explain ScriptManager control?
What is the importance of UpdatePanel Control?
Can you explain update progress control?
Can you explain control extenders?
How can we data binding in Atlas?
Can you explain AtlasUIGlitz library?
I want to create a project like Google maps how
can we do that with Atlas?
508
How can we integrate Atlas with Web services?
How can implement drag and drop using Atlas?
How do we do authentications using Atlas?
How can we access profiles using Atlas?
How can we access dataset in Atlas?
We have custom data type on a web service how
do we access the same in Atlas?
509
19. Sample Projects
A good practical project is equivalent to this whole book – Shivprasad Koirala (just
kidding). In this chapter I will give some samples which you can practice for yourself. But
the motto behind these projects is not only to give you sample projects to complete but
the way you can approach to complete these projects. We will be completing the address
book application and finally you can get the full source in CD.
Note: - If you are looking for how big multinationals approach to complete software projects
then buy my book “C# Projects” from BPB publications. Mail bpb@vsnl.com for more
details.
There are four projects which I have outlined:-
√ Address book
√ Mini-Job Site
√ Chat Application
√ Reminder application
Approach to complete the projects
First thing coding is not everything in software world. They form the smallest part of the
project. So for the above four projects I am not expecting you to only give me source code
but lot of other artifacts (documents) also.
For all the projects above I have given you prototype look which can be useful in assisting
to get clarity. Do not take the looks from the prototype as the final one it can change but
the data elements should not change. For instance the edit is hyperlink according to the
prototype but in actual implementation it can be a button.
Below are expected documents for the projects discussed:-
√ Estimation document: - The first step in all the below project is an estimation
document. In how much time do you expect the project to be completed? You can
express the estimated figure in ‘man / days’ or ‘man / hours’. So use one of the
standard estimation methodologies like Function points, Use Case points or WBS to
estimate the project. If you do not know what these estimation methodologies are
see project management chapter for the same. Do not forget to put an assumption
section in the estimation.
510
√ Project Management plan document: - Once you know what the estimates are to
complete the project we need to make detail project management plan (PMP
document) for the same. You can use softwares like Microsoft project or even a
simple word and excel will do. For details of PMP document see Project Management
chapter for more details.
√ Use Case Document: - From the given scope and screen shots write Use Case
documents which will define the exact flow with actors, roles and scenarios. See
UML for what a Use Case document is?
√ Technical Design document: - Once the Use Case document is done start with the
technical document. Normally technical document use UML a lot. Look in to UML
chapter for more details. But from the above project point of view I need the following
things in the technical document for clarity sake :-
√ ER diagram (Which shows us the database diagram).
√ Class diagram.
√ Interaction diagram
√ Pseudo-code
√ Test plan: - This is normally done by the testing department. But just for practice
write test plans with steps and expected results. The above test plan will be
executed after the code complete.
√ Coding standard document: - This document will decide what naming conventions
will be followed through out the project i.e. Database, variable declaration, class
file naming conventions etc. For instance for database table objects you can have
naming convention like “tbl_group_actualobject” ? “tbl_accounts_inventory”. What
will be your commenting standards? For instance programmer name, changes made,
date when the changes where made etc.
√ Source code: - Finally the source code with commenting standards and naming
standards as defined in the coding standard document and according to the use case.
I have given the approach and documents I expect. But how to go about it is all up to you
guys. You are free to decide whih is the best approach for this project windows or web,
three tier or one tier, database access or sql server, VB.NET or C# etc .
So if you are able to finish any of the projects with these seven documents ZIP everything
and send it to me. I can check and verify if it has followed everything properly. Please
511
send all you documents zipped at shiv_koirala@yahoo.com . I will review and send in the
comments to you back. My main concern will be on how you approach rather than just
the code. Definitely I will like to see the code working but the approach will be reviewed
more in detail rather than just implementation.
I am sure if you do these projects yourself with all the above documents in place you will
be at very good position to face any big company interview with confidence.
Address book
EST sales private limited grew by 3 million dollars this year. EST deals with selling mineral
water in bulk to commercial premises. All customer information is maintained till today
in excel document. But maintaining data in excel had the following issues:-
√ No provision for avoiding duplicate customer data. All customers are uniquely
identified by phone numbers but it was becoming tedious to avoid duplicate customer
data.
√ Customer information was not so secured, anyone can easily copy the excel sheet.
Looking at the above two points EST decided to make a small address book application.
Below is the prototype of the “Address book” application.
512
Figure 19.1 : - Address book
Currently EST is interested only in three prime data Name, Phone and Address. This
address book will only be a windows application with only one screen as shown above.
Grid below will display the necessary customer information with a “Delete” and “Edit”
option. When EST staff want to add any new customer they will fill all three details and
click “Update” button. As soon as the customer data is entered the below grid will be
flourished. User can click on the “Edit” link to change customer information if necessary.
User can also click on the “Delete” link to remove the customer data permanently from
the database. When user clicks on the “Delete” link user will be prompted to confirm that
is he sure to delete the customer information from the database.
Mini-job site
Note: - This is one of the largest projects so if you think you are not comfortable do not
attempt this. You can keep this as last project to practice.
513
Mini-job site is a job site which brings together job seekers and companies. It has the
following five important functionalities:-
√ Login module.
This module ensures that only registered users can enter the job site.
Figure 19.2 : - Job login screen
Above is how the login screen will look like. Any user who enters the job site will be
identified by User Name. User Name can belong to a company or a job seeker. So when
user validates he has to provide the information on which type he is logging in. So the
drop down below will say that he is a job seeker or company.
√ Job Seeker registration module.
This module will be used by job seeker to register with min-job site to avail to the facilities
of the job site.
514
Figure 19.3 : - Job seeker registration
Above is a rough display of how the job seeker registration form will be. All the fields are
compulsory. He can only attach word document no other type of document is permitted
to be attached.
√ Job search module for job seekers.
This module will be used by job seekers to find current job posting and any matches with
their profile.
515
Figure 19.4 : - Job search employee
Job seeker can search jobs by key words (which is given by the company when they make
job postings) and number of years of experience. There is a “my matches” button which
will make auto matching using the keywords of your profile and the job. For instance you
have provided in your profile keyword “java and mysql” then the application will take
these keywords and try to find if there exists such matching in job keywords.
√ Employer’s registration module.
This module will be used by companies to register with the job site so that they can make
job postings.
516
Figure 19.5 : - Employers registration module
All the fields are compulsory on the employers registration screen. Logo will be only of
type GIF.
√ Employers job entry screen.
This module will be used by companies / job employers to enter job postings regarding
there company.
517
Figure 19.6 : - Employer Job Entry
Any job which needs to be posted in min-job site should have Job title, experience in
number of years, detail job description, keywords and category. Employer can add, edit
and close any job application posted by him. Employer can also see how many people
have applied for the job. You can see in the figure with the help of an arrow showing
“Number of applicants applied”. To see details of the same he can click on the link and
a detail screen of the same is seen as shown below.
518
.
Figure 19.7 : - Detail of the job seekers applied for the job
In the above figure of job seeker detail screen he can click on download to get his resume.
Employers can click on accept or reject to show further interest in the candidate. On
clicking accept and reject a mail is sent to the job seeker intimating him about the response.
Chat application
This is a simple web chat application which will be used by people to talk about any job
openings and interview related questions. It has only two modules the login and the chat
module.
Below is the screen shot of the login module. User Name should be unique in a room.
User enters a user name and clicks submit. If there is a user with a similar name “User
already existing” error will be thrown and user will be redirected to the login screen.
Figure 19.8 : - Chat room login
519
Once user is validated he enters the chat room as shown in the below figure. To send
messages in the chat room user can type in the below text box and click on the send
button.
Figure 19.9 : - Chat room
Reminder Application
Reminder application is used as an alarm to remind appointments. It will be a windows
based application. It will consist primarily of two modules Add reminder and Pop up
reminder.
520
Figure 19.10 : - Add / Delete reminder
Add reminder lets you add a reminder. Reminder note, Time and weekdays are compulsory
fields. Once the user adds the reminder it is seen in the grid below. User can also edit a
current reminder and change its details.
Figure 19.11 : - Pop-up reminder
Reminder application will sit in the task bar. All reminders start showing up one day
before the appointment. Reminders are reminded by the Pop-up reminder module which
flashes in the user computer when a reminder is due. Above figure shows how the reminder
will pop up. User has choice to either “Remind later” or “Dismiss” the same. If user
chooses “Remind later” he will be reminded after 3 hours by default and if user chooses
“Dismiss” the reminder will be purged and deleted from the reminder list.
521
Complete implementation of address book
application
In this section we will try to complete address book application.
Figure 19.12 : - Different documents for Address book project
We will follow the above defined cycle. First prepare requirement document, then estimate
it using function points, then prepare technical design document and finally execution
and test plans.
522
Use Case Document for address book
application
Figure :- 19.13 Use Case for Address book application
523
Estimation
The first thing after requirement gathering in the project is estimation. We will be using
function point to do estimation.
Note: - For details on how to use function see Project Management chapter.
There is one table to maintain so there is only one ILF with three DET’s .
Figure 19.14 :- ILF values for Address book application
We have one grid to display so there will be one EQ.
Figure 19.15 : - EQ for Address book application
Figure 19.16 :- EI for Addressbook application
As the application is quiet simple I have kept the GSC very much simple.
524
Figure: 19.17 - GSC for Address book application
525
Below are the final estimation figures. I have assumed that a programmer can complete
1.5 per day as it is a simple database project. So total comes to 7.9 Man days approximately
8 man days.
Figure 19.18 : - Complete Address book in Estimation
We also need to distribute the estimation properly in phases. As said previously we will
also prepare technical documentation, write uses cases, test script etc. Always remember
function points, use case points or any other estimation methodology gives you size of
only execution phase. None of the estimation methodologies takes in to account hardware,
documentation etc. So if 7.9 man days is my total coding effort then 20 % of that will be
my technical design and requirement gathering and 5 % for testing.
526
Note: - You can get the complete estimation of the “addressbook” in CD.
It’s very much possible that the small address book application can become a huge project
by itself. So below are the assumptions while estimating.
Assumption Sections
√ Address book will not have huge traffic load. Maximum number of users at any
point will not exceed 10.
√ No backup mechanism is implemented.
√ No Audit history is implemented.
√ Concurrency measures are not taken care for the project.
√ Address book will be windows based application
√ No login screen is provided for the application.
√ As the data is not critical no special security aspect is taken care for the application.
√ Estimation only includes the software cost of the project any licenses or hardware
has a different cost factor.
Technical Design Document
Overview
This document will decide in detail the technical specification for the address book
application according to the Use case and the initial scope provided.
Architecture approach
This is a simple desktop application which will be used by limited users. We will be using
three tier architecture with access database. Access database was recommended because
very less data growth is expected.
527
Figure 19.19 : - Architecture road map for address book application
ER Diagram
Below is the ER diagram for address database. “AddressId” is the primary key.
Figure 19.20 :- ER Diagrams
528
Database Layer
Figure 19.21 : - Database access layer diagram
Pseudo Code explanation:-
“addressBookDB” constructor
Connection string and Database type is initialized in the constructor of addressBookDB
class. Both the values will be stored in “App.config” file in “appSettings” section with
“ConnectionString” and “DatabaseType” key. given below is how the configuration file
section will look like
<appSettings>
<add key="ConnectionString" value="here goes the connection string"/>
<add key="DatabaseType" value="1"/>
</appSettings>
Database type will be any of the following type :-
√ Access intDatabaseType = 1
√ SQL Server intDatabaseType = 2
√ Oracle intDatabaseType = 3
Pseudo-code for the constructor will be as below:-
public addressBookDB()
{
529
// create the appsettingReader object
AppSettingsReader objAppsettingreader = new AppSettingsReader();
// Get the Connectionstring using the “ConnectionString” key
strConnectionString =objAppsettingreader.GetValue("ConnectionString");
// Get the DatabaseType using the “DatabaseType” key.
intDatabaseType = objAppsettingreader.GetValue("DatabaseType");
}
“GetConnectionObject” function
This function returns connection object with IDbConnection interface. This function
will use connection string loaded in the “strConnectionString” property. It will do the
following things:-
√ If there is no “databasetype” specified it will raise illegal provider error.
√ Depending on databasetype it will create the connection object. For first phase we
will be only providing service to access database. So the “OleDBConnection” class
object will created and assigned to the interface IDBConnection.
Note: - “IDBConnection” interface is used as we need to keep every thing generalized so
that we can support multiple database types like Access, SQL Server etc. Below is the
pseudo-code for the same.
public IDbConnection GetConnectionObject()
{
IDbConnection objConnection = null;
if (intDatabaseType==0)
{
Throwexception that illegal database provider;
}
// If its access then use the OLeDBConnection class to create object.
530
// Other database like oracle and sql server will be considered for the second phase.
if (intDatabaseType == 1)
{objConnection = new OleDbConnection();}
// set the connection string
objConnection.ConnectionString = strConnectionString;
return objConnection;}
GetCommand Function
This function will return a command object interface depending on the connection object
passed. This function also returns “IDBCommand” so that we can operate with generalized
command object for all database types (like Access, SQL Server etc).
public IDbCommand GetCommand(IDbConnection objDbConnection)
{
IDbCommand objCommand = objDbConnection.CreateCommand();
return objCommand;
}
GetAddresses Function
This function will return addresses from address database as “IDataReader” interface,
which the clients can loop and use the same. Below is the pseudo-code for “GetAddresses”
function:-
Public function IDataReader GetAddresses()
{
// Get the connection object using GetConnectionObject() function
objConnection = GetConnectionObject();
// open the connection object
531
objConnection.Open();
// Using the GetCommand function and objConnection get the command object
objCommand = GetCommand(objConnection);
// current this DAL component will only support simple SQL
// and not Stored procedures
objCommand.CommandType = CommandType.Text;
// We need all the records so us the Select * from SQL
objCommand.CommandText = "Select * from Address";
// finally execute the reader
objDataReader = objCommand.ExecuteReader();
// and then return the reader to the function
Return objDataReader;
}
GetAddresses (int intAddressid)
This is an over loaded function for “GetAddresses” which takes addressid as input. There
is no difference from the previous function but SQL statement will change.
Public function IDataReader GetAddresses(int intAddressid)
{
// Get the connection object using GetConnectionObject() function
objConnection = GetConnectionObject();
// open the connection object
objConnection.Open();
// Using the GetCommand function and objConnection get the command object
objCommand = GetCommand(objConnection);
// current this DAL component will only support simple SQL
532
// and not Stored procedures
objCommand.CommandType = CommandType.Text;
// We need to select only one address with the specific addressid
objCommand.CommandText = "Select * from Address where addressid=" +
intAddressid;
// finally execute the reader
objDataReader = objCommand.ExecuteReader();
// and then return the reader to the function
Return objDataReader;
}
deleteAddress(int intAddressid)
This function delete the specific address record specified
public void deleteAddress(int intAddressid)
{
// First get the connection
objConnection = GetConnectionObject();
// open the connection
objConnection.Open();
// get the command object using this connection object
objCommand = GetCommand(objConnection);
// current this DAL component will only support simple SQL
// and not Stored procedures
objCommand.CommandType = CommandType.Text;
// check first if there is any addressid passed
if (intAddressid != 0)
533
{
// then delete the addressid from the address table
objCommand.CommandText = "delete from Address where addressid=" +
intAddressid.ToString();
}
// execute the command
objCommand.ExecuteNonQuery();
// close the objec
objCommand.Connection.Close();
}
addAddress
This method add and updates address records to the address table. The dotted lines are
the same code as defined for the previous “Getaddresses” and “deleteaddress” sub routines.
Dotted lines will have the same code
√ Get the connection object
√ Get the command object.
√ Set the commandtext
√ And finally execute the command object.
Public void addAddress(int intAddressid,string strName,string strAddressName,string
strPhoneNumber)
{


...
...
if (intAddressid==0)
534
{
objCommand.CommandText = "insert into Address(Name, Address, Phonenumber)
values('" + strName + "','" + strAddressName + "','" + strPhoneNumber + "')" ;
}
else
{objCommand.CommandText = "update Address set name='" + strName + "',
Address='" + strAddressName + "',phonenumber='" + strPhoneNumber + "' where
addressid=" + intAddressid.ToString();}
...
Objcommand.executenonquery();}
535
Business Layer
Figure 19.22: - Business object diagram
Above is the business object diagram for the address application. There are two main
business objects:-
AddressBook
This class will have the validations and two basic operational functionalities adding new
addresses and delete addresses. “AddressBook” class represents a single entity class.
536
All the business validations will be written in the set property of the class. For instance
for the name property you can see that if there is no name provided it will throw error to
the client.
Public string Name
{Set
{
// if the strName is not provided then throw a exception
If value.length == 0
{
Throw new exception(“Name is a compulsory field”);
}
// if all the validations are ok then set the private value
strName = value;}
Get
{return strName;}}
Same type of business validation will follow for address property.
addAddress()
This method will call the “addAddress” method of the database class “addressBookDB”
and add new address record in the database.
Pseudo-code for calling the database object will be something as given below.
addressBookDB.addAddress (intAddressid, strName, strAddress, strPhoneNumber)
Also note that the private variables passed to the address database objects.
537
deleteAddress()
This method will call the “deleteAddress” method of the “addressBookDB” class and
delete a particular address from the address database.
Pseudo-code for calling the database object will be something as below.
addressBookDB.deleteAddress(intAddressid);
AddressBooks ( inherits from Collectionbase)
This class will be having collection of “AddressBook” type objects and it inherits from
the System.collections. Collectionbase class. “AddressBooks” represents a collection. It
has the following methods and properties:-
LoadAddress
“Loadaddress” method loads the address in to collection base. Below is the pseudo-code
for the same.
public void loadAddress()
{
// before we load all the address clear the list collection
List.Clear();
// call the addressbookdb and and the get the address datareader
objDatareader = objaddressBookDB.GetAddresses();
// loop through the datareader and load the
// collection of addressbooks
while (objDatareader.Read())
{
AddressBook objAddressBook ;
objAddressBook = new AddressBook();
objAddressBook.addressId = objDatareader["Addressid"];
538
objAddressBook.Address = objDatareader["Address"].ToString();
objAddressBook.Name = objDatareader["Name"].ToString();
objAddressBook.PhoneNumber = objDatareader["PhoneNumber"].ToString();
// after the values are set add it to the list collection
List.Add(objAddressBook);
}
// finally close the object
objDatareader.Close();
}
LoadAddress(int intAddressid)
This is a overloaded method it will have the same logic as defined previously for
“loadAddress” method without parameters. Only that it will call
objaddressBookDB.GetAddresses(intAddressid);
539
Presentation Layer
FrmAddressBook.cs
Figure 19.23 : - UI component Diagram
540
Presentation layer define the way “addressbook” and “addressbooks” object will flow
and interact.
Following are the various methods and properties in the presentation layer:-
AddressBook and AddressBooks object will define a private variable in the presentation
layer.
private AddressBook objAddressBook = new AddressBook();
private AddressBooks objAddressBooks = new AddressBooks();
GUI components
Figure 19.24 :- GUI Component list
setValueFromUI
This will take the value from the UI components and set it to the address object. Pseudocode
is as shown below:-
private void setValueFromUI()
{
objAddressBook.Name = txtName.Text;
541
objAddressBook.PhoneNumber = txtPhoneNumber.Text;
objAddressBook.Address = txtAddress.Text;
}
ClearUI
This sub routine clears all the user interface values.
private void clearUI()
{
txtName.Text = "";
txtPhoneNumber.Text = "";
txtAddress.Text = "";
}
LoadAddress
This subroutine will bind the address collection object that is objAddressBooks to the
datagrid.
private void loadAddress()
{// call the load method of the addressbooks object
objAddressBooks.loadAddress();
// clear all the previous records in the grid
dgAddresses.DataSource = null;
//rebind the fresh new data in t he addressbooks collection
dgAddresses.DataSource = objAddressBooks;
// refresh the grid
dgAddresses.refresh();
}
542
LoadAddressinUI
“LoadAddressinUI” does the exact opposite of what “SetValueFromUI” does.
public void loadAddressinUI(int intAddressId)
{
// Load the addressbooks object with the addressid
objAddressBooks.loadAddress(intAddressId);
// check if there are any address object loaded
if (objAddressBooks.Count > 0)
{
// if yes then set the current addressbook object to the first object of the
// addressbooks collection object
objAddressBook = objAddressBooks[0];
}
// finally load all the object value in to the address book UI
txtName.Text = objAddressBook.Name;
txtAddress.Text = objAddressBook.Address;
txtPhoneNumber.Text = objAddressBook.PhoneNumber;}
543
Method call flow for address book
Figure 19.25 : - Method flow in UI
Above shows how the methods will interact among themselves to accomplish the task.
544
Test plans
Add new Address with Name as nothing
Steps for the test:
√ Start the Address book application
√ Enter the following data
√ Press Update button
√ System should pop up with error message “Name is Compulsory field”
√ Enter proper Name data.
√ Press update button
√ System should save the information and display the newly entered data in the grid
below.
Add new Address with Address as nothing
Steps for the test:
√ Start the Address book application
√ Enter the following data
√ Press Update button
545
√ System should pop up with error message “Address is Compulsory field”
√ Enter proper Name data.
√ Press update button
√ System should save the information and display the newly entered data in the grid
below.
Update Address
Steps for the test:
√ Start the Address book application
√ Select one of the addresses from the address data grid. Address details will be
displayed on the textboxes above.
√ Change some information in all the three fields.
√ Press Update button
√ System should save the changed information and display the newly entered data in
the grid below.
Cancel Address
Steps for the test:
√ Start the Address book application
√ Enter the following data
√ Press Cancel button
546
√ System should clear all the three textboxes.
Delete existing Address data
Steps for the test:
√ Start the Address book application
√ Select one of the addresses from the address data grid. Address details will be
displayed on the textboxes above.
√ Press Delete button
√ System should delete the selected address and grid below is refreshed and the currently
deleted address is not displayed in the grid.
Source code
You can get the source code from the CD. I have tried to comment as much as possible
but if you do not get some logic mail me at shiv_koirala@yahoo.com. Below are the
snapshot of all the documents which are provided in the CD. As this is a sample project
the documents are small in size and not that complicated. But when it comes to huge
projects there are more documents than what I have created. But these are the basic
documents which you should have.
547
Figure 19.26 :- Requirement Gathering Document Snapshot.
Figure 19.27 : - Technical Specification Document Snapshot
548
Figure 19.28 : - Test case document snapshot
When you run the application you can get the following error. This happens because the
connection string is not pointing to proper path where MDB file exists.
Figure 19.29 : - Error while running address book application
549
So click on the config file “WindowsAddressBook.exe.config” which is present in the
“Debug” folder and open the same in notepad.
Figure 19.30 : - Edit “WindowsAddressBook.exe.config”
After you edit the config file in notepad change the “Datasource” property in
“ConnectionString” to the path where the database file .MDB is located.
550


No comments:

Post a Comment